我有个问题。我最近买了一块Arduino Uno板。我试着做一些有趣的事情,比如控制电脑的输入。我将Python与pySerial一起使用,程序如下:
arduino = serial.Serial(portaCOM, 9600, timeout = 1)
... in loop ->
arduino.write(value)
def sliderUpdate(self, event):
pos = self.slider.GetValue()
arduino.write(pos)
time.sleep(.1)
print arduino.readline()
try:
arduino = serial.Serial(portaCOM, 9600, timeout = 1)
except:
print "Errore di connessione alla porta seriale"
虽然我的值应该写入我的USB值。 机上加载的程序是:
^{pr2}$我的发光二极管工作正常。我用Arduino提供的渐变示例进行了尝试,效果良好。。在
我检查了程序是否正确地发送了数据。是的,是的。它返回和我之前发送的一样的东西。在
它应该检索发送的值并设置analaogWriter(pin, VALUE)
,但有问题或不起作用。在
我怎样才能解决这个问题?在
解决方案
Arduino密码
const int ledPin = 11;
byte valoreLed;
void setup(){
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop(){
while(Serial.available()){
valoreLed = Serial.read();
analogWrite(ledPin, valoreLed);
delay(20);
}
}
Python脚本代码:
pos = self.slider.GetValue()
arduino.write(chr(pos))
谢谢大家!!:)
我怀疑
arduino.readline()
等待新行,而您的Arduino代码从未发送新行。因此,Python代码在发送第一个值之后将无限期地阻塞。在value
的值是多少?尝试arduino.write(chr(0xFF))
,LED是否保持点亮?在我在你的评论中看到,LED与第一个字符一起工作,但你看不到不同字符的变化。一定要确保发送的ASCII字符与之前的字符有很大的不同,例如,发送一个ASCII 0,后跟一个ASCII 255。在
编辑: 既然你说FadeLED的例子很管用,你能不能就拿这个例子,给它加上串口功能?例如,只有在接收到串行字符后才会淡出。这至少会让你确信串行端口和LED可以在你编写的代码中共存。另外,我假设您使用的是来自here的FadeLED示例。如果是这样,请确保设置了正确的管脚编号,因为参考代码使用针脚9,但示例代码使用针脚11。在
另一个编辑: 你说你从Arduino正确地接收到了字符,但是你使用的是pySerial
ReadLine
函数,在它看到一个新行之前,它应该会被阻塞,而我在Arduino代码中没有看到任何东西会生成一个没有首先发送给它的新行。要消除问题中的变量数量,请尝试使用HyperTerminal或类似的COM端口程序将字节发送到Arduino,而不是Python程序。例如,您可以发送空格字符(ascii32)和'}'字符(ascii125),这两个字符的差别应该足以在LED中产生可见的差异。在相关问题 更多 >
编程相关推荐