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...
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,
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
rifaccio lo stesso procedimento col secondo conteggio sempre visualizzandolo nel digit sinistro estremo
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
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
#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;
}
}
}
... 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.
Indentazione, usa l'indentazione Luke
Il tuo problema deriva dal fatto che questo codice:
if (val = LOW)
{
i=0;
}
è dentro l'if
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
if (val==HIGH)
Nell'ide se premi Ctrl+T ti fa l'indentazione automatica e questo genere di problemi saltano all'occhio più facilmente