Go Down

Topic: Tasto reset nel countdown con funzione millis (Read 585 times) previous topic - next topic

davides98

Ciao a tutti da qualche giorno sto sviluppando questo software.
Sto realizzando un countdown con la funzione millis.
Tutto funziona tranne qualche particolare.
Quando avvio arduino il timer parte da solo, e vorrei aggiungere la funzione reset.
Per ora ho aggiunto solo la funzione pausa.
CODICE ARDUINO
Code: [Select]
#include <Arduino.h>
#include <TM1637Display.h>
//display 7 segmenti
#define CLK 2
#define DIO 3
//led -- SHOT CLOCK
const int ledPin = 12;
int ledState = LOW;
//button Pausa
const int buttonPin = 7;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
//button Reset
const int reset_buttonPin = 8;
int reset_buttonState = 0;
//temporizzatore
unsigned long previousMillis = 0;
const long interval = 1000;

//variabile tempo
int k = 60;

TM1637Display display(CLK, DIO);

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  pinMode(reset_buttonPin, INPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  reset_buttonState = digitalRead(reset_buttonPin);
 
  unsigned long currentMillis = millis();

 
  if (buttonState != lastButtonState){
    if(buttonState == HIGH){
    buttonPushCounter++;
    }
    delay(50);
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 != 0){
    uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  display.setBrightness(0x0f);
 
    if (currentMillis - previousMillis >= interval) {
   
        previousMillis = currentMillis;
        display.showNumberDec(k);
        k--;
       
       
        if(k<=0) k=60;
   
  }
   }
  }

torn24

Ciao e dove trovi difficoltà?
La soluzione è abbastanza banale a mio modesto avviso, hai un pulsante e alla pressione del pulsante azzeri le variabili, in tal modo ritorni alle condizioni iniziali.
Reset significa appunto tornare alla situazione iniziale, almeno che tu non gli dia un significato diverso.

Per cui...


Code: [Select]


if(digitalRead(PulsanteReset)==HIGH){

    //azzero le variabili necessarie
    k=60;

}



Per la pausa una variabile stato che passa da vero a falso, e un if() che esegue o meno il codice operativo.



davides98

si si immaginavo si facesse così ma quando inserisco quel pezzo di codice mi si blocca tutto il timer e non funziona più nulla

torn24

Quello che dici non dovrebbe succedere, l'if() va messo internamente alla funzione loop() ma esterno ad ogni altra cosa.

Go Up