Soy nuevo en Arduino (y en la programación de computadoras en general), así que me disculpo si esta pregunta parece tonta.
Una vez que configuré una conexión básica de arduino-LED, tengo problemas para enviar INTEGERS a arduino a través del puerto serie. Puedo enviar fácilmente caracteres como 'm', 'o', etc. Sin embargo, si envío un número, parece que simplemente no lo obtiene.
Aquí está el código Arduino, idealmente debería obtener un valor del puerto usb a través de python o el monitor en serie y luego ajustar el brillo del LED de acuerdo con el valor. (el valor debe estar en el rango [0,255]).
NOTA: Estoy usando ARDUINO UNO y 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);
}
Sin embargo, cuando ingreso un valor en el puerto serie o a través de Python, por ejemplo 0, me da 48 como respuesta (¡lo que es interesante es el código ASCII para 0!) E ilumina el LED, que no es lo que debería suceder desde entonces. ¡a 0 el LED debería estar apagado! Me falta algo pero no puedo encontrar qué ... ¿Podrías decirme qué está mal?
Aquí está el código que uso en 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()
¿Qué estoy haciendo mal o malentendido? Gracias.
arduino.write(chr(valueToWrite))