Ciao a tutti,
ho costruito un distributore automatico di croccantini per il gatto,
prendendo spunto da questo video:Link
sono riuscito a replicarlo senza problemi usando questo sketch:
Funziona tutto correttamente nonostante il mese impiegato per insegnare al gatto a premere un pulsante per far uscire i croccantini.
Il problema è che adesso che ha imparato, l'ha preso come un gioco e lo preme parecchie volte al giorno riempendo la ciotola allo sfinimento, :o nonostante il delay(1000);
stavo quindi pensando di modificare lo sketch per non far scendere più i croccantini per 2 ore dopo che ha premuto la prima volta e ragionando su come modificare lo sketch, ho creato questo codice:
#define interval 720000 // se non sbaglio sono 2 ore
#include <Servo.h>
long previousMills = 0;
Servo myservo;
const int servoPin = 9;
const int buttonPin = 12;
const int ledPin = 13;
void setup() {
myservo.attach(servoPin);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
myservo.write(180);
delay(1000);
myservo.detach();
}
void loop() {
int buttonVal = digitalRead(buttonPin);
if (millis() - previousMills > interval ){
previousMills = millis();
if(buttonVal == LOW) {
myservo.attach(servoPin);
myservo.write(50);
delay(1500);
myservo.write(180);
delay(1500);
myservo.detach();
delay(5000);
}
delay(13);
}}
non ho ancora provato se funziona perchè prima volevo un confronto dai più esperti!
saluti
Enzo
Oltre a unsigned direi che non funziona come vorresti tu, manca qualche variabile di controllo.
E' quando pigi il pulsante che deve scendere la pappa e poi inibire per 2 ore il pulsante, il contatore deve partire dall'ultima pigiata, non ogni 2 ore, il gatto non ha l'orologio al polso.
Prova a mettere 1 minuto (60000) invece di 720000, fai dei test e guarda cosa succede, poi rimetti 720... quando hai modificato e verificato che faccia quello che vuoi tu.
pablos:
Oltre a unsigned direi che non funziona come vorresti tu, manca qualche variabile di controllo.
E' quando pigi il pulsante che deve scendere la pappa e poi inibire per 2 ore il pulsante, il contatore deve partire dall'ultima pigiata, non ogni 2 ore, il gatto non ha l'orologio al polso.
Prova a mettere 1 minuto (60000) invece di 720000, fai dei test e guarda cosa succede, poi rimetti 720... quando hai modificato e verificato che faccia quello che vuoi tu.
Ok quindi la logica più corretta è creare una variabile che legge se il pulsante viene premuto entra nel ciclo millis , dichiaro il codice per far scendere la pappa poi un delay e un servo.stop giusto?
pablos:
Oltre a unsigned direi che non funziona come vorresti tu, manca qualche variabile di controllo.
E' quando pigi il pulsante che deve scendere la pappa e poi inibire per 2 ore il pulsante, il contatore deve partire dall'ultima pigiata, non ogni 2 ore, il gatto non ha l'orologio al polso.
Prova a mettere 1 minuto (60000) invece di 720000, fai dei test e guarda cosa succede, poi rimetti 720... quando hai modificato e verificato che faccia quello che vuoi tu.
in questa maniera dopo aver rilasciato i croccantini, buttonpin seconda la mia logica dovrebbe rimane su high per il tempo definito in millis e alla scadenza del tempo ricomincia il loop.
mi scuso se sto commettendo ancora errori ma nonosatnte la lettura di questo articolo:link
non ho ancora ben capito come integrarlo al meglio nel mio sketch usando un pulsante.
Tutti gli esempi che ho trovato in rete mostrano come far accendere o spegnere un led o più led, ma su come bloccare un pulsante per un tot di tempo, non ho trovato nessuna info utile.
Ringrazio tutti anticipatamente per aiutarmi a capire la logica della funzione millis.
Saluti
Enzo
SukkoPera:
Bella la scioltezza con cui clicca il pulsante, e bella l'idea del tubo di Pringles! 8)
Si nonostante il mese impiegato a insegnargli a farlo, adesso che lo fà, è veramente una soddisfazione
stavo provando la soluzione di uwefed creando una mia logica ma sbaglio ancora qualcosa :o
Ciao Brunello,
in questa maniera arduino deve aspettare 10 sec dalla prima pigiata,
invece come suggeriva @Pablos : "E' quando pigi il pulsante che deve scendere la pappa e poi inibire per 2 ore il pulsante, il contatore deve partire dall'ultima pigiata."
Per questo avevo messo l'istruzione servo fuori dal millis.