Go Down

Topic: usare 10 digit a 7 segmenti e un pulsante per visualizzare 10 numeri indipendent (Read 344 times) previous topic - next topic

giuseppegaia

salve a tutti
sono un apprendista vorrei porvi un quesito sul mio problema che non riesco a cominciare

vorrei montare 10 digit a sette segmenti(no cristalli !!!!!) con shift 74hc595 register , un pulsante e poter visualizzare di volta in volta un numero con che vada da 0 a 9 e che raggiunto il numero si blocchi nei digit a partire da quello più a destra......mi spiego come meglio posso...
1) premo il pulsante e tengo premuto il pulsante , parte un contatore lento nell'ordine di un avanzamento ogni secondo e m,ezzo circa che conta da 0 a 9 visualizzabile nel digit a sinstra estrema,
2) arrivato al numero che ho scelto lascio il pulsante (ad esempio ero arrivato al numero 5) e il numero 5 si va a posizionare nel primo digit a destra estrema
3) rifaccio lo stesso procedimento col secondo conteggio sempre visualizzandolo nel digit sinistro estremo
4) ripeto il posizionamento questa volta secondo digit a destra
tutto questo per 10 volte dato che la decima volta il digit a sinstra estrema oltre a conteggiare si terrà l'ultimo numero conteggiato
spero di essere stato abbastanza chiaro
MI AIUTERESTE a risolvere questo grattacapo per me fondamentale?
grazie a tutti per quanto vorrete dirmi :(  :smiley-confuse:

giuseppegaia

ciao a tutti
 spero mi vogliate aiutare a risolvere questo problema
ho un digit a sette segmenti e voglio contare e vedere aumentare i numeri nel conteggio da 0 a 9 con un pulsante che da il consenso ma tutte le volte che stacco il pulsante lui si deve fermare , cosa che fa ,
pero quando ripremo il pulsante deve ricominciare da 0 anche se non sono arrivato a 9
allego il  sketch  nella speranza che mi aiutiate a trovare la soluzione

Code: [Select]
#define button 7
int val = 0;
int i = 0;
byte values[]={
B01000000,
B11111001,
B10100100,
B10110000,
B10011001,
B10010010,
B10000010,
B11011000,
B10000000,
B10010000,};

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup(){

pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(button, INPUT);
}
void loop(){
  val = digitalRead(button);
  if (val==HIGH){
 
  digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, values[i]);
digitalWrite(latchPin, HIGH);
delay(1000);
i=i+1;
if (i > 9) i=0;
if (val = LOW){i=0;
}
  }
  }
 

gpb01

... ho riunito io i tuoi due thread relativi allo stesso argomento. Continua su questo thread e NON aprirne altri duplicati relativi alla stessa cosa ! Grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

fabpolli

Indentazione, usa l'indentazione Luke :)
Il tuo problema deriva dal fatto che questo codice:
Code: [Select]

if (val = LOW)
{
  i=0;
}

è dentro l'if
Code: [Select]
if (val==HIGH)
Quindi se sei li dentro val non potrà mai essere LOW.
Per farlo funzionare o sposti il codice fuoti dall'if oppure (molto meglio per pulizia del codice) lo metti nell'else dell'if
Code: [Select]
if (val==HIGH)
Nell'ide se premi Ctrl+T ti fa l'indentazione automatica e questo genere di problemi saltano all'occhio più facilmente


giuseppegaia

grazie fabpolli funziona con else egregiamente...sono contento per te e un po anche per me

Go Up