ฉันยังใหม่กับ Arduino (และการเขียนโปรแกรมคอมพิวเตอร์ทั่วไป) ดังนั้นฉันต้องขออภัยถ้าคำถามนี้ดูโง่
เมื่อฉันตั้งค่าการเชื่อมต่อ arduino-LED พื้นฐานฉันมีปัญหาในการส่ง INTEGERS ไปยัง arduino ผ่านพอร์ตอนุกรม ฉันสามารถส่งตัวอักษรเช่น 'm', 'o' และอื่น ๆ ได้อย่างง่ายดาย .. อย่างไรก็ตามถ้าฉันส่งหมายเลขดูเหมือนว่ามันจะไม่ได้รับ
นี่คือรหัส Arduino ที่ควรจะได้รับค่าจากพอร์ต usb ผ่าน python หรือจอภาพอนุกรมแล้วปรับความสว่างของ 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 (ซึ่งน่าสนใจคือรหัส ASCII สำหรับ 0!) และสว่างขึ้น 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()
ฉันทำอะไรผิดหรือเข้าใจผิด ขอบคุณ.
arduino.write(chr(valueToWrite))