Paso 1: Ejemplo: conducir una gran pantalla de 7 segmentos
Displays de 7 segmentos de tamaño normales constan de 7 leds rectangulares dispuestos de modo que pueden mostrar los números 0-9. Iluminar un segmento de un display de 7 segmentos normal es equivalente a iluminar un LED, requiere aproximadamente 3V y 20mA; Esto se logra fácilmente por el Arduino solo. Este segmento siete gigantes es un poco diferente porque cada uno de los segmentos consiste de 4 series paralelas de 15 cables de LEDs rojos en serie (Fig. 2). Para encender el LED, el voltaje a través del segmento debe ser 15 * (voltaje de cada LED delantero) y la corriente a través de cada segmento es 4 * (corriente de cada LED de trabajo típica). Esto sale 31.5V(15*2.1V) y 80mA(4*20mA) por el segmento, claramente el Arduino no será capaz de manejar esto por su cuenta.
Para controlar esta presentación he conectado el ánodo común a 36V y selectivamente a tierra los segmentos de la pantalla que yo quería para iluminar.
El código siguiente se cuenta a través de los números 0-9 en el display de 7 segmentos, marcando un número a la siguiente una vez por segundo. Utiliza un bucle incrementar la variable "i" de 0-9 y luego utiliza switch/case declaraciones para activar los segmentos adecuados (estableciendo su correspondiente pin del Arduino alta.
/*7 seg display with ULN2803 by RU4Realz July 2012 arduino pin connections (via ULN2803): arduino (digital) pin 0 7 seg pin f 1 g 2 a 3 b 4 c 5 d 6 e */ void setup() { for (byte a=0;a<8;a++){ pinMode(a,OUTPUT);//set digital pins 0 - 6 as outputs } } void loop() { for (byte i = 0; i < 10; i++){//for 0 -9 switch(i){ case 0://if i == 0, turn on appropriate leds PORTD&=128;//turn digital 0-6 off digitalWrite(0,HIGH); digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); break; case 1://if i == 1 PORTD&=128;//turn digital 0-6 off digitalWrite(3,HIGH); digitalWrite(4,HIGH); break; case 2://if i == 2 PORTD&=128;//turn digital 0-6 off digitalWrite(1,HIGH); digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); break; case 3: PORTD&=128; digitalWrite(1,HIGH); digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); break; case 4: PORTD&=128;//turn digital 0-7 off digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); break; case 5: PORTD&=128;//turn digital 0-7 off digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); break; case 6: PORTD&=128;//turn digital 0-7 off digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); break; case 7: PORTD&=128;//turn digital 0-7 off digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); break; case 8: PORTD&=128;//turn digital 0-7 off digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); break; case 9: PORTD&=128;//turn digital 0-7 off digitalWrite(0,HIGH); digitalWrite(1,HIGH); digitalWrite(2,HIGH); digitalWrite(3,HIGH); digitalWrite(4,HIGH); break; } delay (1000);//wait 1 sec } }