2016-06-14 58 views
0

我从Arduino的发送整数值,使用pyserial Arduino的代码,阅读它Python是:阅读来自Arduino的整数使用pyserial

Serial.write(integer) 

而且pyserial是:

ser=serial.Serial ('com3',9600,timeout =1) 
X=ser.read(1) 
print(X) 

但不打印除空格外的任何东西 有谁知道如何读取从Python中的arduino传入的整数?

+0

'integer'需要什么值?它的类型究竟是什么?难道是你传递的这些字节可能被解释为不可打印的ASCII或空格? –

回答

0

您可能需要使用一个开始位。

问题可能是由于pyserial运行时arduino已经写入整数了吗?

所以从pyserial字符写入Arduino的信号开始喜欢

ser=serial.Serial ('com3',9600,timeout =1) 
    ser.write(b'S') 
    X=ser.read(1) 
    print(X) 

一旦你得到这个起始位来自Arduino的写整数。

0

这是不正确的方式从Arduino读取IntegerInteger是一个32位的类型,而串行端口将被设置为EIGHTBITS(无论是在pyserial和Arduino的。纠正我,如果我错了)的字节大小,因此,你必须写Character版本Integer的从Arduino通过串口传输时,因为Character只需要EIGHTBITS,这也是非常容易完成所需工作的便捷方式。

长话短说,在传输之前将您的Integer转换为StringCharacter阵列。 (机会有可用于转换的内置功能)。

在一个侧面说明这里是你宁愿正确的Python代码使用方法:

ser = serial.Serial(
     port='COM3', 
     baudrate=9600, 
     parity=serial.PARITY_NONE, 
     stopbits=serial.STOPBITS_ONE, 
     bytesize=serial.EIGHTBITS 
    ) 
    #RxTx 
    ser.isOpen() 
while 1: 
    out = '' 
    while ser.inWaiting() > 0: 
     out += ser.read(1) 
    if out != '': 
     print ">>Received String: %s" % out 
+0

甚至不需要检查设置btw,'HardwareSerial :: write()'的所有其他整数重载只需执行C风格转换为'uint8_t'。 –

+0

@IljaEverilä我不知道arduino部分,因为我在AT Mega AVR中完成了它,我不知道你刚刚说了什么。 –

+1

@SiHa编辑,我试图手动编写的代码,应该刚刚复制:) –

0

我测试了一个简单的程序:

的Arduino:

void setup() { 
    // initialize serial communication at 9600 bits per second: 
    Serial.begin(9600); 
} 

void loop() { 
    int f1=123; 
    // print out the value you read: 
    Serial.println(f1); 
    delay(1000);  
} 

Python:

import serial 
ser = serial.Serial() 
ser.baudrate = 9600 
ser.port = 'COM5' 

ser.open() 
while True: 
    h1=ser.readline() 
    if h1: 
    g3=int(h1); #if you want to convert to float you can use "float" instead of "int" 
    g3=g3+5; 
    print(g3)