如何比较python中ser.readline()的输出?

时间:2019-02-10 04:24:08

标签: python python-2.7

我正在编写在Raspberry Pi 2 Model b和Arduino Uno之间连接的代码,并且无法通过将ser.readline()的输出与变量进行比较来获得肯定的响应。下面是我的Raspberry pi代码的代码片段,其中“ u”只是我发送给arduino以便其解释的命令,我已经确认它可以成功解释它。

let options = [
    {label: 'foo1', selected: false},
    {label: 'foo2', selected: true},
    {label: 'foo2', selected: false},
    {label: 'foo2', selected: false},
    {label: 'foo2', selected: false},
    {label: 'foo2', selected: true},
    {label: 'foo2', selected: 1}
];

const obj = options.reduce((acc, currentValue, index) => {
    // checking only for boolean true not for truthy values
    return acc = currentValue["selected"] === true ? [...acc, index] : acc;
}, []); 
console.log(obj); 

在arduino上,作为对ser.write(command)的响应,我发送的全部是

while 1:
   time.sleep(1)
   ser.write(u.encode('utf-8'))
   print('ACK sent')
   res = ser.readline()
   if res = 'ON':
      print('Pass')
   else:
      print('Try again')

无论我用什么来比较两个值,Pi始终会打印“重试”,即使我打印res值时,它也会清晰地打印“ ON”。

我在这里想念什么?

2 个答案:

答案 0 :(得分:0)

readline方法返回一个以换行符结尾的字符串,因此您应该将其与一个以换行符结尾的值进行比较,或者在进行比较之前从字符串中去除换行符:

if res == 'ON\n':

或:

res = ser.readline().rstrip()

答案 1 :(得分:0)

通过检查答案是否在读取值的子字符串中,我能够使其正常工作:

while 1:
time.sleep(1)
ser.write(u.encode('utf-8'))
print('ACK sent')
res = ser.readline()
result = res.find('ON')
if result > -1:
    print('Pass')
else:
    print('Try again')enter code here