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

谢谢大家! :)

有帮助吗?

解决方案

  1. 首先,确保您的LED已正确连接。阳极(更长的销钉)到PWM 11端口和阴极(较短的销钉)到地面,您可能需要根据LED在阴极和接地之间添加电阻。
  2. 确保您从Python到正确的端口(FTDI电缆与OS中的FTDI电缆相关联)。
  3. 如果您不使用USB连接器使用FTDI电缆,请确保所有引脚都连接到正确的输入。
  4. 什么价值是 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,可能是其他人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top