指挥arduino over serial只能在拖尾时使用

时间:2018-01-28 17:48:27

标签: python arduino serial-port pyserial

我有以下arduino代码:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

char rfSetting[6]  = "01111";

String command;
void setup() {
  Serial.begin(9600);
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(10);
}

void loop() {
  if (Serial.available() > 0) {
    // get incoming byte:
    command = Serial.readString();
    command.trim();
    if( command.length() == 2 && 
        command[0] > 64 && command[0] < 69 &&
       (command[1] == '0' | command[1] == '1')){
          char rfCommand[6] = "00000";
          rfCommand[command[0]-65] = '1';
          Serial.println(rfCommand);
          if(command[1] == '0') {
            mySwitch.switchOff(rfSetting, rfCommand);
          } else {
            mySwitch.switchOn(rfSetting, rfCommand);
          }
          delay(1000);
    } else {
      Serial.println("Invalid Input");
    }
  }
}

要命令arduino,我使用以下python脚本:

import serial
import sys
import time

ser = serial.Serial("/dev/ttyACM0",9600)
time.sleep(2)
ser.write(sys.argv[1])
ser.close()

现在我用:

执行python脚本
python test.py A0
没有任何反应。如果我运行这个

tail -f /dev/ttyACM0

并行,它有效。

我试图在不拖尾的情况下向arduino发送命令。 我做错了什么?

主机操作系统:Raspian

PS:我已经尝试用这个来解决它了:

stty -F /dev/ttyACM0 9600 cs8 cread clocal

但这没有帮助。

1 个答案:

答案 0 :(得分:0)

使用

import serial
import sys
import time

ser = serial.Serial("/dev/ttyACM0",9600)
time.sleep(2)
ser.write(sys.argv[1]) 
ser.flush()   # THIS here should put the data through, 
              # might block until your os decides to put the data through 
ser.close() 

您也可以将此答案https://stackoverflow.com/a/40438103/7505395提示纳入考虑范围