2010-11-30 102 views
1

我遇到了问题。我最近买了一块Arduino Uno板。我试图做一些有趣的事情,比如控制我的电脑输入。我曾经用Python pySerial和程序如下:Arduino和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)) 

谢谢大家! :)

+0

你能详细说明它在做什么吗? led保持点亮?它保持关闭吗?你从python发送什么值?你可以在python中添加一个读取以确保这个值被回显给你吗? – superfro 2010-11-30 22:07:53

+0

你也可以发布更多的python代码,你可能没有com端口正确 – superfro 2010-11-30 22:16:14

+0

我试图设置一个led的值... - LED保持点亮?那么当我发送第一个数据的led是,并保持相同的价值,即使我改变它.. - 我是从蟒蛇发送Int -print arduino.readline()这很有趣..它的返回我发送了相同的值...但它没有正确设置“analogWriter(pin,value)”中的值 – fran 2010-11-30 22:17:05

回答

2
  1. 首先,确保LED正确连接。阳极(较长的引脚)到PWM 11端口和阴极(较短的引脚)接地,也可能需要在阴极和地之间增加一个电阻,具体取决于LED。
  2. 确保您正在从python写入正确的端口(该FTDI电缆与您的操作系统相关联)。
  3. 如果您不使用带有USB连接器的FTDI电缆,请确保所有引脚连接到正确的输入。
  4. 您示例中的value的值是多少?尝试arduino.write(chr(0xFF)),LED保持点亮?
-1

“写值应通过USB值发送到我的船上”如果这不是一个错字,那么你就不能使用PySerial访问USB端口。有pyUSB,而不是其他人。

0

我会开始建立串口的哪一侧存在问题。

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

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

一旦这工作,我会再专注于Python代码,并确保你说话的权利COM端口等

1

我在您的意见看到,LED的工作原理与第一个字符,但你没有看到不同角色的变化。绝对要确保你发送的ASCII字符与以前的字符有很大不同,例如发送一个ASCII 0,然后是一个ASCII 255.

编辑: 既然你说FadeLED示例的工作原理,你可以采取这个例子,并添加串口功能吗?例如,只有在接收到串行字符后才会淡入。这至少会让你确信串口和LED可以共存于你编写的代码中。另外,我假设您使用的是来自here的FadeLED示例。如果是这样,请确保您已设置正确的引脚编号,因为参考代码使用引脚9,但示例代码使用引脚11。

另一个编辑: 你说你从Arduino的接收字符回到正常,但您使用的pySerial ReadLine功能,这应该阻止,直到它看到一个换行,我没有看到任何在Arduino的代码那会生成一个没有发送给它的换行符。要消除问题中的变量数量,请尝试使用HyperTerminal或类似的COM端口程序将字节发送到Arduino,而不是Python程序。例如,您可以发送空格字符(ASCII 32)和'}'字符(ASCII 125),这些字符应该足够不同,以便在LED中创建可见差异。

1

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