Appunto per quanto è complesso cercavo qualcuno che mi aiutasse in tempo reale, comunque espongo anche qua i problemi.
Il programma funzionerà così:
Schermata di "Benvenuto" --[4sec]--> Menu principale --[navigo con frecce/OK]--> -set n° bande magnetiche (imposto il numero di volte che il reed verrà attivato per ogni giro, es. 3 bande, ogni 3 bande è un giro)
--> -Avvia Crono (avvia lo script del cronometro)
--> -Invia sessione Seriale (collegando con usb a pc invia i tempi)
--> -Cancella sessione (cancella i tempi memorizzati nella eeprom)
Se la pista ha 3 bande magnetiche, passata la prima avvia un nuovo giro, alla seconda mostrerà se si sta girando più veloci o più lenti rispetto al tempo più basso memorizzato, al terzo passaggio, ferma il crono salva il tempo nella eprom e riparte per cronometrare il giro successivo.
Per la gestione del menu sto utilizzando la libreria "MenuBackend.h" che semplifica parecchio la gestione, questo è lo script allo stato attuale, non funziona ancora correttamente e mancano molte cose.
#include <MenuBackend.h>
#include <LiquidCrystal.h>
const int buttonPinLeft = 3;
const int buttonPinRight = 4;
const int buttonPinEsc = 5;
const int buttonPinEnter = 6;
int lastButtonPushed = 0;
int lastButtonEnterState = LOW;
int lastButtonEscState = LOW;
int lastButtonLeftState = LOW;
int lastButtonRightState = LOW;
long lastEnterDebounceTime = 0;
long lastEscDebounceTime = 0;
long lastLeftDebounceTime = 0;
long lastRightDebounceTime = 0;
long debounceDelay = 100;
int m,s,l;
int mu=0,md=0,su=0,sd=0,lu=0,ld=0,lc=0;
int pulsador,antes,despues;
long int tiempo,inicio;
LiquidCrystal lcd(11, NULL, 12, 7, 8, 9, 10);
MenuBackend menu = MenuBackend(menuUsed,menuChanged);
MenuItem menu1Item1 = MenuItem(" -Bande Magnet.");
MenuItem menuItem1SubItem1 = MenuItem("1");
MenuItem menuItem1SubItem2 = MenuItem("2");
MenuItem menuItem1SubItem3 = MenuItem("3");
MenuItem menuItem1SubItem4 = MenuItem("4");
MenuItem menuItem1SubItem5 = MenuItem("5");
MenuItem menuItem1SubItem6 = MenuItem("6");
MenuItem menuItem1SubItem7 = MenuItem("7");
MenuItem menuItem1SubItem8 = MenuItem("8");
MenuItem menuItem1SubItem9 = MenuItem("9");
MenuItem menu1Item2 = MenuItem(" -Avvia Crono");
MenuItem menuItem2SubItem1 = MenuItem("Crono");
MenuItem menu1Item3 = MenuItem("Invia t. seriale");
void setup()
{
pinMode(2, INPUT); //2 START/STOP
antes=HIGH;
despues=HIGH;
pinMode(buttonPinLeft, INPUT);
pinMode(buttonPinRight, INPUT);
pinMode(buttonPinEnter, INPUT);
pinMode(buttonPinEsc, INPUT);
lcd.begin(16, 2);
menu.getRoot().add(menu1Item1);
menu1Item1.addRight(menu1Item2).addRight(menu1Item3);
menu1Item1.add(menuItem1SubItem1).addRight(menuItem1SubItem2).addRight(menuItem1SubItem3).addRight(menuItem1SubItem4).addRight(menuItem1SubItem5).addRight(menuItem1SubItem6).addRight(menuItem1SubItem7).addRight(menuItem1SubItem8).addRight(menuItem1SubItem9);
menu1Item2.add(menuItem2SubItem1);
menu.toRoot();
lcd.setCursor(0,0);
lcd.print(" PL Karting ");
}