Efectivamente lo que dices es correcto , supongo que como probe solo con el monitor serie algo haria mal, ya lo corregi.
Aunque correcto seria irelevante si no quisiera acotar entre 1 y 9 ya que seguiria siendo par o impar y se cumpliria perfectamente la comprobacion de la paridad.
No le funciona porque "Serial.read ()" no lee el bufer completo y ejecuta el "if (Serial.available()" dos veces , prevaleciendo la seguda lectura , (algún caracter de control), que siempre es el mismo de ahi que:
Deberia usar la función " Serial.readString() " que si lee el buffer completo eliminando ese caracter de control. El código podria quedar algo simimilar a esto:
const int SalidaLedVerde = 2;
const int SalidaLedAmarillo = 4;
int numero;
void setup() {
Serial.begin(9600);
pinMode(SalidaLedVerde, OUTPUT);
pinMode(SalidaLedAmarillo, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
numero = (Serial.readString()).toInt();//atol(palabra);
if (numero > 0 && numero < 10) {// Acotamos entre el 1 y el 9
//Comprobacion paridad
// Comprobamos, (en binario), el ultimo bit de "numero",se cumple el if cuando es inpar.
// El ultimo bit de un numero impar siempre es un 1 el de un par siempre 0
digitalWrite(SalidaLedVerde, ! bitRead(numero, 0));
digitalWrite(SalidaLedAmarillo, bitRead(numero, 0));
}
}
}
Obiamente para la comprobacion de la paridad puede usar la que mas le guste de las expuestas anteriormente.
Saludos.