我从树莓派(通过结构模块)获得了一个 float ,我的草图仅在液晶屏幕上显示数据。
经过26次更正循环后,27日,Arduino崩溃了。
你能告诉我27号出了什么问题吗?
- 将延迟从 20 毫秒更改为 1 秒: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显示: ==维 AZy; AL0.00=
===分辨率===
之前,我必须通过下一个代码发送两倍的 float 才能获得最后一个,如果没有,我会在我的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())
删除重复发送后,一切正常。
最佳答案
感谢您的回答。
问题不在于您所说的解析,而在于 LCD 显示屏。
我尝试将 float 转换为数组,但只得到 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
修复
我认为问题出在其他地方:我必须通过下一个代码发送两倍的 float 才能获得最后一个,如果没有,我会在我的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())
关于c - 为什么我的arduino串口到LCD在26个循环后卡住了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123174/