Eu sou novo no Arduino (e na programação de computadores em geral), então peço desculpas se essa pergunta parecer boba.
Depois de configurar uma conexão arduino-LED básica, tenho problemas ao enviar INTEGERS para o arduino através da porta serial. Posso facilmente enviar caracteres como 'm', 'o' e assim por diante. No entanto, se eu enviar um número, parece que ele simplesmente não o entende.
Aqui está o código do Arduino, idealmente, ele deve obter um valor da porta usb através do python ou do monitor serial e, em seguida, ajustar o brilho do LED de acordo com o valor. (o valor deve estar no intervalo [0,255]).
NOTA: Estou usando ARDUINO UNO e 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);
}
No entanto, quando insiro um valor na porta serial ou através do Python, por exemplo 0, ele me fornece 48 como resposta (que, curiosamente, é o código ASCII para 0!) E acende o LED, que não é o que deveria acontecer desde a 0 o LED deve estar apagado !! Estou faltando alguma coisa, mas não consigo encontrar o que ... Você poderia me dizer o que está errado?
Aqui está o código que eu uso no 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()
o que estou fazendo de errado ou mal-entendido? Obrigado.
arduino.write(chr(valueToWrite))