salve a tutti, sono un nuovo arduiniano, e ho comprato un kit da circa un mese, e sto facendo dei vari test(tutti andati a buon fine XD XD ). Ora mi sto cimentando nel pilotare 2 display 7 segmenti in multiplex, (non ha uno scopo, lo sto facendo solo da appassionato). quello che sto cercando di realizzare è :
- far comparire 2 numeri diversi sui due display in contemporanea [ ci sono riuscito]
2)far comparire un numero fisso su un display, e lasciare l'altro contare da 0 a 9[ problema !]
eccovi lo schech
int G=8;
int F=7;
int A=6;
int B=5;
int C=4;
int D=3;
int E=2;
unsigned long tempo;
unsigned long tempo1;
int cifra1=10;
int cifra2=11;
unsigned long secondo=1000;
int time=0;
int pulsante;
unsigned long secondo2=1000;
int val;
unsigned long tempodisplay=1;
int displai=0;
void setup(){
pinMode(9,OUTPUT);// IL PIN A CUI è COLLEGATO IL BUZER
pinMode(G,OUTPUT);
pinMode(F,OUTPUT);
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(C,OUTPUT);
pinMode(D,OUTPUT);
pinMode(E,OUTPUT);
pinMode(cifra1,OUTPUT);
pinMode(cifra2,OUTPUT);
Serial.begin(9600);
}
void zero(){
digitalWrite(G, HIGH);
digitalWrite(F, LOW);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(E, LOW);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
}
void uno(){
digitalWrite(G, HIGH);
digitalWrite(F, HIGH);
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(E, HIGH);
digitalWrite(D, HIGH);
digitalWrite(C, LOW);
}
void due(){
digitalWrite(G, LOW);
digitalWrite(F, HIGH);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(E, LOW);
digitalWrite(D, LOW);
digitalWrite(C, HIGH);
}
void tre(){
digitalWrite(G, LOW);
digitalWrite(F, HIGH);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(E, HIGH);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
}
void quattro(){
digitalWrite(G, LOW);
digitalWrite(F, LOW);
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(E, HIGH);
digitalWrite(D, HIGH);
digitalWrite(C, LOW);
}
void cinque(){
digitalWrite(G, LOW);
digitalWrite(F, LOW);
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(E, HIGH);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
}
void sex(){
digitalWrite(G, LOW);
digitalWrite(F, LOW);
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(E, LOW);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
}
void sette(){
digitalWrite(G, HIGH);
digitalWrite(F, HIGH);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(E, HIGH);
digitalWrite(D, HIGH);
digitalWrite(C, LOW);
}
void otto(){
digitalWrite(G, LOW);
digitalWrite(F, LOW);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(E, LOW);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
}
void nove(){
digitalWrite(G, LOW);
digitalWrite(F, LOW);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(E, HIGH);
digitalWrite(D, LOW);
digitalWrite(C, LOW);
}
void tempoo(){
tempo1=millis();
if(tempo1==secondo){
secondo=tempo1+secondo2;
switch (time) {
case 0:
zero();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 1:
uno();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 2:
due();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 3:
tre();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 4:
quattro();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 5:
cinque();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 6:
sex();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 7:
sette();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 8:
otto();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time++;
break;
case 9:
nove();
digitalWrite(9,HIGH);
delay(50);
digitalWrite(9,LOW);
time=0;
break;
}
}
}
void displaI(){
tempo=millis();
if(tempo>tempodisplay){
tempodisplay=tempo+1;
if(displai==1){
tempoo();
digitalWrite(cifra2,LOW);
digitalWrite(cifra1,HIGH);
displai=0;
}
else{
due();
digitalWrite(cifra1,LOW);
digitalWrite(cifra2,HIGH);
displai=1;
}
}
}
void loop(){
displaI();
}
come vedete, nel loop c'è una sola funzione (che è un'insieme di funzioni ). da programma mi aspettavo che funzionasse, lo compila, lo carica correttamente anche , e non mi da nessun codice di errore, ma, il programma non funge.
i 2 display mi mostrano entrambi due numeri uguali, nel caso di questo codice mi mostra due "2", ho provato a cambiare la cifra fissa, mettendo tre quattro cinque, ma a seconda della cifra fissa , i display si comportano sempre allo stesso modo , cioè mi mostrano entrambi i numeri uguali.
la funzione "tempoo" se usata su un solo display (vale a dire senza multiplex) mi conta da 0 a 9, va benissimo, ma mettendola nella funzione displaI non funge...
![]()
suggerimenti?
grazie in anticipo per le risposte
![]()