[英]Why my arduino serial to LCD gets stuck after 26 loop?
我从 raspberry pi(通过 struct 模块)得到一个浮点数,我的草图只在 LCD 屏幕上显示数据。
26 次修正循环后,27 日,Arduino 崩溃。
你能告诉我27号有什么问题吗?
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.