Stap 1: Voorbeeld: rijden een grote 7-segment display
Normale grootte 7-segment displays bestaan uit 7 rechthoekige leds gerangschikt zodat ze de cijfers 0-9 kunnen weergeven. Verlichting van één segment van een normale 7-segment display is gelijk aan de verlichting van een LED, vereist het over 3V en 20mA; Dit is eenvoudig te realiseren door de Arduino alleen. Deze giant seven segment is een beetje anders, omdat elk van de segmenten uit 4 parallelle sets van 15 rode draden van de LED's in serie (fig 2 bestaat). Om te schakelen de LEDs, moet de spanning over het segment 15 * (naar voren van de spanning van elke LED) en de stroom door elk segment is 4 * (normaal werkende stroom van elke LED). Dit komt uit op over 31.5V(15*2.1V) en 80mA(4*20mA) per segment, duidelijk de Arduino niet zal kunnen om dit te gaan op zijn eigen.
Om deze weergave te besturen ik vastgehaakt aan de gemeenschappelijke anode naar 36V en selectief sloeg vervolgens de segmenten van het display dat ik wilde oplichten.
De tellingen van de onderstaande code door de cijfers 0-9 op het 7-segment display, tikt uit één nummer naar de volgende keer een seconde. Het maakt gebruik van een for-lus te verhogen de variabele "i" uit 0-9 en de verklaringen van de switch/case van het gebruik de passende segmenten inschakelen (door te stellen hun corresponderende Arduino pin hoog.
/*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 } }