Orologio 4 display bcd 7 segmenti

Ciao a tutti sto realizzando un orologio con 4 display bcd 7 segm(2 per i minuti e 2 per i secondi)..
utilizzo display a catodo comune e dei decoder hcf4511...con lo strobe sui decoder collegato ad arduino scelgo se attivare o meno il display...intanto ho realizzato questo codice ma non capisco perchè non va...potete aiutarmi?

int i;
int resto1;
int resto2;
int resto3;
int resto4;
int a;
int b;
int c;
int d;
void setup() {
  
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(4,OUTPUT);
}
  
  void loop() {
    digitalWrite(12,HIGH);
    digitalWrite(7,LOW);
    digitalWrite(6,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(4,HIGH);
    
    
    
   
    for(i=0;i<=9;i++)
    {(i/2)==a;
     (a/2)==b;
     (b/2)==c;
     (c/2)==d;
     (i % 2)==resto1;
     (a % 2)==resto2;
     (b % 2)==resto3;
     (c % 2)==resto4;
    
    if(resto1=1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2=1) digitalWrite(8,HIGH);
    else digitalWrite(9,LOW);
    if(resto3=1) digitalWrite(8,HIGH);
    else digitalWrite(10,LOW);
    if(resto4=1) digitalWrite(8,HIGH);
    else digitalWrite(11,LOW);
    delay(1000);
    }
    
  }

Vi prego aiutatemi perchè sono veramente in crisi!

Guarda qui --> http://arduino.cc/forum/index.php/topic,121433.0.html
e anche qui --> http://arduino.cc/forum/index.php/topic,104723.0.html

Ma quelli sono ad anodo comune,i miei a catodo comune!

if(resto1=1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2=1) digitalWrite(8,HIGH);
    else digitalWrite(9,LOW);
    if(resto3=1) digitalWrite(8,HIGH);
    else digitalWrite(10,LOW);
    if(resto4=1) digitalWrite(8,HIGH);
    else digitalWrite(11,LOW);

il confronto si fa con == ... quindi if(resto1==1)

poi

C++: l'operatore %, chiamato operatore MODULO restituisce il resto di una divisione.

5 % 2 = 1;
Perché 5 diviso 2 è 2 con il resto di 1.

byte modulo = a % b; <<<<< si dovrebbe scrivere così

Ma non l'avevo fatto giusto il modulo per i resti? avevo messo % tra la 4 divisioni in modo da ottenere tutti i resti no?

Sbagliato!

(i % 2)==resto1;
(a % 2)==resto2;
(b % 2)==resto3;
(c % 2)==resto4;

Giusto!

resto1 = i % 2;
resto2 = a % 2;
resto3 = b % 2;
resto4 = c % 2;

Per la correzione che ti ha detto Pablos.
Sbagliato!

  if(resto1=1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2=1) digitalWrite(8,HIGH);
    else digitalWrite(9,LOW);
    if(resto3=1) digitalWrite(8,HIGH);
    else digitalWrite(10,LOW);
    if(resto4=1) digitalWrite(8,HIGH);
    else digitalWrite(11,LOW);

Giusto!

if(resto1 == 1) digitalWrite(8,HIGH);
else
  digitalWrite(8,LOW);
if(resto2 == 1) digitalWrite(8,HIGH);
else
  digitalWrite(9,LOW);
if(resto3 == 1) digitalWrite(8,HIGH); 
else
  digitalWrite(10,LOW);
if(resto4 == 1) digitalWrite(8,HIGH);
else
  digitalWrite(11,LOW);

SISI grazie ho sistemato e funziona...ade sono al secondo display e sono riuscito a farli andare tutti e due...solo che quando arrivo a 59 riparte da 50 poi arriva ancora a 59 e riparte da 10...non riesco assolutamente a capire il perchè di cio...dove legge arduino questo codice?? grazie intanto per l'aiuto

void loop() {
    digitalWrite(12,HIGH);
    digitalWrite(7,LOW);
    digitalWrite(6,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(4,HIGH);
    
     for(i=0;i<=9;i++)
    {
      a=i/2;
     b=a/2;
     c=b/2;
     d=c/2;
     resto1=i % 2;
     resto2=a % 2;
     resto3=b % 2;
     resto4=c % 2;
    
    if(resto1==1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2==1) digitalWrite(9,HIGH);
    else digitalWrite(9,LOW);
    if(resto3==1) digitalWrite(10,HIGH);
    else digitalWrite(10,LOW);
    if(resto4==1) digitalWrite(11,HIGH);
    else digitalWrite(11,LOW);
    delay(250);
    }
    
    digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    
    digitalWrite(8,HIGH);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    
 for(i=0;i<=9;i++)
    {
      a=i/2;
     b=a/2;
     c=b/2;
     d=c/2;
     resto1=i % 2;
     resto2=a % 2;
     resto3=b % 2;
     resto4=c % 2;
    
    if(resto1==1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2==1) digitalWrite(9,HIGH);
    else digitalWrite(9,LOW);
    if(resto3==1) digitalWrite(10,HIGH);
    else digitalWrite(10,LOW);
    if(resto4==1) digitalWrite(11,HIGH);
    else digitalWrite(11,LOW);
    delay(250);
    }
 
     digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    
    digitalWrite(8,LOW);
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    
    
     for(i=0;i<=9;i++)
    {
      a=i/2;
     b=a/2;
     c=b/2;
     d=c/2;
     resto1=i % 2;
     resto2=a % 2;
     resto3=b % 2;
     resto4=c % 2;
    
    if(resto1==1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2==1) digitalWrite(9,HIGH);
    else digitalWrite(9,LOW);
    if(resto3==1) digitalWrite(10,HIGH);
    else digitalWrite(10,LOW);
    if(resto4==1) digitalWrite(11,HIGH);
    else digitalWrite(11,LOW);
    delay(250);
    }
    
     digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    
     digitalWrite(8,HIGH);
    digitalWrite(9,HIGH);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
    
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    
    for(i=0;i<=9;i++)
    {
      a=i/2;
     b=a/2;
     c=b/2;
     d=c/2;
     resto1=i % 2;
     resto2=a % 2;
     resto3=b % 2;
     resto4=c % 2;
    
    if(resto1==1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2==1) digitalWrite(9,HIGH);
    else digitalWrite(9,LOW);
    if(resto3==1) digitalWrite(10,HIGH);
    else digitalWrite(10,LOW);
    if(resto4==1) digitalWrite(11,HIGH);
    else digitalWrite(11,LOW);
    delay(250);
    }
    
    digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    
     digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
    
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    
    for(i=0;i<=9;i++)
    {
      a=i/2;
     b=a/2;
     c=b/2;
     d=c/2;
     resto1=i % 2;
     resto2=a % 2;
     resto3=b % 2;
     resto4=c % 2;
    
    if(resto1==1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2==1) digitalWrite(9,HIGH);
    else digitalWrite(9,LOW);
    if(resto3==1) digitalWrite(10,HIGH);
    else digitalWrite(10,LOW);
    if(resto4==1) digitalWrite(11,HIGH);
    else digitalWrite(11,LOW);
    delay(250);
    }
    
     digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    
     digitalWrite(8,HIGH);
    digitalWrite(9,LOW);
    digitalWrite(10,HIGH);
    digitalWrite(11,LOW);
    
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    
      for(i=0;i<=9;i++)
    {
      a=i/2;
     b=a/2;
     c=b/2;
     d=c/2;
     resto1=i % 2;
     resto2=a % 2;
     resto3=b % 2;
     resto4=c % 2;
    
    if(resto1==1) digitalWrite(8,HIGH);
    else   digitalWrite(8,LOW);
    if(resto2==1) digitalWrite(9,HIGH);
    else digitalWrite(9,LOW);
    if(resto3==1) digitalWrite(10,HIGH);
    else digitalWrite(10,LOW);
    if(resto4==1) digitalWrite(11,HIGH);
    else digitalWrite(11,LOW);
    delay(250);
    }
      
  }

Potresti spiegarci lo schema di collegamento?
Dal codice leggo solo pin che si attivano e disattivano :roll_eyes: ma non ho idea di quale segmento attivino e di quale display.
Inoltre ti conviene creare una funzione di decodifica dei dati da visualizzare.
Per le funzioni in c --> Funzioni in C: void, double e le altre | Guida C | Programmazione HTML.it

Potrebbe usare anche il

PINx =0 //0000
PINx =1 //0001
PINx =2 //0010
PINx =3 //0011
PINx =4 //0100
PINx =5 //0101
PINx =6 //0110
PINx =7 //0111
PINx =8 //1000
PINx =9 //1001

Manderebbe direttamente la codifica Decimale/Binaria sui 4 pin contemporaneamente con una riga solo
x sarebbe A o B o C o D ... ecc non sappiamo neanche che arduino ha

Ragazzi scusate ho risolto...sono finalmente riuscito a finirlo...volevo chiedervi ma come faccio per fare lampeggiare due led all'infinito mentre scorre l'orologio sui display? Due azioni contemporanee per capirci

Creati 2 funzioni nel loop, una per il led e l'altra per l'orologio, le chiami in base al valore della funzione millis.
Devi eliminare i delay presenti nel codice.
Dai uno sguardo all'esempio dell'IDe: Blink without delay.

Devi eliminate i delay presenti nel codice.

cosa vuoi che elimini non ha nemmeno letto

non sappiamo neanche che arduino ha

lool