06. Pilotare un Display a led

Un Display a Led a 7 segmenti, del tipo mostrato in figura, è un dispositivo che incorpora 7 led pilotabili separatamente.

Questo componente è caratterizzato dal fatto che i led hanno in comune l'anodo o il catodo.

Nel progetto riportato in questa pagina i led del Display hanno in comune l'anodo.

link

Notare che il circuito lavora su logica negativa: quando sui pin di output non vi è tensione (cioè corrisponde a GND) il circuito del segmento si chiude e il segmento si accende,

L'anodo in comune è collegato con il filo rosso al centro del circuito.

La resistenza utilizzata è da 330 Ω.

Lo sketch riportato di seguito accende i numeri da 0 a 9 sul display.

La numerazione dei segmenti nello Sketch si basa sul seguente schema:

Sketch

int N;

void setup() {

pinMode(6, OUTPUT);

pinMode(7, OUTPUT);

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

pinMode(11, OUTPUT);

pinMode(12, OUTPUT);

digitalWrite(6, LOW);

digitalWrite(7, LOW);

digitalWrite(8, LOW);

digitalWrite(9, LOW);

digitalWrite(10, LOW);

digitalWrite(11, LOW);

digitalWrite(12, LOW);

}

void number(int n) {

int arr[7];

int led[7]={6,7,8,9,10,12,11}; //corrispondenza segmento-pin

int i;

if (n==0) {

arr[0]=0; arr[1]=0; arr[2]=0; arr[3]=0;

arr[4]=0; arr[5]=0; arr[6]=1;

}

else if (n==1) {

arr[0]=1; arr[1]=0; arr[2]=0; arr[3]=1;

arr[4]=1; arr[5]=1; arr[6]=1;

}

else if (n==2) {

arr[0]=0; arr[1]=0; arr[2]=1; arr[3]=0;

arr[4]=0; arr[5]=1; arr[6]=0;

}

else if (n==3) {

arr[0]=0; arr[1]=0; arr[2]=0; arr[3]=0;

arr[4]=1; arr[5]=1; arr[6]=0;

}

else if (n==4) {

arr[0]=1; arr[1]=0; arr[2]=0; arr[3]=1;

arr[4]=1; arr[5]=0; arr[6]=0;

}

else if (n==5) {

arr[0]=0; arr[1]=1; arr[2]=0; arr[3]=0;

arr[4]=1; arr[5]=0; arr[6]=0;

}

else if (n==6) {

arr[0]=0; arr[1]=1; arr[2]=0; arr[3]=0;

arr[4]=0; arr[5]=0; arr[6]=0;

}

else if (n==7) {

arr[0]=0; arr[1]=0; arr[2]=0; arr[3]=1;

arr[4]=1; arr[5]=1; arr[6]=1;

}

else if (n==8) {

arr[0]=0; arr[1]=0; arr[2]=0; arr[3]=0;

arr[4]=0; arr[5]=0; arr[6]=0;

}

else if (n==9) {

arr[0]=0; arr[1]=0; arr[2]=0; arr[3]=1;

arr[4]=1; arr[5]=0; arr[6]=0;

}

for (i=0; i<7; i++)

digitalWrite(led[i], arr[i]);

}

void loop() {

number(N);

N = (N+1)% 10;

delay(1000);

}