Arduino uno e lcd di futura elettronica per cronometro

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è. :grin:

/*
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. :wink:

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è. :grin:

/*

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