• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Arduino 7 segmenti!

Mar48

Utente Normale
Autore del topic
2 Ottobre 2012
54
9
Miglior risposta
0
Dovrei fare un contatore fino a 100 , 99 per dire la verità , con due display . Chi mi può aiutare?
Chioedo ancora agli amministratori di dedicare una sezione solo per arduino!
 
Hai già provato a seguire dei tutorial? In che cosa esattamente riscontri dei problemi?
 
che tutti i tutorial che ho seguito non ci sono con due display.o forse non li ho trovati!ma ho cercato ormai dappertutto!
 
che tutti i tutorial che ho seguito non ci sono con due display.o forse non li ho trovati!ma ho cercato ormai dappertutto!

Funziona allo stesso modo... chiaramente cambiano i pin a cui li colleghi. Il problema è che potrebbero non bastare i pin di Arduino (2x8= 16 troppi!).
In quel caso la soluzione è usare uno shift register oppure comprarsi un display a 7 segmenti con 2 (o più) cifre; ne trovi al prezzo di 1€ circa e l'utilizzo è abbastanza semplice.
Il numero di pin richiesto è di 10, quindi se devi pilotare solo quello vai tranquillo. Qui c'è un esempio dell'utilizzo:
Perfavore, Entra oppure Registrati per vedere i Link!
 
Ho pensato ad un modo più furbo...Utilizza la tecnica del multiplexing, ma senza usare altro hardware... Se collegassi i due display in questo modo
FKXKNX7GZUB3IZD.MEDIUM.jpg
Gnd1 e Gnd2 agiscono come "selettori" per determinare il display su cui scrivere, mentre tutte le altre linee sono in comune.
Quindi se metti Gnd1 al livello logico basso e Gn2 a quello alto scriverai solo sul display 1, mentre succede il contrario con Gn2=0 e Gnd1=1; eseguendo questo ad una velocità sufficientemente alta, è come se scrivi sui due display contemporaneamente.
 
infatti cosi li ho collegati e ho fatto questo sketch:
int i;
int x;
int r=300;
void setup() {
for(i=0; i<=7; i++){
pinMode(i,OUTPUT);
}
pinMode(11,OUTPUT);
pinMode(13,OUTPUT);
}

void loop() {
int digit1;

digitalWrite(11,HIGH);
delay(5);

for(x=0; x<=10; x++){

switch (x){

case 0:

digitalWrite(11,HIGH);
digitalWrite(13,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
delay(r);
break;

case 1:
digitalWrite(13,HIGH);
digitalWrite(11,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
delay(r);
break;


case 2:
digitalWrite(11,HIGH);
digitalWrite(13,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
digitalWrite(1,HIGH);
digitalWrite(4,LOW);
delay(r);
break;

case 3:
digitalWrite(13,HIGH);
digitalWrite(11,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
delay(r);
break;

case 4:
digitalWrite(13,LOW);
digitalWrite(11,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
delay(r);
break;

case 5:
digitalWrite(13,HIGH);
digitalWrite(11,LOW);
digitalWrite(11,LOW);
digitalWrite(13,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
digitalWrite(1,LOW);
digitalWrite(4,HIGH);
delay(r);
break;


case 6:
digitalWrite(13,LOW);
digitalWrite(11,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
digitalWrite(1,LOW);
digitalWrite(4,HIGH);
delay(r);
break;

case 7:
digitalWrite(13,HIGH);
digitalWrite(11,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,HIGH);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
delay(r);
break;

case 8:
digitalWrite(13,LOW);
digitalWrite(11,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(3,LOW);
digitalWrite(2,LOW);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
delay(r);
break;

case 9:
digitalWrite(13,HIGH);
digitalWrite(11,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
digitalWrite(1,LOW);
digitalWrite(4,LOW);
delay(r);
break;

default:
break;

}
}

}
 
Piu o meno ora cerchero di trovare un programma un po piu serio ! cioe un contatore fino a 99!
 
Una volta che riesci a far accendere i due display individualmente, creare un contatore è poca cosa ;) Per ora segno risolto. Facci sapere se hai problemi con il resto