Étape 1: Exemple : conduite d’un grand afficheur à 7 segments
Normal taille affichage à 7 segments se composent de 7 leds rectangulaires disposés de sorte qu’ils peuvent afficher des chiffres 0 à 9. Un segment d’un afficheur 7 segments normaux s’allumant équivaut à allumer une LED, elle nécessite environ 3V et 20mA ; Ceci est facilement réalisable par l’Arduino seul. Ce segment de sept géant est un peu différent parce que chacun des segments est composé de 4 séries parallèles de 15 fils de LEDs rouges en série (Fig. 2). Pour allumer les LEDs, la tension aux bornes du segment doit être 15 * (tension de chaque LED en avant) et le courant dans chaque segment est 4 * (courant de chaque LED de fonctionnement typique). Ce sort à tout 31.5V(15*2.1V) et 80mA(4*20mA) par segment, clairement l’Arduino ne sera pas en mesure de gérer cela à lui seul.
Pour contrôler cet affichage, j’ai accroché l’anode commune à 36V et ensuite sélectivement à la terre les segments de l’écran que j’ai voulu s’allumer.
Le code ci-dessous compte à travers les chiffres 0-9 sur l’afficheur 7 segments, TIC-TAC d’un nombre à l’autre une fois par seconde. Il utilise une boucle for pour incrémenter la variable « i » 0-9, et ensuite les instructions switch/case utilise pour allumer les segments appropriés (en définissant leur Arduino pin correspondant en haut.
/*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 } }