usare 10 digit a 7 segmenti e un pulsante per visualizzare 10 numeri indipendent

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 :frowning: :confused:

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;
}
  }
  }

prova.txt (743 Bytes)

... 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

Indentazione, usa l'indentazione Luke :slight_smile:
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

grazie fabpolli cerco di capire

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