multiplex display 7 segmenti

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 è :

  1. 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… :frowning: :frowning:
suggerimenti?
grazie in anticipo per le risposte :slight_smile: :slight_smile: