Arduino和pySeri的问题

2024-10-01 13:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个问题。我最近买了一块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))

谢谢大家!!:)


Tags: posself程序looptimeoutserialarduinowrite
3条回答

我怀疑arduino.readline()等待新行,而您的Arduino代码从未发送新行。因此,Python代码在发送第一个值之后将无限期地阻塞。在

  1. 首先,确保你的LED连接正确。阳极(长引脚)到PWM 11端口,阴极(较短引脚)接地,也可能需要在阴极和接地之间添加一个电阻,具体取决于LED。在
  2. 确保从python写入的是正确的端口(FTDI电缆与操作系统中的关联)。在
  3. 如果不使用带USB接口的FTDI电缆,请确保所有针脚都连接到正确的输入端。在
  4. 在您的示例中,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中产生可见的差异。在

相关问题 更多 >