Arduino序列号

时间:2014-10-23 10:02:07

标签: python serial-port arduino

我试图通过带有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只发送一次而不是连续发送消息吗?

1 个答案:

答案 0 :(得分:0)

在您的Python代码中,您必须在Arduino识别命令之后编写/发送\n

serial.write('pinon 13\n');应该有效;但请注意,\n可能会在不同的系统上产生不同的结果(例如,Windows与Linux),因此您可能希望在Arduino和PC上明确使用相同的ASCII代码。

在Python中,这应该是chr(10),如果你愿意,你可以在Arduino上使用if(c == 10)