Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 python file.write()输出格式不一致_Python 2.7_Serialization_Arduino_Serial Port - Fatal编程技术网

Python 2.7 python file.write()输出格式不一致

Python 2.7 python file.write()输出格式不一致,python-2.7,serialization,arduino,serial-port,Python 2.7,Serialization,Arduino,Serial Port,我一直在使用arduino(NANO ATmega328)进行一个项目,它可以读取心率和其他传感器的值,并使用串行通信发送数据包。然后,我从一个基本python脚本中读取序列号,将数据写入一个文件,以便以后打印 ser = serial.Serial('/dev/ttyUSB0', 9600) final_output_file = open('final_output_file.out','w') while True: initial =time.time(

我一直在使用arduino(NANO ATmega328)进行一个项目,它可以读取心率和其他传感器的值,并使用串行通信发送数据包。然后,我从一个基本python脚本中读取序列号,将数据写入一个文件,以便以后打印

ser = serial.Serial('/dev/ttyUSB0', 9600)
final_output_file = open('final_output_file.out','w')

     while True: 
          initial =time.time()

          x = ser.readline() # Read the newest output from the Arduino

          final_output_file.write(str(initial)+" , " + str(x) )

          sleep(.01)
我是串行通信新手,毫无疑问,我在这段代码中遗漏了一些东西(比如异常处理),但它在过去很长一段时间内一直在提供数据写入

我现在遇到的问题是,有时文件是以二进制(应用程序/八位字节流)类型编写的,而其他文件则是纯文本输出(我想从中打印)。以下是一行不同输出的示例(如果有用):

二进制(应用程序/八位字节流)-一行输出

2c20 3020 2c20 3238 362e 3531 202c 2030
纯文本(我想要的)-输出

我可以看到它们包含不同数量的条目。我也尝试过从这个转换回字符串(我知道这可能是愚蠢的,但在我的天真中我做到了…)

我试着看其他问题来寻找答案。我一直在使用这个网站,通常会找到我想要的(这是我的第一篇帖子)

arduino是否随机更改其输出格式?我已将arduino输出打印到终端进行检查,但似乎没有。我使用arduino进行串行通信的方法如下:

Arduino系列打印

Serial.print(Signal1);
Serial.print(" , ");
Serial.print(Signal2); 
...
作为一种危险的猜测,我的python代码(如上图所示)中的x=ser.readline()可能是罪魁祸首?我是否必须提供我想要读取的数据类型的详细信息?我本以为这是暗示

请帮忙!如果这是新手犯的错误……那是因为我是新手!如果有用的话,很乐意提供更多信息

Arduino代码:

    void loop(){
  digitalWrite(7, HIGH); //MUSIC SHIELD PULL HIGH TO NOT ACTIVATE

       if (i>count) //RESET AFTER 600 reads
        {
          i=0;
        }  

    Serial.print(i);                
    Serial.print(" , ");
    Serial.print(Signal);                
    Serial.print(" , ");
    Serial.print(BPM);                
    Serial.print(" , ");
    Serial.print(gyro1); 
    Serial.print(" , ");
    Serial.print('0');
    Serial.print(" , ");
    Serial.print('0');
    Serial.print(" , ");
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,14,true);  // request a total of 14 registers

  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

 gyro_read1=gyro1;
 gyro1=sqrt(pow(GyX,2)+pow(GyY,2)+pow(GyZ,2));
 gyro_read2=gyro1;
 //Serial.println(digitalRead(11)); - Test push buttons
 int val=digitalRead(11);
 if(val==0)
 {
  sfx.playTrack(n0); 
 }

      if ( i == count) //if i reaches the 600 count mark, meaure the new unbiased std deviation
      { 
        stddev_heart_stat= myStats_heart.unbiased_stdev();
        stddev_gyro_stat=myStats_gyro.unbiased_stdev();


        Serial.print(stddev_heart_stat,8);
        Serial.print(" , ");
        Serial.println(stddev_gyro_stat,8);

        myStats_heart.clear();
        myStats_gyro.clear();

   if(stddev_gyro_stat<16.7 && stddev_heart_stat>5 && hour()>3 )
 //test   if(stddev_gyro_stat<18.7 && stddev_heart_stat>0 && hour()>0 )
        {
          uint8_t n = 0;
          sfx.playTrack(n);
          delay(3000);
            Serial.print(i);                
            Serial.print(" , ");
            Serial.print(0);                
            Serial.print(" , ");
            Serial.print(0);                
            Serial.print(" , ");
            Serial.print(0); 
            Serial.print(" , ");
            Serial.print('0');
            Serial.print(" , ");
            Serial.print('0');
            Serial.print(" , ");
            Serial.print(0);
            Serial.print(" , ");
            Serial.println(0);
          digitalWrite(7, HIGH);
        }
      }
      else
       {
           myStats_gyro.add(gyro1);
           myStats_heart.add(BPM);
           Serial.print(stddev_heart_stat,8);
           Serial.print(" , ");
           Serial.println(stddev_gyro_stat,8);
       } 

  heart_read1=BPM;
  heart_read2=BPM;
  delay(100); 
  i+=1; 
}
void循环(){
digitalWrite(7,高);//音乐屏蔽拉高不激活
if(i>count)//读取600次后重置
{
i=0;
}  
连载印刷(一);
连续打印(“,”);
串行打印(信号);
连续打印(“,”);
串行打印(BPM);
连续打印(“,”);
串行打印(gyro1);
连续打印(“,”);
Serial.print('0');
连续打印(“,”);
Serial.print('0');
连续打印(“,”);
导线起始传输(MPU);
Wire.write(0x3B);//从寄存器0x3B(ACCEL_XOUT_H)开始
线端传输(假);
requestFrom(MPU,14,true);//请求总共14个寄存器

AcX=Wire.read()从arduino输出时是否使用行尾字符?我使用-Serial.println()进行最后一次信号读取,以便它打印到下一行,但不使用行尾字符。
    void loop(){
  digitalWrite(7, HIGH); //MUSIC SHIELD PULL HIGH TO NOT ACTIVATE

       if (i>count) //RESET AFTER 600 reads
        {
          i=0;
        }  

    Serial.print(i);                
    Serial.print(" , ");
    Serial.print(Signal);                
    Serial.print(" , ");
    Serial.print(BPM);                
    Serial.print(" , ");
    Serial.print(gyro1); 
    Serial.print(" , ");
    Serial.print('0');
    Serial.print(" , ");
    Serial.print('0');
    Serial.print(" , ");
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,14,true);  // request a total of 14 registers

  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

 gyro_read1=gyro1;
 gyro1=sqrt(pow(GyX,2)+pow(GyY,2)+pow(GyZ,2));
 gyro_read2=gyro1;
 //Serial.println(digitalRead(11)); - Test push buttons
 int val=digitalRead(11);
 if(val==0)
 {
  sfx.playTrack(n0); 
 }

      if ( i == count) //if i reaches the 600 count mark, meaure the new unbiased std deviation
      { 
        stddev_heart_stat= myStats_heart.unbiased_stdev();
        stddev_gyro_stat=myStats_gyro.unbiased_stdev();


        Serial.print(stddev_heart_stat,8);
        Serial.print(" , ");
        Serial.println(stddev_gyro_stat,8);

        myStats_heart.clear();
        myStats_gyro.clear();

   if(stddev_gyro_stat<16.7 && stddev_heart_stat>5 && hour()>3 )
 //test   if(stddev_gyro_stat<18.7 && stddev_heart_stat>0 && hour()>0 )
        {
          uint8_t n = 0;
          sfx.playTrack(n);
          delay(3000);
            Serial.print(i);                
            Serial.print(" , ");
            Serial.print(0);                
            Serial.print(" , ");
            Serial.print(0);                
            Serial.print(" , ");
            Serial.print(0); 
            Serial.print(" , ");
            Serial.print('0');
            Serial.print(" , ");
            Serial.print('0');
            Serial.print(" , ");
            Serial.print(0);
            Serial.print(" , ");
            Serial.println(0);
          digitalWrite(7, HIGH);
        }
      }
      else
       {
           myStats_gyro.add(gyro1);
           myStats_heart.add(BPM);
           Serial.print(stddev_heart_stat,8);
           Serial.print(" , ");
           Serial.println(stddev_gyro_stat,8);
       } 

  heart_read1=BPM;
  heart_read2=BPM;
  delay(100); 
  i+=1; 
}