Python Pyserial未正确读取串行输入并引发错误

Python Pyserial未正确读取串行输入并引发错误,python,arduino,pyserial,Python,Arduino,Pyserial,我正在编写一个代码,使用pyserial从arduino读取串行输入。输入字符串应该类似于“2786,7258.00,10,20,5,0200004809.14,N,1131.70,E”,但pyserial给出的是“286,9246.00,10,20,0200004809.74,N,131.90,E”,几秒钟后程序也会出现错误 Traceback (most recent call last): File "/home/saurabh/Desktop/testreception.py"

我正在编写一个代码,使用pyserial从arduino读取串行输入。输入字符串应该类似于“2786,7258.00,10,20,5,0200004809.14,N,1131.70,E”,但pyserial给出的是“286,9246.00,10,20,0200004809.74,N,131.90,E”,几秒钟后程序也会出现错误

 Traceback (most recent call last):
    File "/home/saurabh/Desktop/testreception.py", line 14, in <module>
    main()
    File "/home/saurabh/Desktop/testreception.py", line 9, in main
      x.append(ser.readline())
    File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 460,  in read
    raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
`SerialException: device reports readiness to read but returned no data (device disconnected?)
arduino代码是:

 int TEAM_ID = 2786;
 int h = 00;
 int m = 00;
 int s = 00;
 int MISSION_TIME = s*1 + m*100 + h*10000;
 float ALT_SENSOR = 300;
 int OUTSIDE_TEMP = 10;
 int INSIDE_TEMP = 20;
 int VOLTAGE = 12;
 int FSW_STATE = 0;
 int ROTOR_RATE = 2000;
 float LATTITUDE = 4807.038;
 char LAT_CHAR = 'N';
 float LONGITUDE = 01131.0000;
 char LON_CHAR = 'E';
 int i = 1, j = 1;
 void intialize()
 {
  h = 00;
  m = 00;
  s = 00;
  MISSION_TIME = 0;
  ALT_SENSOR = 300;
  OUTSIDE_TEMP = 10;
  INSIDE_TEMP = 20;
  VOLTAGE = 12;
  FSW_STATE = 0;
  LATTITUDE = 4807.038;
  LONGITUDE = 01131.0000;
  i = 1; j = 1;
 } 
 void setup(){
  Serial.begin(9600);
 }
 void loop()
 {
  Serial.print(TEAM_ID); Serial.print(',');
  Serial.print(MISSION_TIME); Serial.print(',');
  Serial.print(ALT_SENSOR); Serial.print(',');
  Serial.print(OUTSIDE_TEMP); Serial.print(',');
  Serial.print(INSIDE_TEMP); Serial.print(',');
  Serial.print(VOLTAGE); Serial.print(',');
  Serial.print(FSW_STATE); Serial.print(',');
  Serial.print(ROTOR_RATE); Serial.print(',');
  Serial.print(LATTITUDE); Serial.print(',');
  Serial.print(LAT_CHAR); Serial.print(',');
  Serial.print(LONGITUDE); Serial.print(',');
  Serial.print(LON_CHAR); 
  Serial.print('\n');
  delay(1000);
  MISSION_TIME += i;
  j += 1;
  if(s>59)
 {
  m=m+1;
  s += 1;
 }
  if(m>60)
 {
  h=h+1;
 }
  if(j==20)
 {
  FSW_STATE = 3;
 }
  if(j==30)
 {
  FSW_STATE = 4;
 }
  if(j==40)
{
 FSW_STATE = 5;
}
 if(j==50)
{
 FSW_STATE = 6;
}
 OUTSIDE_TEMP += 0.3;
 INSIDE_TEMP += 0.2;
 VOLTAGE -= 0.2;
 ALT_SENSOR -= 6;  
 s += 1;
 LATTITUDE += 0.3;
 LONGITUDE += 0.1;
 if(ALT_SENSOR == 0)
{
 intialize(); 
}
 loop;
}

是否可能还包括arduino代码?现在看来,这段python代码没有什么严重错误。这可能暗示您对从arduino返回的字符串的假设是错误的。代码已经包含在内,请检查并告知!)提前谢谢!在你的Arduino代码中有很多东西我需要改变,例如,在循环结束时,不要调用
循环
(实际上,你甚至没有调用它,你只是写下名称),这将导致无限递归。同样,你的秒、分钟、小时都在界外:考虑使用模算符。你能指定你在哪个Arduino板上运行这个吗?另外,我在这个问题中添加了arduino标记,因为问题不在于python。实际上,您确定代码已上载到arduino吗?您显示的代码不可能改变团队ID,但pyserial返回的就是这个代码?事实上,我在Arduino Uno上运行了这个代码,代码是上传的,因为我可以在Arduino IDE的串行监视器中看到结果。我需要一个无限循环,我想不断地读代码,直到python程序终止。是的,团队ID并没有改变!问题是pyserial在读取时丢失了数据!谢谢你的帮助,先生!
 int TEAM_ID = 2786;
 int h = 00;
 int m = 00;
 int s = 00;
 int MISSION_TIME = s*1 + m*100 + h*10000;
 float ALT_SENSOR = 300;
 int OUTSIDE_TEMP = 10;
 int INSIDE_TEMP = 20;
 int VOLTAGE = 12;
 int FSW_STATE = 0;
 int ROTOR_RATE = 2000;
 float LATTITUDE = 4807.038;
 char LAT_CHAR = 'N';
 float LONGITUDE = 01131.0000;
 char LON_CHAR = 'E';
 int i = 1, j = 1;
 void intialize()
 {
  h = 00;
  m = 00;
  s = 00;
  MISSION_TIME = 0;
  ALT_SENSOR = 300;
  OUTSIDE_TEMP = 10;
  INSIDE_TEMP = 20;
  VOLTAGE = 12;
  FSW_STATE = 0;
  LATTITUDE = 4807.038;
  LONGITUDE = 01131.0000;
  i = 1; j = 1;
 } 
 void setup(){
  Serial.begin(9600);
 }
 void loop()
 {
  Serial.print(TEAM_ID); Serial.print(',');
  Serial.print(MISSION_TIME); Serial.print(',');
  Serial.print(ALT_SENSOR); Serial.print(',');
  Serial.print(OUTSIDE_TEMP); Serial.print(',');
  Serial.print(INSIDE_TEMP); Serial.print(',');
  Serial.print(VOLTAGE); Serial.print(',');
  Serial.print(FSW_STATE); Serial.print(',');
  Serial.print(ROTOR_RATE); Serial.print(',');
  Serial.print(LATTITUDE); Serial.print(',');
  Serial.print(LAT_CHAR); Serial.print(',');
  Serial.print(LONGITUDE); Serial.print(',');
  Serial.print(LON_CHAR); 
  Serial.print('\n');
  delay(1000);
  MISSION_TIME += i;
  j += 1;
  if(s>59)
 {
  m=m+1;
  s += 1;
 }
  if(m>60)
 {
  h=h+1;
 }
  if(j==20)
 {
  FSW_STATE = 3;
 }
  if(j==30)
 {
  FSW_STATE = 4;
 }
  if(j==40)
{
 FSW_STATE = 5;
}
 if(j==50)
{
 FSW_STATE = 6;
}
 OUTSIDE_TEMP += 0.3;
 INSIDE_TEMP += 0.2;
 VOLTAGE -= 0.2;
 ALT_SENSOR -= 6;  
 s += 1;
 LATTITUDE += 0.3;
 LONGITUDE += 0.1;
 if(ALT_SENSOR == 0)
{
 intialize(); 
}
 loop;
}