1

我有问题。我最近买了一块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 将值发送到我的板。船上加载的程序是:

 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 提供的 Fade 示例,它正在工作..

我检查了程序是否正确发送数据。是的。它返回我之前发送的相同内容。

它应该检索已发送和设置的值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))

谢谢大家!!:)

4

5 回答 5

2
  1. 首先,确保您的 LED 连接正确。阳极(较长的引脚)连接到 PWM 11 端口,阴极(较短的引脚)连接到地,您可能还需要在阴极和地之间添加一个电阻器,具体取决于 LED。
  2. 确保您正在从 python 写入正确的端口(该 FTDI 电缆与您的操作系统相关联)。
  3. 如果您不使用带有 USB 连接器的 FTDI 电缆,请确保所有引脚都连接到正确的输入。
  4. value你的例子中的价值是什么?试试看arduino.write(chr(0xFF)),LED 是否一直亮着?
于 2010-11-30T22:27:04.603 回答
1

我在您的评论中看到 LED 适用于第一个字符,但您看不到不同字符的变化。一定要确保您发送的 ASCII 字符与之前的字符有很大不同,例如发送一个 ASCII 0 后跟一个 ASCII 255。

编辑:既然您说 FadeLED 示例有效,您可以举个例子并为其添加串行端口功能吗?例如,仅在接收到串行字符后才淡出。这至少会让您确信串行端口和 LED 可以在您编写的代码中共存。另外,我假设您使用的是此处的 FadeLED 示例。如果是这样,请确保您设置了正确的引脚编号,因为参考代码使用引脚 9,但您的示例代码使用引脚 11。

另一个编辑:您说您从 Arduino 正确接收到字符,但是您使用的是 pySerialReadLine函数,该函数应该阻塞直到看到换行符,并且我在 Arduino 代码中看不到任何会生成换行符的内容没有先发给它。要消除问题中的变量数量,请尝试使用超级终端或类似的 COM 端口程序将字节发送到 Arduino,而不是您的 Python 程序。例如,您可以发送空格字符 (ASCII 32) 和“}”字符 (ASCII 125),它们的差异应该足以在 LED 中产生明显的差异。

于 2010-11-30T22:19:56.550 回答
1

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

于 2010-11-30T22:39:11.237 回答
0

我将首先确定串行端口的哪一侧存在问题。

首先,您可以使用 Arduino 上的硬编码环路来驱动 LED。LED 是否按预期改变其亮度?

一旦解决了问题,当从终端应用程序(例如,Arduino IDE 中内置的那个)手动发送内容时,您能否让 Arduino 做一些明显正确的事情。这可能需要更改 Arduino 代码。

一旦工作正常,我将专注于 Python 代码,确保您正在与正确的 COM 端口等通信。

于 2010-11-30T22:17:22.977 回答
-1

“写入值应通过 USB 将值发送到我的电路板”

如果这不是错字,那么您不能使用 PySerial 访问 USB 端口。有 pyUSB 代替,可能还有其他。

于 2010-11-30T22:07:04.427 回答