// CLAVIER 2 BP DEBUGAGE_REV08.05
// Auteur : Djamel CHERGUI
// DNC e Solution
/* #######################################################################################
18/01/2022 - 13:45
- Debogage de la section paramétrage au niveau de l'entrée des grandeurs numérique puis de
l'affichage de celles-ci sur le LCD
- Le Ø fils déclaré en nombre flottant, incrémentation/décrémention du Ø par palier de 0.05 mm
- Debogage en cours de la section selection programme
19/01/2022 - 16:15
- Sauvegarde de secours
20/01/2022 - 9:23
- Intégration du curseur clignotant pour le temps d'attente paramétrage
21/01/2022 - 9:43
-Debogage de la boucle paramétrage/select programme
20/04/2022 - 8:05
- Intégration de la fonction "MARCHE"
22/04/2022 - 9:25
- Intégration de la fonctioon "MANUEL" */
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int BP_HAUT = 8;
int BP_BAS = 7;
int Etat_BP_HAUT=LOW;
int Etat_BP_BAS=LOW;
int Etat_BP=LOW;
const int Tempo = 3000;
unsigned long Temps_Actuel;
unsigned long Temps_Precedent;
int nb_spire;
int vitesse;
float diam_fils;
int long_bobine;
int flag_select_prog;
int flag_sauve_parametre;
int mode_parametrage = LOW;
int mode_select_programme = LOW;
int mode_sauvegarde_programme = LOW;
int reglage_nb_spire = LOW;
int reglage_vitesse = LOW;
int reglage_diam_fils = LOW;
int reglage_long_bobine = LOW;
void setup()
{
Serial.begin(9600);
pinMode(BP_HAUT, INPUT);
pinMode(BP_BAS, INPUT);
//Temps_Actuel = millis();
/*------------------------- Ecran d’accueil ---------------------*/
lcd.init();
lcd.clear();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("DNC.e.Solution");
lcd.setCursor(0, 1);
lcd.print("Winding Machine");
delay(2500);
lcd.clear();
}
void loop()
{
Reset_parametrage(); // RAZ valeurs paramétrage
Etat_BP_HAUT=digitalRead(BP_HAUT);
Etat_BP_BAS=digitalRead(BP_BAS);
Etat_BP =(Etat_BP_HAUT||Etat_BP_BAS);//Touche quelconque activée
/* ---------------Partie démarrage -----------------*/
while(Etat_BP==LOW)
{
Menu_demarrage();
mode_select_programme = HIGH;
if (Etat_BP!=0)
delay(200);
break;
}
/* ---------------Partie paramétrage -----------------*/
if (digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW) //oui pour paramétrage
{
{
delay(100);
mode_parametrage = HIGH;
lcd.clear();
Invite_parametrage();
delay(100);
}
while(mode_parametrage==HIGH)
{
/*----------Paramétrage spire----------*/
/*Touche active*/
{
Reset_parametrage(); // RAZ valeurs paramétrage
reglage_nb_spire = HIGH;
}
while(reglage_nb_spire==HIGH)
{
if((digitalRead(BP_HAUT)==HIGH)||(digitalRead(BP_BAS)==HIGH))
{
Gestion_parametrage_spire();
lcd.blink();
Affich_nb_spire();
}
/*Touche inactive*/
else if((!digitalRead(BP_HAUT))&&(!digitalRead(BP_BAS))&&(nb_spire > 0)){
Temps_Actuel=millis();
if((Temps_Actuel-Temps_Precedent > Tempo))
{
lcd.noBlink();
Serial.println("Sortie réglage nb spire");
reglage_nb_spire = LOW;
break;
}
}
}
/*----------Paramétrage vitesse----------*/
/*Touche active*/
reglage_vitesse = HIGH;
while(reglage_vitesse==HIGH)
{
if((digitalRead(BP_HAUT)==HIGH)||(digitalRead(BP_BAS)==HIGH))
{
Gestion_parametrage_vitesse();
lcd.blink();
Affich_vitesse();
}
/*Touche inactive*/
else if((!digitalRead(BP_HAUT))&&(!digitalRead(BP_BAS))&&(vitesse>0)){
Temps_Actuel=millis();
if((Temps_Actuel-Temps_Precedent > Tempo))
{
lcd.noBlink();
Serial.println("Sortie réglage vitesse");
reglage_vitesse = LOW;
break;
}
}
}
/*----------Paramétrage Ø fils----------*/
/*Touche active*/
reglage_diam_fils = HIGH;
while(reglage_diam_fils==HIGH)
{
if ((digitalRead(BP_HAUT)==HIGH)||(digitalRead(BP_BAS)==HIGH))
{
Gestion_diam_fils();
lcd.blink();
Affich_diam_fils();
}
/*Touche inactive*/
else if((!digitalRead(BP_HAUT))&&(!digitalRead(BP_BAS))&&(diam_fils>0)){
Temps_Actuel=millis();
if((Temps_Actuel-Temps_Precedent > Tempo))
{
lcd.noBlink();
Serial.println("Sortie réglage Ø fils");
reglage_diam_fils = LOW;
break;
}
}
}
/*----------Paramétrage longueur bobine----------*/
/*Touche active*/
reglage_long_bobine = HIGH;
while(reglage_long_bobine==HIGH)
{
if ((digitalRead(BP_HAUT)==HIGH)||(digitalRead(BP_BAS)==HIGH))
{
Gestion_long_bobine();
lcd.blink();
Affich_long_bobine();
}
/*Touche inactive*/
else if((!digitalRead(BP_HAUT))&&(!digitalRead(BP_BAS))&&(long_bobine>0)){
Temps_Actuel=millis();
if((Temps_Actuel-Temps_Precedent > Tempo))
{
lcd.noBlink();
Serial.println("Sortie réglage Ø fils");
reglage_long_bobine = LOW;
break;
}
}
}
delay(1000);
mode_parametrage = LOW;
if (mode_parametrage!=HIGH) break;
}
mode_sauvegarde_programme = HIGH;
flag_sauve_parametre=HIGH;
}
/* -------------------- Section Sauvegarde paramétrage --------------*/
if ((digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==LOW) && (mode_sauvegarde_programme == HIGH)) //Menu pour sauvegarde paramétrage
{
{
delay(500);
lcd.clear();
}
while(mode_sauvegarde_programme == HIGH && flag_sauve_parametre==HIGH)
{
while((digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==LOW)&&(flag_sauve_parametre==HIGH))
{
Menu_de_sauvegarde_parametrage();
if ((digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW)) // oui pour sauvegarde
{
lcd.clear();
Message_de_sauvegarde_parametrage();
delay(1500);
flag_sauve_parametre=!HIGH;
if(flag_sauve_parametre=!HIGH)
break;}
}
if ((digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==HIGH)) // non pour sauvegarde
{
mode_sauvegarde_programme =!HIGH;
lcd.clear();
Message_pas_de_sauvegarde_parametrage();
delay(1500);
lcd.clear();
Menu_marche();
while(digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==LOW);
if ((digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==HIGH)) // pas de mise en marche
{
lcd.clear();
Message_retour_accueil();
delay(1500);
}
if ((digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW)) // mise en marche
{
lcd.clear();
Message_marche_bobinage();
delay(1500);
}
}
if(mode_sauvegarde_programme =!HIGH)
break;
}
}
/* ----------------------------------------------------------------- */
if ((digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==HIGH)) //non pour paramétrage
{
{
delay(500);
lcd.clear();
Select_programme();
//flag_select_prog=HIGH;
}
while(mode_select_programme==HIGH)
{
if (digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW) // Selection d'un programme
{
lcd.clear();
Choix_programme();
delay(3000);
mode_select_programme=LOW;
}
if (digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==HIGH) // Pas de selection de programme
{
mode_select_programme=LOW;
delay(100);
lcd.clear();
Mode_manuel();
while(digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==LOW); // Attente du choix Oui/Non en mode Manuel
if(digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW) // Oui pour mode Manuel
{
lcd.clear();
delay(100);
}
if(digitalRead(BP_HAUT)==LOW && digitalRead(BP_BAS)==HIGH) //Non pour mode Manuel, puis retour au paramétrage
{
lcd.clear();
delay(100);
// Pas de routine prévue
}
}
if(mode_select_programme==LOW)
break;}
}
}
/*---------------- Routines d’affichage paramètres ----------------*/
void Affich_nb_spire()
{
lcd.setCursor(5, 0);
lcd.print(" ");
lcd.setCursor(5, 0);
lcd.print(nb_spire);
delay(150);
}
void Affich_vitesse()
{
lcd.setCursor(13, 0);
lcd.print(" ");
lcd.setCursor(13, 0);
lcd.print(vitesse);
delay(150);
}
void Affich_diam_fils()
{
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(4, 1);
lcd.print(diam_fils);
delay(150);
}
void Affich_long_bobine()
{
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.setCursor(12, 1);
lcd.print(long_bobine);
delay(150);
}
/*------------ Routine de définition du nombre de spires -----------*/
void Gestion_parametrage_spire()
{
{
Temps_Actuel = millis();
Temps_Precedent = Temps_Actuel;
}
if ((digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW) && (nb_spire<500))
{
nb_spire++;
Serial.println("spire ++");
}
if ((digitalRead(BP_BAS)==HIGH && digitalRead(BP_HAUT)==LOW) && (nb_spire>1))
{
nb_spire--;
Serial.println("spire --");
}
}
/*---------- Routine de définition de la vitesse de bobinage --------*/
void Gestion_parametrage_vitesse()
{
{
Temps_Actuel = millis();
Temps_Precedent = Temps_Actuel;
}
if ((digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW) && (vitesse<200))
{
vitesse++;
Serial.println("vitesse ++");
}
if ((digitalRead(BP_BAS)==HIGH && digitalRead(BP_HAUT)==LOW) && (vitesse>1))
{
vitesse--;
Serial.println("vitesse --");
}
}
/*----------------- Routine de définition du Ø fils -----------------*/
void Gestion_diam_fils()
{
{
Temps_Actuel = millis();
Temps_Precedent = Temps_Actuel;
}
if ((digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW) && (diam_fils<1.95))
{
diam_fils=diam_fils+0.05;
Serial.println("Ø fils ++");
}
if ((digitalRead(BP_BAS)==HIGH && digitalRead(BP_HAUT)==LOW) && (diam_fils>0.1))
{
diam_fils=diam_fils-0.05;
Serial.println("Ø fils --");
}
}
/*-------------- Routine de définition de la longueur de bobine ---------------*/
void Gestion_long_bobine()
{
{
Temps_Actuel = millis();
Temps_Precedent = Temps_Actuel;
}
if ((digitalRead(BP_HAUT)==HIGH && digitalRead(BP_BAS)==LOW) && (long_bobine<200))
{
long_bobine++;
Serial.println("long_bobine ++");
}
if ((digitalRead(BP_BAS)==HIGH && digitalRead(BP_HAUT)==LOW) && (long_bobine>5))
{
long_bobine--;
Serial.println("long_bobine --");
}
}
/*----------------- Routine de Sauvegarde paramétrage ----------------*/
void Message_pas_de_sauvegarde_parametrage()
{
lcd.setCursor(3, 0);
lcd.print("Pas de memo");
lcd.setCursor(3, 1);
lcd.print("parametres");
delay(10);
}
void Message_de_sauvegarde_parametrage()
{
lcd.setCursor(3, 0);
lcd.print("Sauvegarde");
lcd.setCursor(3, 1);
lcd.print("parametres");
delay(10);
}
void Message_marche_bobinage()
{
lcd.setCursor(4, 0);
lcd.print("Lancement");
lcd.setCursor(4, 1);
lcd.print("bobinage");
delay(10);
}
void Menu_de_sauvegarde_parametrage()
{
lcd.setCursor(0, 0);
lcd.print(" sauvegarde ?");
lcd.setCursor(0, 1) ;
lcd.print("<< oui non >>");
delay(10);
}
void Menu_marche()
{
lcd.setCursor(0, 0);
lcd.print(" marche ? ");
lcd.setCursor(0, 1) ;
lcd.print("<< oui non >>");
delay(10);
}
void Message_retour_accueil()
{
lcd.setCursor(5, 0);
lcd.print("Retour");
lcd.setCursor(5, 1);
lcd.print("accueil");
delay(10);
}
void Invite_parametrage()
{
lcd.setCursor(0, 0);
lcd.print("TURN~");
lcd.setCursor(5, 0);
lcd.print(nb_spire) ;
lcd.setCursor(9, 0);
lcd.print("RPM~");
lcd.setCursor(13, 0) ;
lcd.print(vitesse) ;
lcd.setCursor(0, 1);
lcd.print("DIA~");
lcd.setCursor(4, 1) ;
lcd.print(diam_fils) ;
lcd.setCursor(9, 1);
lcd.print("LG~");
lcd.setCursor(12, 1);
lcd.print(long_bobine);
}
/*---------------------- Routine du message d’accueil -------------------*/
void Message_Accueil()
{
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("DNC.e.Solution");
lcd.setCursor(0, 1);
lcd.print("Winding Machine");
}
/*---------------------- Routine du Menu de démarrage --------------------*/
void Menu_demarrage()
{
lcd.setCursor(0, 0);
lcd.print(" parametrage ?");
lcd.setCursor(0, 1) ;
lcd.print("<< oui non >>");
}
/*---------------------- Routine de sauvegarde en EEPROM -------------------*/
void Sauvegarde_en_EEPROM()
{
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Sauvegarde");
lcd.setCursor(3, 1);
lcd.print("en EEPROM");
delay(2500);
lcd.clear();
}
/*----------------- Routine du message de selection de programme ----------------*/
void Select_programme()
{
lcd.setCursor(0, 0);
lcd.print(" select prog ?");
lcd.setCursor(0, 1) ;
lcd.print("<< oui non >>");
}
/*----------------- Routine du message mode manuel ----------------*/
void Mode_manuel()
{
lcd.setCursor(0, 0);
lcd.print(" mode manuel ?");
lcd.setCursor(0, 1) ;
lcd.print("<< oui non >>");
}
/*-------------------------- Reset paramétrage ----------------------------*/
void Reset_parametrage()
{
nb_spire = 0;
vitesse = 0;
diam_fils = 0;
long_bobine = 0;
}
/*---------------------- Routine selectionner un programme --------------------*/
void Choix_programme()
{
lcd.setCursor(0, 0);
lcd.print("P1~P10 : ");
lcd.setCursor(0, 1) ;
lcd.print("<< ++ -- >>");
}