Pages: [1]   Go Down
Author Topic: Orologio 4 display bcd 7 segmenti  (Read 1078 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

Code:
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);
    }
   
  }
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vi prego aiutatemi perchè sono veramente in crisi!
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6578
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: January 10, 2013, 04:52:26 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2745
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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ì
« Last Edit: January 11, 2013, 09:56:09 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6578
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sbagliato!
Code:
(i % 2)==resto1;
(a % 2)==resto2;
(b % 2)==resto3;
(c % 2)==resto4;

Giusto!
Code:
resto1 = i % 2;
resto2 = a % 2;
resto3 = b % 2;
resto4 = c % 2;

Per la correzione che ti ha detto Pablos.
Sbagliato!
Code:
  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!
Code:
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);
« Last Edit: January 11, 2013, 10:15:12 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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);
    }
     
  }   
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6578
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Potresti spiegarci lo schema di collegamento?
Dal codice leggo solo pin che si attivano e disattivano  smiley-roll-blue 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 --> http://www.html.it/pag/15409/le-funzioni/
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2745
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: January 11, 2013, 12:54:58 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6578
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: January 11, 2013, 04:44:46 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2745
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Devi eliminate i delay presenti nel codice.
cosa vuoi che elimini non ha nemmeno letto
Quote
non sappiamo neanche che arduino ha
lool
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Pages: [1]   Go Up
Jump to: