Ciao potreste aiutarmi, devo creare un cronometro semplice che con tre pulsanti faccia start stop e reset , ho iniziato con il kit futura e sia lcd che la scheda vanno , mi manca solo come scrivere e che comando usare per il calcolo del tempo ,
uso millis();
grazie
Raffa
Ciao Raffa,
inizia a buttare giù uno sketch per la gestione dei pulsanti e dell'LCD. Su internet trovi un marea di esempi e anche sul forum si era già parlato di cronometro. (usa il search)
Pubblicalo qui e poi lo correggiamo assieme.
ciao ho fatto questo
/*
test cronometro con pulsante e led
*/
#include <LiquidCrystal.h>
//Inizializza i PIN per il controllo del display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Stato3 = 0;
const int P3 = 10;
const int LED3 = 6;
void setup()
{
//Impostazione display
lcd.begin(16, 2);
lcd.print("ciao pirla");
pinMode(LED3, OUTPUT); //Impostazione PIN come uscita
pinMode(P3, INPUT); //Impostazione PIN come ingresso
digitalWrite(P3, HIGH); //Abilitazione pull-up
}
void loop()
{
Stato3 = digitalRead(P3);
//Accensione/spegnimento LED in base allo stato pulsanti
if (Stato3 == LOW)
{
int secondi=(millis()/1000);
int minuti=secondi/60;
digitalWrite(LED3, HIGH);
lcd.setCursor(13,10);
lcd.print(secondi);
lcd.setCursor(10,10);
lcd.print(":");
lcd.setCursor(7,10);
lcd.print(minuti);
}
else
{
digitalWrite(LED3, LOW);
lcd.setCursor(0,1);
lcd.print(millis()/1000);
}
delay(100); //Attesa 100ms
}
funziona sia il pulsante che lcd ,
ho solo un problema quello del tempo devo riuscire a trosformare tutto in minuti e secondi da visualizzare sull'lcd ..
Grazie
Raffaele
ciao Raffa, gentilmente modifica il tuo ultimo post e racchiudi il codice tra i tag "code" (usa il pulsante "#") lo renderai molto più visibile e navigabile
grazie
spero sia ok
Raffa
no, il pulsante con il disegno # ti racchiude il codice (che devi preventivamente selezionare) con due tag speciali.
Li puoi anche scrivere a mano e sono [ code] e [ /code] senza spazi. gli spazi qui li ho messi io per renderli visibili.
http://forum.arduino.cc/index.php?topic=149082.0
paragrafo 7
ok capito
grazie
Mi sono permesso di modificare il tuo listato... ma modifica modifica.. di quello originale non è rimasto granchè.
/*
test cronometro con pulsante e led
*/
#include <LiquidCrystal.h>
//Inizializza i PIN per il controllo del display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte START = 10;
const byte STOP = 11;
boolean StatusStart;
boolean StatusStop;
boolean StatusLed = LOW;
boolean CounterGo = false;
boolean LedOn = false;
unsigned long StartTime = 0;
unsigned long CurrentTime = 0;
unsigned long PreviousMillis = 0;
unsigned long CurrentMillis = 0;
void setup()
{
lcd.begin(16, 2);
lcd.print(" Cronometro ");
pinMode(LED_BUILTIN, OUTPUT); //Impostazione PIN come uscita
pinMode(START, INPUT_PULLUP); //Impostazione PIN come ingresso con pull-up
pinMode(STOP, INPUT_PULLUP);
} // End setup
void loop()
{
StatusStart = digitalRead(START);
StatusStop = digitalRead(STOP);
delay(20);
CurrentMillis = millis();
CurrentTime = CurrentMillis;
unsigned long FinishTime = StartTime - CurrentTime;
if (StatusStart == LOW && CounterGo == false)
{
StartTime = CurrentTime;
LedOn = true;
CounterGo = true;
}
if (StatusStop == LOW)
{
LedOn = false;
CounterGo = false;
RefreshDisplay(FinishTime);
delay(1000);
}
if (StatusStop == LOW && CounterGo == false) // Reset Counter
{
StartTime = 0;
LedOn = false;
CounterGo = false;
RefreshDisplay(StartTime);
delay(1000);
}
if (CounterGo == true)
{
if ((CurrentMillis - PreviousMillis) > 500)
{
RefreshDisplay(FinishTime);
PreviousMillis = CurrentMillis;
StatusLed != StatusLed;
}
}
if (LedOn == true) digitalWrite(LED_BUILTIN, StatusLed);
} // End Loop
void RefreshDisplay(unsigned long TS) {
unsigned int Secondi = TS%60;
TS /= 60;
unsigned int Minuti = TS%60;
TS /= 60;
unsigned int Ore = TS%24;
lcd.setCursor(13,10);
if (Secondi < 10) lcd.print("0");
lcd.print(Secondi);
lcd.setCursor(10,10);
lcd.print(":");
lcd.setCursor(7,10);
if (Minuti < 10) lcd.print("0");
lcd.print(Minuti);
}
Compila, ma non l'ho provato sull'Arduino.
Comunque sono previsti due pulsanti, uno di start, l'altro di stop e reset se il crono è gia fermo.
Provalo.
Lo sketch l'ho postato anche su CodeBender --> codebender
ciao per ora molte grazie
questa sera lo provo e domani mattina ti dico
Grazieeeee
PaoloP:
Mi sono permesso di modificare il tuo listato... ma modifica modifica.. di quello originale non è rimasto granchè./*
test cronometro con pulsante e led
*/
#include <LiquidCrystal.h>
//Inizializza i PIN per il controllo del display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte START = 10;
const byte STOP = 11;
boolean StatusStart;
boolean StatusStop;
boolean StatusLed = LOW;
boolean CounterGo = false;
boolean LedOn = false;
unsigned long StartTime = 0;
unsigned long CurrentTime = 0;
unsigned long PreviousMillis = 0;
unsigned long CurrentMillis = 0;
void setup()
{
lcd.begin(16, 2);
lcd.print(" Cronometro ");
pinMode(LED_BUILTIN, OUTPUT); //Impostazione PIN come uscita
pinMode(START, INPUT_PULLUP); //Impostazione PIN come ingresso con pull-up
pinMode(STOP, INPUT_PULLUP);
} // End setup
void loop()
{
StatusStart = digitalRead(START);
StatusStop = digitalRead(STOP);
delay(20);
CurrentMillis = millis();
CurrentTime = CurrentMillis;
unsigned long FinishTime = StartTime - CurrentTime;
if (StatusStart == LOW && CounterGo == false)
{
StartTime = CurrentTime;
LedOn = true;
CounterGo = true;
}
if (StatusStop == LOW)
{
LedOn = false;
CounterGo = false;
RefreshDisplay(FinishTime);
delay(1000);
}
if (StatusStop == LOW && CounterGo == false) // Reset Counter
{
StartTime = 0;
LedOn = false;
CounterGo = false;
RefreshDisplay(StartTime);
delay(1000);
}
if (CounterGo == true)
{
if ((CurrentMillis - PreviousMillis) > 500)
{
RefreshDisplay(FinishTime);
PreviousMillis = CurrentMillis;
StatusLed != StatusLed;
}
}
if (LedOn == true) digitalWrite(LED_BUILTIN, StatusLed);
} // End Loop
void RefreshDisplay(unsigned long TS) {
unsigned int Secondi = TS%60;
TS /= 60;
unsigned int Minuti = TS%60;
TS /= 60;
unsigned int Ore = TS%24;
lcd.setCursor(13,10);
if (Secondi < 10) lcd.print("0");
lcd.print(Secondi);
lcd.setCursor(10,10);
lcd.print(":");
lcd.setCursor(7,10);
if (Minuti < 10) lcd.print("0");
lcd.print(Minuti);
}
Compila, ma non l'ho provato sull'Arduino. Comunque sono previsti due pulsanti, uno di start, l'altro di stop e reset se il crono è gia fermo. Provalo. ;) Lo sketch l'ho postato anche su CodeBender --> http://codebender.cc/sketch:13123
Ho provato lo sketch, ma non funziona.
Sul display compaiono dei numeri casuali (il display è collegato correttamente, c'è qualcosa che non va nello sketch)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
...
const byte STOP = 11;
Stai usando lo stesso pin per il pulsante e per il display. Cambia uno dei due.
Ciao Uwe