繁体   English   中英

为什么我的 arduino 串口转 LCD 在 26 次循环后卡住了?

[英]Why my arduino serial to LCD gets stuck after 26 loop?

我从 raspberry pi(通过 struct 模块)得到一个浮点数,我的草图只在 LCD 屏幕上显示数据。

26 次修正循环后,27 日,Arduino 崩溃。

你能告诉我27号有什么问题吗?

  • 将延迟从 20ms 更改为 1s:NOK
  • 将字节指针移出函数:NOK
float f;

void getFloat(){
  byte *fdata = (byte *) &f;
  while(Serial.available() <= 4){}
  Serial.readBytes(fdata,4);
  }

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):

  lcd.setCursor(0, 0);
  lcd.print("Ready to receive");
  getFloat();
  AZ=f;
  getFloat();
  AL=f;
  lcd.setCursor(0, 0);
  lcd.print("Moving            ");
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print("AZ");
  lcd.print(String(AZ));
  lcd.setCursor(7, 1);
  lcd.print("; AL");
  lcd.print(String(AL));
  delay(1000);
  Serial.println("ok");
}

27日,arduino不再确认数据,LCD显示:==ving AZy; AL0.00=

=== 分辨率 ===

之前,我必须通过下一个代码发送两次浮点数才能获得最后一个,如果没有,我会在我的 arduino 上获得以前的数据,但我认为限制来自那里:

  def sendFloatToArduino(self,data):
    self.serial.write(struct.pack('<f', data))
    self.serial.flush()

  def pointer(self,AZ,AL):
#send the data
    print("AZ : "+str(AZ)+" ; AL : "+str(AL))
    self.sendFloatToArduino(AZ)
    self.sendFloatToArduino(AL)
    self.sendFloatToArduino(AZ)
    self.sendFloatToArduino(AL)
#wait for ack
    while (self.serialArduino.in_waiting==0):
      pass
    print(self.serialArduino.readline())

删除双发后,一切正常。

我无法弄清楚问题所在,但您可以尝试以下代码。 我认为它更强大。

float getFloat()
{
    float res;
    while (Serial.available() < sizeof(res))
        ;
    Serial.readBytes((char*)&res, sizeof(res));
    return res;
}

void loop()
{
    // ...
    AZ = getFloat();
    AL = getFloat();
    // ...
}

感谢您的回答。

问题不在于您所说的解析,而在于 LCD 显示器。

我试过将浮点数转换为数组并且只得到 16 个字符:

  char str[16];
  AZ=getFloat();
  AL=getFloat();
  char buffer1[20];
  char buffer2[20];
  dtostrf(AZ,7,5,buffer1);
  dtostrf(AL,7,5,buffer2);
  for (int i=0;i<8;i++){
    if (i>1){
      str[i]=buffer1[i-2];
      str[i+8]=buffer2[i-2];
    }
  }
  Serial.println(str);

但是我在串行输出上得到了这个: AZ358.54AL48.544\\x12.BBHE\\xb3CGm=\\r\\n => 用\\0固定我认为问题是 elswhere:我必须通过下一个代码发送两次浮点数才能得到最后如果没有,我会在我的 arduino 上获得以前的数据,但我认为限制来自那里:

  def sendFloatToArduino(self,data):
    self.serial.write(struct.pack('<f', data))
    self.serial.flush()

  def pointer(self,AZ,AL):
#send the data
    print("AZ : "+str(AZ)+" ; AL : "+str(AL))
    self.sendFloatToArduino(AZ)
    self.sendFloatToArduino(AL)
    self.sendFloatToArduino(AZ)
    self.sendFloatToArduino(AL)
#wait for ack
    while (self.serialArduino.in_waiting==0):
      pass
    print(self.serialArduino.readline())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM