Esta practica me la solicitaron hace poco y consiste en recibir un numero decimal desde la consola serial , este número deberá estar comprendido en el rango de 0 a 255 y posteriormente decodificar el numero correspondiente a su equivalente en binario, activando una secuencia de leds para representar cada bit:
A continuacion pongo una version comentada del programa despues de hacer una revision el código quedo mucho más simplificado, cada parte esta explicada asi que no hay mas que agregar.
void setup(){
// primero configuramos los pines del 2 al 9 como salidas
// para conectar los leds correpondientes a cada bit
// como estaremos usando comunicacion serial no podemos usar
// los bits 0 y 1
for(int b=0; b<=7; b++) {
pinMode(b+2, OUTPUT); // Usamos a partir del pin 2
}
// abrimos el canal de comunicacion serial con una velocidad de 9600
Serial.begin(9600);
}
char ch;
String strNumero;
int numero;
void loop(){
// ahora quedamos en espera de los digitos desde el puerto serial
while(Serial.available() != 0) {
ch = Serial.read();
strNumero = strNumero + ch;
}
// Si recibimos un string
if(strNumero != "") {
// Convertir el string a entero
numero = strNumero.toInt();
// Verificamos que el numero este en el rango válido
if(numero > 0 && numero <= 255) {
// Hacemos un bucle activando cada led de acuerdo al bit correspondiente
for (int m=0; m<=7; m++) {
// Verificaremos cada led empezando en el menos significativo
// para esto usamos la funcion bitRead
// Si el bit esta ON, la salida sera HIGH, en caso contrario sera LOW
digitalWrite(2+m, bitRead(numero, m));
}
}
}
}