Arduino和Pyserial的问题
题
我有问题。我最近买了 Arduino Uno 木板。我试图使某些有趣的东西,例如控制计算机的输入。我用python和 妹妹 该程序如下:
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将值发送给我的董事会。船上加载的程序是:
const int ledPin = 11;
byte brightness;
void setup(){
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop(){
while(Serial.available()){
brightness = Serial.read();
Serial.print(brightness);
analogWrite(ledPin, brightness); //LED doesn't refresh the brightness
delay(10);
}
}
我的LED正常工作。我尝试了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))
谢谢大家! :)
解决方案
- 首先,确保您的LED已正确连接。阳极(更长的销钉)到PWM 11端口和阴极(较短的销钉)到地面,您可能需要根据LED在阴极和接地之间添加电阻。
- 确保您从Python到正确的端口(FTDI电缆与OS中的FTDI电缆相关联)。
- 如果您不使用USB连接器使用FTDI电缆,请确保所有引脚都连接到正确的输入。
- 什么价值是
value
在你的榜样?尝试arduino.write(chr(0xFF))
, ,LED保持点燃吗?
其他提示
我怀疑 arduino.readline()
等待newline,并且您的Arduino代码永远不会发送新线。因此,在发送第一个值后无限期地阻止Python代码。
我在您的评论中看到LED与第一个字符一起使用,但是您看不到不同字符的更改。绝对确保您发送的ASCII字符与以前的字符有很大不同,例如发送ASCII 0,然后是ASCII 255。
编辑:既然您说了淡淡的示例工作,那么您可以举一个示例并在其中添加串行端口功能吗?例如,只有在接收串行字符后才淡出。至少这将使您相信串行端口和LED可以在您编写的代码中共存。另外,我认为您正在使用淡淡的示例 这里. 。如果是这样,请确保已设置正确的引脚号,因为参考代码使用引脚9,但是您的示例代码使用引脚11。
另一个编辑:您说您从Arduino正确地收到了角色,但是您正在使用pyserial ReadLine
函数,该功能应该阻止直到看到一个新线,而我在Arduino代码中看不到任何内容,该代码会生成一个新线,该新线未首先发送到它。为了消除问题中的变量数量,请尝试使用高端或类似的COM端口程序将字节发送到Arduino,而不是您的Python程序。例如,您可以发送空格字符(ASCII 32)和“}”字符(ASCII 125),它们应该足够不同,可以在LED中创建可见差异。
我将首先确定串行端口的哪一侧还有问题。
首先,您可以使用Arduino上的硬编码环驾驶LED吗? LED会像预期的那样改变其亮度吗?
一旦解决问题,您可以在从终端应用程序手动发送内容时使Arduino做一些明显正确的事情(例如,内置在Arduino IDE中)。这可能需要更改Arduino代码。
一旦有效,我将专注于Python代码,确保您正在与正确的COM端口交谈。
“写值应通过USB将值发送给我的董事会”
如果这不是错别字,那么您将无法使用催眠端来访问USB端口。相反,有pyusb,可能是其他人。