最近,我正在尝试在Arduino上进行某种“灯光控制”。我使用 Raspberry Pi 通过串口(USB 电缆)发送控制消息。这是 Arduino 代码:
int redled = 12;
int whiteled = 48;
void setup()
{
Serial.begin(9600);
pinMode(redled,OUTPUT);
pinMode(whiteled,OUTPUT);
}
void loop()
{
if(Serial.available())
{
char cmd = Serial.read();
switch(cmd)
{
case'r':
digitalWrite(redled,HIGH);
delay(2000);
digitalWrite(redled,LOW);
break;
case'w':
digitalWrite(whiteled,HIGH);
delay(2000);
digitalWrite(whiteled,LOW);
break;
}
}
else
{
Serial.println("hello pi");
delay(1000);
}
}
之后,我使用Python解释器中的pySerial来控制引脚,一切正常。这是一段解释器输出:
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial('/dev/ttyACM0',9600)
>>> x = ser.read(10)
>>> print 'x = ',x
x = hellhello
>>> ser.write('w') #white led turn on and off
1
>>> ser.close()
>>>
一切工作正常,led 确实打开和关闭,所以我决定编写一个简单的 Python 脚本来执行相同的操作:
import serial
import time
ser = serial.Serial('/dev/ttyACM0',9600)
x = ser.read(10)
print 'x = ',x
time.sleep(2)
ser.write('w')
ser.close()
以下是执行命令和结果:
pi@raspberrypi ~ $ python serialtest.py
x = helello pi
只出现了 Arduino 的字符串,但根本没有 LED 亮起。
看起来一切都应该很好,所以我不知道问题出在哪里。我已经搜索了一些文章并在“ser.write()”之前添加了“time.sleep(2)”,但它仍然无法工作。我将不胜感激任何帮助,非常感谢!
更新 :
我让控制器向我发送它正在接收的数据,看起来当我运行脚本时它没有接收到任何内容,但当我从解释器发送数据时它接收到了所有内容。 arduino代码现在看起来像这样:
int redled = 12;
int whiteled = 48;
void setup()
{
Serial.begin(9600);
pinMode(redled,OUTPUT);
pinMode(whiteled,OUTPUT);
}
void loop()
{
if(Serial.available())
{
char cmd = Serial.read();
switch(cmd)
{
case'r':
digitalWrite(redled,HIGH);
delay(2000);
digitalWrite(redled,LOW);
Serial.println("Cmd received");
break;
case'w':
digitalWrite(whiteled,HIGH);
delay(2000);
digitalWrite(whiteled,LOW);
Serial.println("Cmd received");
break;
}
}
}