Los números binarios son fundamentales en el mundo de la electrónica y la programación. Utilizados en todo, desde los circuitos más básicos hasta los ordenadores más avanzadas, los números binarios forman la base de la computación digital. Si eres profesor y te gusta trabajar con microcontroladores como Arduino, que los alumnos comprendan los números binarios y cómo manipularlos es esencial. En esta entrada, exploraremos qué son los números binarios, cómo convertirlos a decimal y cómo programar una secuencia binaria en Arduino con el kit de Compluino Modular para contar del 0 al 15.
¿Qué son los números binarios?
Un número binario es una representación de un valor numérico usando sólo dos símbolos: el 0
y el 1.
Así pues, un número binario se representa mediante una sucesión de unos y ceros en las que
cada dígito tiene un valor o peso en función de su posición. De derecha a izquierda los pesos
de los números binarios son 20= 1, 21= 2, 22= 4, 23= 8 …. y así sucesivamente.
En general, puedes elegir una cantidad cualquiera de símbolos y aún podrías representar
cualquier número. A esa cantidad se le llama la base del sistema numérico. De esta manera
«en base diez » hace referencia al sistema numérico decimal y «en base dos» hace referencia
al sistema numérico binario.
Conversión de binario a decimal
Para convertir un número binario a decimal, se necesita entender el valor posicional de cada bit. Cada bit en un número binario tiene un valor que es una potencia de 2, empezando desde el bit menos significativo (el más a la derecha) hasta el bit más significativo (el más a la izquierda).
Por ejemplo, para convertir el número binario 1101 a decimal:
- El bit más a la derecha (1) representa 20 , que es 1. (LED_V en el programa)
- El siguiente bit (0) representa 21, que es 2. (LED_AMAR en el programa)
- El siguiente bit (1) representa 22, que es 4. (LED_VERDE en el programa)
- El bit más a la izquierda (1) representa 23, que es 8. (LED_ROJO en el programa)
Sumando estos valores, obtenemos: 8+4+0+1=13. Por lo tanto, el número binario 1101 es igual al número decimal 13.
Programar números binarios con LEDs en Arduino
Ahora que entendemos los conceptos básicos de los números binarios, vamos a ver cómo podemos implementar una secuencia binaria en Arduino para contar del 0 al 15. Para este ejemplo, usaremos LEDs para representar cada bit de un número binario. Necesitaremos cuatro LEDs, ya que el número binario más grande que podemos representar con cuatro bits es 1111 (15 en decimal).
El ejemplo lo vamos a realizar con la base de trabajo de Compluino modular, ya que simplifica las conexiones eléctricas y la disposición de los LEDs ayuda a ver claramente los números representados.
La tabla en la que aparecen los números decimales del 0 al 15 y su equivalencia en binario quedaría así:
DECIMAL | BINARIO |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
14 | 1110 |
15 | 1111 |
Y el programa en el que cada segundo se muestra un número distinto sería así:
// REPRESENTACIÓN DE NÚMEROS BINARIOS EN ARDUINO CON 4 LEDs
#define LED_V 5 //posición 0001
#define LED_AMAR 4 //posición 0010
#define LED_VERDE 3 //posición 0100
#define LED_ROJO 2 //posición 1000
void setup()
{
pinMode(LED_V, OUTPUT);
pinMode(LED_AMAR, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_ROJO, OUTPUT);
}
void loop()
{
//cero 0000
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, LOW);
delay(1000);
//uno 0001
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, LOW);
delay(1000);
//dos 0010
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, LOW);
delay(1000);
//tres 0011
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, LOW);
delay(1000);
//cuatro 0100
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, LOW);
delay(1000);
//cinco 0101
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, LOW);
delay(1000);
//seis 0110
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, LOW);
delay(1000);
// siete 0111
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
// ocho 1000
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
// nueve 1001
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
// diez 1010
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
// once 1011
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
// doce 1100
digitalWrite(LED_V, LOW);
digitalWrite(LED_AMAR, LOW);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
// trece 1101
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
// catorce 1110
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, LOW);
delay(1000);
// quince 1111
digitalWrite(LED_V, HIGH);
digitalWrite(LED_AMAR, HIGH);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, HIGH);
delay(1000);
}