Я новачок у Arduino (і комп'ютерному програмуванні взагалі), тому прошу вибачення, якщо це питання виглядає нерозумно.
Після встановлення базового ардуїно-світлодіодного з'єднання у мене виникли проблеми з надсиланням INTEGERS до arduino через послідовний порт. Я легко можу надсилати символи, такі як 'm', 'o' і т. Д. Однак, якщо я надішлю номер, він виглядає так, що його просто не отримують.
Ось код Arduino, в ідеалі він повинен отримати значення з порту usb через python або послідовний монітор, а потім відрегулювати яскравість світлодіода відповідно до значення. (значення повинно бути в діапазоні [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!) І загоряється світлодіод, який не має відбуватися з того часу при 0 світлодіод повинен вимкнутись !! Я щось пропускаю, але не можу знайти що ... Скажіть, будь ласка, що не так?
Ось код, який я використовую в 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))