Home
Accesso / Registrazione
 di 

Timer al volo

2 risposte [Ultimo post]
ritratto di solideo
Offline
Titolo: User+
Utente+
Ultima visita:
10 ore 47 min fa
Utente dal: 24/01/2014
Messaggi: 10
Utente PREMIUM

Ciao a tutti,
dopo un piccolo incidente al bromografo, con relativa distruzione del timer, ho la necessita' di farne uno al volo, non faccio nemmeno il pcb ma lo monto direttamente su breadbord, ed avendo degli arduino micro a disposizione ho pensato di usare la funzione 'delay' per il timer.
Questo e' il codice molto spartano, ma per il momento non ho bisogno di tanti fronzoli, che avevo pensato:
#include
int buzzer = 10;
int up = 8;
int down = 9;
int start = 7;
int rele = 6;
int sec = 0;
int i = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// put your setup code here, to run once:
pinMode(up, INPUT);
pinMode(down, INPUT);
pinMode(start, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(rele, OUTPUT);
lcd.begin(16, 2);
lcd.print("Secondi:");

}

void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(up) == HIGH ) { // controlla se il tasto è premuto
delay(50); // ritardo per l'anti rimbalzo
if (digitalRead(up) == HIGH ) { // ricontrolla dopo il delay se è sempre premuto, se falso ( non premuto ) esce dalla if vero continua
sec++; //aumenta i secondi
lcd.setCursor(1, 1); //posiziono il cursore senconda riga prima colonna
lcd.print(sec, DEC); //scrive il valore dei secondi in formato decimale
}
}
if (digitalRead(down) == HIGH ) {
delay(50);
if (digitalRead(down) == HIGH ) {
sec--;
lcd.setCursor(1, 1);
lcd.print(sec, DEC);
}
}
if (digitalRead(start) == HIGH ) {
delay(50);
if (digitalRead(start) == HIGH) {
for (i = sec; i >= 1; i--) { // assegno ad i il valore dei secondi ed inizio ciclo fino a quando i è maggiore o ugaule 1 e decremeto i ad ogni ciclo
digitalWrite(rele, HIGH); // attivo il rele
lcd.setCursor(1, 1);
lcd.print(i);
delay(1000); // aspetto 1 secondo prima del prossimo ciclo
}
tone(buzzer, 400); // finito il ciclo for suona il buzzer
delay(700);
}
}
}

mentre questo è il link allo schema :
https://www.dropbox.com/s/inqof8v9zag7btz/arduino_timer_2_bb%20%28Small%29.jpg

la cosa che volevo sapere da chi e' piu esperto se come soluzione tampone puo andare bene.

p.s. chiaramente se qualcosa puo andare storto va storto, nel computer che uso per programmare l'arduino si è guastato l' hard disk, quindi devo sostituirlo e poi riinstallare il tutto.

ritratto di Ivan.Tarozzi
Offline
Ultima visita:
2 giorni 7 ore fa
Utente dal: 05/01/2014
Messaggi: 1
Utente PREMIUM
just my2c

Non sono un esperto di arduino ma a naso noto 2 cose:

Il rele andrebbe attivato una sola volta fuori dal ciclo for, anche se di fatto anche così non cambia molto.

Alla fine del ciclo il rele non viene disattivato.

Infine, come logica lo sketch dovrebbe funzionare, ma il ciclo for di decremento secondi blocca il loop rendendo impossibile ad esempio una eventuale gestione dello stop anticipato o altro

ritratto di solideo
Offline
Titolo: User+
Utente+
Ultima visita:
10 ore 47 min fa
Utente dal: 24/01/2014
Messaggi: 10
Utente PREMIUM
Grazie della risposta, 4

Grazie della risposta, 4 occhi vedono meglio di 2
Alla fine del ciclo il rele non viene disattivato.
Hai ragione lo modifico subito.
...eventuale gestione dello stop anticipato o altro
E' per emergenza quindi per ora non ho bisogno di tante cose.

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 30 utenti e 85 visitatori collegati.

Ultimi Commenti