我是Arduino新手(通常是计算机编程人员),因此,如果这个问题看起来很傻,我深表歉意。
设置基本的arduino-LED连接后,我将无法通过串行端口将INTEGERS发送到arduino。我可以轻松地发送诸如“ m”,“ o”等字符。.但是,如果我发送一个数字,看起来它根本无法接收。
这是Arduino代码,理想情况下,它应该通过python或串行监视器从usb端口获取一个值,然后根据该值调整LED的亮度。(值必须在[0,255]范围内)。
注意:我使用的是ARDUINO UNO和PYTHON 3
// --------------------------
int LED = 10;
int number;
void setup(){
pinMode(LED,OUTPUT);
Serial.begin(9600);
}
void loop(){
number = Serial.read();
Serial.print(number);
Serial.print('\n');
if(number == -1){
number = 0;
}
else if(number > 255){
number = 255;
}
else if(number < 0){
number = 0;
}
analogWrite(LED,number);
delay(1000);
}
但是,当我向串行端口或通过Python输入一个值时,例如0,它给了我48个答案(有趣的是,它是0的ASCII码!)并点亮了LED,这是不应该的,因为在0,LED应该熄灭!!我错过了一些东西,但我找不到什么。
这是我在Python中使用的代码:
import serial
import time
try:
arduino = serial.Serial(port,speed)
time.sleep(2)
print("Connection to " + port + " established succesfully!\n")
except Exception as e:
print(e)
#Note: for characters such as 'a' I set data = b'a' to convert the data in bytes
#However the same thing does not work with numbers...
data = 0
data = arduino.write(valueToWrite)
time.sleep(2)
arduino.close()
我在做什么错或误解?谢谢。
此解决方案甚至对于字符也不起作用。此外,就字符而言,仅将它们作为字节发送,例如b'm',效果很好。无论如何,谢谢您的回答。
—
mickkk 2014年
arduino.write(chr(valueToWrite))