Python 2.7 python file.write()输出格式不一致
我一直在使用arduino(NANO ATmega328)进行一个项目,它可以读取心率和其他传感器的值,并使用串行通信发送数据包。然后,我从一个基本python脚本中读取序列号,将数据写入一个文件,以便以后打印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(
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;
}