Salve a tutti,premetto che ho gia' cercato sul web senza risultati.
Avrei la necessita' di cambiare lo stato di un pin attraverso un pulsante,che,prestabilito un tempo massimo,mi vada a cambiare lo stato del pin anche quando il pulsante è premuto piu' tempo di quello prestabilito.
Cerco di spiegarmi meglio:
-Premo il pulsante,cambia lo stato del pin,passano Tot secondi,ricambia lo stato del pin,anche se continuo a tenere il pulsante attivato.
Avete qualche suggerimento?
Grazie a tutti
Se passati i tot sec. (e quindi ricambi stato pin) e il pulsante è ancora premuto, che deve fare ? ignorare o è come se lo stesse ripremendo ?
Si.Se il pulsante è ancora premuto passati i tot secondi cambia lo stesso lo stato del pin,ignorando il pulsante fino alla prossima pressione
Manca ancora un'informazione: cosa deve succedere se il pulsante viene premuto due o più volte in sequenza prima che scada il tempo? Il tempo riparte ogni volta da zero (temporizzatore retriggerabile) o comunque si arriva sempre alla fine del tempo partito con la prima pressione (non retriggerabile)?
>tava999: so che sei un vecchio utente, ma la tua presentazione, nell'apposito thread, NON è presente ... ... per cui, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Guglielmo
ciao tava999,
lo so che non dovrei scrivere io il codice...però ho voluto esercitarmi un po'...non so se farà quello che volevi...ad ogni pressione del pulsante il LED cambia di stato...se lo tieni premuto per più di 2 secondi cambia di stato (una volta sola)...magari da questo ragioni per quello che ti serve realmente:
// ATTENZIONE CONNETTERE IL PIN BUTTON A GND !!!
unsigned long myTime;
int button = 2;
int LED = 3;
int stato;
boolean stato2;
boolean timeReset;
void setup() {
Serial.begin(9600);
pinMode(button, INPUT_PULLUP); // ATTENZIONE CONNETTERE IL PIN BUTTON A GND !!!
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
stato = 0;
stato2 = false;
timeReset = true;
}
void loop() {
if (digitalRead(button) == LOW) { // ESSENDO BUTTON INPUT_PULLUP QUANDO LOW==PULSANTE PREMUTO (CONTATTO CHIUSO)
if (stato == 0 && !stato2) {
digitalWrite(LED, HIGH);
stato = 1;
Serial.println("premuto");
}
if (stato == 0 && stato2) {
stato = 1;
digitalWrite(LED, LOW);
Serial.println("premuto2");
}
}
if (digitalRead(button) == HIGH && stato == 1) { // ESSENDO BUTTON INPUT_PULLUP QUANDO LOW==PULSANTE RILASCIATO (CONTATTO APERTO)
stato = 0;
stato2 = !stato2;
timeReset = true;
Serial.println("rilasciato");
}
if (!digitalRead(button)) {
if (timeReset) {
myTime = millis();
timeReset = false;
}
if (millis() == myTime + 2000) {
stato2 = !stato2;
stato = 1;
Serial.println("cambio stato");
if (stato2) {
digitalWrite(LED, LOW);
}
else {
digitalWrite(LED, HIGH);
}
}
}
}
ORSO2001:
... lo so che non dovrei scrivere io il codice...però ho voluto esercitarmi un po' ...
... ecco, bravo, e se lo sai perché lo fai ? Esercitati tu e NON fornire la "pappa fatta" agli utenti che poi finisce sempre con il solito copia/incolla e ... alla prossima sono tutti sempre qui !
Lo volete capire di NON postare codice già bello che fatto e finito? ... poiché poi, la tentazione, da parte di chi fa domande di fare copia/incolla, è sicuramente forte ma il risultato è di aver imparato poco.
E' bene invece cercare di spiegare la teoria così che, chi pone le domande, si sforza, capisca/studia e riesce a realizzare da solo quello che vuole ... con il risultato che IMPARA (... oltre la sicura maggiore soddisfazione) !
Se proprio volete postare qualche cosa, postate delle linee guida, una traccia, due righe di codice d'esempio, ecc. ... ma lasciate che l'utente assimili la cosa e sia in grado di produrre lui il codice !
E' ovviamente il mio punto di vista ... ma ritengo che lo scopo del forum e della comunità sia "far crescere" le persone, non fornirgli "pappa fatta" per cui, alla prossima difficoltà ... sono da capo a dodici !
Guglielmo