Hola a todos.
Tengo que representar con 8 leds un numero binario,es decir si el numero tiene un 1 el leds se enciende,si el numero es 0 el leds se apaga.
El problema que tengo es que no se dar la condición.
Otra cosa que tengo que hacer es el cambio posiciones del numero binario,la posicion 0 con la 1, la 2 con la 3,4 con 5 y6 con 7,y volver a representarlo con los leds.No se realizar el intercambio de posiciones.
si alguien me puede ayudar se lo agradeceria.
un saludo
Para saber si un bit cualquiera es 1 o 0, podés usar algo así:
Valor & B00000001
Valor & B00000010
Valor & B00000100
Etc. para los demás bits
Una manera elegante de hacerlo sería algo así:
for (int BitNro = 0; BitNro < 8; BitNro++)
if (Valor & (1 << BitNro))
// prendo el led #BitNro
else
//apago
1 << BitNro lo que se hace es tomar el valor 1 y desplazarlo hacia la izquierda una X cantidad de bits, en este caso BitNro.
Valor y un & ("and" a nivel de bits, en oposición a &&), en definitiva devuelve true/false si Valor y el 1 desplazado tienen un 1 en el mismo bit.
El for al correr haría algo así:
Digamos que Valor es 5 (binario 00000101).
BitNro = 0:
00000001 << 0 = 00000001
Valor & 00000001 =
00000101
& 00000001
--------
00000001 => true
BitNro = 1:
00000001 << 1 = 00000010
Valor & 00000010 =
00000101
& 00000010
--------
00000000 => false
BitNro = 2:
00000001 << 2 = 00000100
Valor & 00000100 =
00000101
& 00000100
--------
00000100 => true
Etcétera.
esto es lo que puse,algo estare haciendo mal porque se enciende leds sin sentido.
void setup() {
for ( int i = 2 ; i < 10 ; i++)////pin donde estan los leds
pinMode( i , OUTPUT) ;
}
void loop() {
int BitNro;
int num=5;
Serial.println(num,BIN);
for ( BitNro = 0; BitNro < 8; BitNro++)
if(num & (1 << BitNro)){
digitalWrite( BitNro , HIGH);
}else{
digitalWrite( BitNro , LOW);
}
}
Los leds están conectados a los pines 2-9, pero en el digitalWrite estás usando BitNro, que va de 0 a 8.