当前位置: 首页 > 知识库问答 >
问题:

Arduino Serial.write处理返回0?

赵星华
2023-03-14

我现在有一个Arduino程序,通过一个串行事件来传递加速计值,以使处理工作正常。我正在尝试将温度计添加到设置中,但处理过程仅从读取pin接收到0。如果我是连载的话。在设置中打印读数它确实可以打印到串行监视器上,但是我无法让它在我的加速计读数旁边发送正确的值。

Arduino代码:

int inByte = 0;

void setup() {  
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  establishContact();  // send a byte to establish contact until receiver responds
}

void loop() {

  if (Serial.available() > 0) {

    // get incoming byte:
    inByte = Serial.read();

    // send sensor values:
    Serial.write(analogRead(A3)); // X AXIS
    Serial.write(analogRead(A2)); // Y AXIS
    Serial.write(analogRead(A1)); // Z AXIS
    Serial.write(analogRead(A0)); // TEMPERATURE
  }
}

void establishContact() {
  while (Serial.available() <= 0) {
    Serial.print('A');   // send a capital A
    delay(300);
  }
}

处理代码:

import processing.serial.*;

Serial myPort;                       
int[] serialInArray = new int[4];    
int serialCount = 0;                 
int xInput, yInput, zInput;
float temperature;
boolean firstContact = false;

void setup() {
  size(600, 600, P3D);
  pixelDensity(2);
  noStroke();
  background(0);
  printArray(Serial.list());
  String portName = Serial.list()[4];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
}

void serialEvent(Serial myPort) {
  // read a byte from the serial port:
  int inByte = myPort.read();
  // if this is the first byte received, and it's an A,
  // clear the serial buffer and note that you've
  // had first contact from the microcontroller. 
  // Otherwise, add the incoming byte to the array:
  if (firstContact == false) {
    if (inByte == 'A') { 
      myPort.clear();          // clear the serial port buffer
      firstContact = true;     // you've had first contact from the microcontroller
      myPort.write('A');       // ask for more
    }
  } else {
    // Add the latest byte from the serial port to array:
    serialInArray[serialCount] = inByte;
    serialCount++;

    // If we have 3 bytes:
    if (serialCount > 2 ) {

      zInput = serialInArray[0]-80;
      yInput = serialInArray[1]-80+69;
      xInput = serialInArray[2]-77;
      temperature = serialInArray[3]; // should return voltage reading (i.e 16ºc = 130);
      //println("x = " + xInput + ", y = " + yInput + ", z = " + zInput + ", Temp = " + serialInArray[3]);

      // Send a capital A to request new sensor readings:
      myPort.write('A');
      // Reset serialCount:
      serialCount = 0;
    }
  }
}

加速计值打印得很完美,但温度仅返回0。电视连续剧串行监视器中的print(analogRead(A0))为我提供了正确的值,因此温度计肯定在工作。

任何帮助将不胜感激,谢谢!

共有1个答案

申屠锦
2023-03-14

在这方面,

如果(连续计数)

换成

如果(连续计数)

或者尝试使用打字或改变整数的温度!!!

int温度;

 类似资料:
  • 1.API 返回结构 返回结果(response)分为:状态码(status code)、头部(headers)、消息体(body)。其中算法的结果会以 JSON 格式放在消息体中。 如何从 HTTP 返回中分别获取这三部分信息,请参见所用 HTTP 库的文档。 解析 JSON 格式需要寻找所用语言的 JSON 库,参见 http://www.json.org/ 2.正常结果 状态码为 2xx的为

  • 问题内容: 我正在使用具有以下签名的类: 我正试图通过其他班级来称呼它: 但是在这里我得到这个错误: 为什么在Class扩展行中将我指定为第三个参数? 问题答案: 您可以通过对返回的AsyncTask调用AsyhncTask的get()方法来获得结果,但是当它等待获取结果时,它将把它从异步任务变成同步任务。 由于您的AsyncTask位于单独的类中,因此您可以创建一个接口类并在AsyncTask中

  • 本文向大家介绍ThinkPHP处理Ajax返回的方法,包括了ThinkPHP处理Ajax返回的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP处理Ajax返回的方法,分享给大家供大家参考。具体实现方法如下: 在ThinkPHP中可以直接使用ajax返回: 而在处理过程中可以使用这个函数处理: 希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

  • 这里我有一个函数,它应该返回秒数作为变量sec,但是return语句在数据库事务之前运行,所以我一直没有定义。我可以做些什么来确保事务在回电话之前完成。类似于用于。

  • 问题内容: 我使用Jenkins(在Windows计算机上)作业通过Ant为不同的目标编译一些代码。为此,我将对ant目标的调用包装在(windows)批处理循环中,如下所示: 那是我的第一个主意……但是即使(例如)target1失败,此代码也可以成功构建。因此,我在Windows批处理构建步骤中增加了一些内容,以获取更多概述。另外,我还用了cecekdout代码来获得与Jenkins本地计算机相

  • 我正在开发一个需要