Problème de menu de commande de mise en marche de mon cooling system.
la fonction cooling system ne reste pas en marche retour au menu general
voici mon code source
onglet: astro system
#include <LiquidCrystal.h>
#include "Menu.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include "Wire.h"
static LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
/* Menu principal */
static const char* MAIN_MENU_ITEMS[] = {
"VOLTMETRE",
"KWh MOYENNE",
"TEMPERATURE BOX",
"COOLING CCD",
"DEW POINT",
};
static const Menu_t MAIN_MENU = {
"Votre choix ?",
MAIN_MENU_ITEMS,
5,
&doMainMenuAction
};
/* Sous menu pour Cooling system */
static const char* COOLING_SYSTEM_MENU_ITEMS[] = {
"PARAMETRE",
};
static const Menu_t COOLING_SYSTEM_MENU = {
"Votre choix ?",
COOLING_SYSTEM_MENU_ITEMS,
1,
&doCoolingSystemMenuAction
};
/** Setup */
void setup()
{
Serial.begin(57600);
/* Configuration du LCD */
lcd.begin(16, 4); // Démarrer la librairie
//Message de bienvenue
lcd.setCursor(0,00);
lcd.print(" ASTRO SYSTEM");
lcd.setCursor(0,01);
lcd.print("________________");
lcd.setCursor(0,02);
lcd.print("Mogenot Denis");
lcd.setCursor(0,003);
lcd.print("version: 3 2015");
delay(5000);
lcd.setCursor(0,00);
lcd.print(" ");
lcd.setCursor(0,01);
lcd.print(" "); //Effacer cette ligne
lcd.setCursor(0,02);
lcd.print(" ");
lcd.print(" ");
delay(5000);
}
void loop() {
/* Affiche le menu principal */
displayMenu(MAIN_MENU);
lcd.clear();
lcd.print(F("Menu ferme"));
delay(1000);
}
void aiguillage(int choix_utilisateur)
{
switch (choix_utilisateur)
{
case 0:
Serial.print("aiguillage = ");Serial.println("Voltmetre");
//Voltmetre ();
break;
case 1:
Serial.print("aiguillage = ");Serial.println("Kwh Moyenne");
// Kwh_Moyenne ();
break;
case 2:
Serial.print("aiguillage = ");Serial.println("Temperature Box");
// Temperature_Box ();
break;
case 3:
Serial.print("aiguillage = ");Serial.println("Cooling Ccd");
Cooling_Cdd ();
break;
case 4:
Serial.print("aiguillage = ");Serial.println("Dew Point");
//Dew_Point ();
break;
}
}
/** Fonction retournant le bouton appuyé (s'il y en a un). */
Button_t readPushButton(void) {
/* Lecture de l'entrée A0 */
unsigned int val = analogRead(A0);
/* Test suivant les fourchettes de valeurs */
if (val > 1000) return BP_NONE;
if (val < 50) return BP_RIGTH;
if (val < 195) return BP_UP;
if (val < 380) return BP_DOWN;
if (val < 555) return BP_LEFT;
if (val < 790) return BP_SELECT;
/* Par défaut aucun bouton n'est appuyé */
return BP_NONE;
}
/** Affiche le menu passé en argument */
void displayMenu(const Menu_t &menu) {
/* Variable pour le menu */
byte selectedMenuItem = 0; // Choix selectionné
byte shouldExitMenu = false; // Devient true quand l'utilisateur veut quitter le menu
Button_t buttonPressed; // Contient le bouton appuyé
/* Tant que l'utilisateur ne veut pas quitter pas le menu */
while (!shouldExitMenu) {
/* Affiche le menu */
lcd.clear();
lcd.print(menu.prompt);
lcd.setCursor(0, 1);
lcd.print(menu.items[selectedMenuItem]);
/* Attend le relâchement du bouton */
while (readPushButton() != BP_NONE);
/* Attend l'appui sur un bouton */
while ((buttonPressed = readPushButton()) == BP_NONE);
/* Anti rebond pour le bouton */
delay(30);
/* Attend le relâchement du bouton */
while (readPushButton() != BP_NONE);
/* Gére l'appui sur le bouton */
switch (buttonPressed) {
case BP_UP: // Bouton haut = choix précédent
/* Si il existe un choix précédent */
if (selectedMenuItem > 0) {
/* Passe au choix précédent */
selectedMenuItem--;
}
break;
case BP_DOWN: // Bouton bas = choix suivant
/* Si il existe un choix suivant */
if (selectedMenuItem < (menu.nbItems - 1)) {
/* Passe au choix suivant */
selectedMenuItem++;
}
break;
case BP_LEFT: // Bouton gauche = sorti du menu
shouldExitMenu = true;
break;
case BP_SELECT: //
case BP_RIGTH: // Bouton droit ou SELECT = validation du choix
menu.callbackFnct(selectedMenuItem);
break;
}
}
}
/** Affiche le choix de l'utilisateur */
void doMainMenuAction(byte selectedMenuItem) {
/* Cas spécial pour Cooling system */
if (selectedMenuItem == 2) {
/* Affiche le sous-menu pour Cooling system */
displayMenu(COOLING_SYSTEM_MENU);
} else {
/* Affiche le choix de l'utilisateur */
displayChoice(selectedMenuItem, MAIN_MENU_ITEMS);
}
}
/** Affiche le choix de l'utilisateur */
void doCoolingSystemMenuAction(byte selectedMenuItem) {
/* Affiche le choix de l'utilisateur */
displayChoice(selectedMenuItem, COOLING_SYSTEM_MENU_ITEMS);
}
/** Affiche le choix de l'utilisateur */
void displayChoice(byte selectedMenuItem, const char** items) {
/* Affiche le choix de l'utilisateur */
lcd.clear();
lcd.print(F("Valider :"));
lcd.setCursor(0, 1);
lcd.print(items[selectedMenuItem]);
Serial.print("selectedMenuItem = ");Serial.println(selectedMenuItem);
/* Attend l'appui sur le bouton gauche ou SELECT */
byte buttonPressed;
do {
buttonPressed = readPushButton();
}
while (buttonPressed != BP_LEFT && buttonPressed != BP_SELECT);
aiguillage(selectedMenuItem);
}