我试图通过带有python的USB电缆向arduino发送消息。
#!python3
import serial
import time
import api
import sys
api = api.API()
arduino = serial.Serial('COM3', 115200, timeout=.1)
time.sleep(2)
while api['IsOnTrack'] == True:
if api['Gear'] == 3:
arduino.write('pinout 13')
print "Sending pinon 13"
msg = arduino.read(arduino.inWaiting())
print ("Message from arduino: ")
print (msg)
time.sleep(2)
Arduino:
// Serial test script
int setPoint = 55;
String command;
void setup()
{
Serial.begin(115200); // initialize serial communications at 9600 bps
pinMode(13,OUTPUT);
}
void loop()
{
while(!Serial.available()) {
}
// serial read section
while (Serial.available())
{
if (Serial.available() >0)
{
char c = Serial.read(); //gets one byte from serial buffer
if(c == '\n')
{
parseCommand(command);
command = "";
}
else
{
command += c; //makes the string command
}
}
}
if (command.length() >0)
{
Serial.print("Arduino received: ");
Serial.println(command); //see what was received
}
}
void parseCommand(String com)
{
String part1;
String part2;
part1 = com.substring(0, com.indexOf(" "));
part2 = com.substring(com.indexOf(" ") +1);
if(part1.equalsIgnoreCase("pinon"))
{
int pin = part2.toInt();
digitalWrite(pin, HIGH);
}
else if(part1.equalsIgnoreCase("pinoff"))
{
int pin = part2.toInt();
digitalWrite(pin, LOW);
}
else
{
Serial.println("Wrong Command");
}
}
Python shell如下所示: http://i.imgur.com/IhtuKod.jpg
例如,我可以让arduino读取消息一次并清除序列吗? 或者你能否发现我犯的一个明显错误?
仅使用Arduino IDE串行监视器。当我写" pinon 13"时,led指示灯亮起,这在使用python时不起作用。或者当我发送"引脚13"来自串口监视器的消息,它会告诉我它是一个"错误的命令",这在使用python时也不会发生。
你们有什么想法我应该让python只发送一次而不是连续发送消息吗?
答案 0 :(得分:0)
在您的Python代码中,您必须在Arduino识别命令之后编写/发送\n
。
serial.write('pinon 13\n');
应该有效;但请注意,\n
可能会在不同的系统上产生不同的结果(例如,Windows与Linux),因此您可能希望在Arduino和PC上明确使用相同的ASCII代码。
在Python中,这应该是chr(10)
,如果你愿意,你可以在Arduino上使用if(c == 10)
。