Arduino e display a 7 segmenti

Oggi vedremo come collegare ed utilizzare un display a 7 segmenti con Arduino.
Il display che ho usato è di tipo ad anodo comune (hp 5082-7611), ma questa guida è valida anche per altri tipi di display.

Ecco come funziona:


Questo video dimostrativo con un semplice conteggio, che è quello che vedrete caricando lo sketch:



Il display a 7 segmenti è semplicemente un contenitore di 7 led (più quello del punto che non ho usato), quindi ogni singolo elemento va collegato come se fosse un led indipendente.
Ogni led dovrà avere in serie una resistenza (io le ho messe da 330 ohm).
Ecco lo schema di collegamento:





Come potete vedere questo è di tipo ad anodo comune, se possedete un display a catodo comune dovete semplicemente collegare il catodo comune a GND (invece l'anodo comune va a +5v)

Ecco lo sketch per l'anodo comune  (se possedete quello a catodo comune vanno invertiti i bit come spiegato nello sketch):

  1. //pin Arduino: 2,3,4,5,6,7,8
  2. //pin display: a,f,e,d,c,g,b
  3. byte seven_seg_digits[10][7] =
  4. //sketch per display ad anodo comune (es: 5082-7611), se il tuo è di tipo
  5. //"catodo comune" inverti gli "1" con "0" e viceversa.
  6. {
  7. { 0,0,0,0,0,1,0 },  // = 0
  8. { 1,1,1,1,0,1,0 },  // = 1
  9. { 0,1,0,0,1,0,0 },  // = 2
  10. { 0,1,1,0,0,0,0 },  // = 3
  11. { 1,0,1,1,0,0,0 },  // = 4
  12. { 0,0,1,0,0,0,1 },  // = 5
  13. { 0,0,0,0,0,0,1 },  // = 6
  14. { 0,1,1,1,0,1,0 },  // = 7
  15. { 0,0,0,0,0,0,0 },  // = 8
  16. { 0,0,1,1,0,0,0 }   // = 9
  17. };
  18. void setup() {                
  19.   pinMode(2, OUTPUT);  
  20.   pinMode(3, OUTPUT);
  21.   pinMode(4, OUTPUT);
  22.   pinMode(5, OUTPUT);
  23.   pinMode(6, OUTPUT);
  24.   pinMode(7, OUTPUT);
  25.   pinMode(8, OUTPUT);
  26.   pinMode(9, OUTPUT);
  27.   writeDot(0); 
  28. }
  29. void writeDot(byte dot) {
  30.   digitalWrite(9, dot);
  31. }
  32.    
  33. void sevenSegWrite(byte digit) {
  34.   byte pin = 2;
  35.   for (byte segCount = 0; segCount < 7; ++segCount) {
  36.     digitalWrite(pin, seven_seg_digits[digit][segCount]);
  37.     ++pin;
  38.   }
  39. }
  40. void loop() {
  41.   for (int i = 0; i < 10; i++) {
  42.   delay (1000);
  43.   sevenSegWrite(i);}
  44. }


Segui Daniele Alberti su Google+

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post