Arduino Forum

International => Italiano => Software => Topic started by: davides98 on Oct 06, 2017, 07:18 pm

Title: Tasto reset nel countdown con funzione millis
Post by: davides98 on Oct 06, 2017, 07:18 pm
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;
   
  }
   }
  }
Title: Re: Tasto reset nel countdown con funzione millis
Post by: torn24 on Oct 07, 2017, 09:30 am
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.


Title: Re: Tasto reset nel countdown con funzione millis
Post by: davides98 on Oct 07, 2017, 12:38 pm
si si immaginavo si facesse così ma quando inserisco quel pezzo di codice mi si blocca tutto il timer e non funziona più nulla
Title: Re: Tasto reset nel countdown con funzione millis
Post by: torn24 on Oct 07, 2017, 02:51 pm
Quello che dici non dovrebbe succedere, l'if() va messo internamente alla funzione loop() ma esterno ad ogni altra cosa.