jueves, 14 de marzo de 2013

Decodificar numeros ascii en binario con arduino

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));
      }
    }
  }
}