je suis en train de programmer un Compacteur pour le génie civil, avec un ecran LCD et un KeyPad qui sert d'interface homme machine. Le programme du compacteur et l'affichage fonctionne a merveillle, mais lorsque j'alimente l'ecran et les capteurs (le tout ensemble enfaite) ca fait disfonctionner certains moteur et certains capteur.
J'ai donc alimenter lecran via un générateur 5V et larduino avec le PC (ca fonctionne) mais si je n'alimente pas la carte arduino avec le Pc ca ne focntionne plus (jai testé avec un générateur de 5V a 18V, avec une pile 9V, en usb et en jack, jai meme testé avec les entrées Vin et GND
seul lalimentation du PC fait fonctionner le montage (avec l'écran alimenté via le géné)
si quelqu'un sait pourquoi tout change du tout au tout en fonction de la source d'alim...
voici le code (un peu long) mais je pense pas que ca vienne de la :
#include <U8g2lib.h>
#include <Keypad.h>
#include <Arduino.h>
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 9);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {22,24,26,28};
byte colPins[COLS] = {30,32,34,36};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//____________________________________ CODE ECRAN _____________________________________________//
enum Menu {
MAIN_MENU, //0
INFO_MENU, //1
START_MENU, //2
TEST_MENU, //3
PROCTOR_MENU, //4
CBR_MENU, //5
PROCTOR_NORMAL, //6
PROCTOR_MODIFIE,//7
CBR_NORMAL,//8
CBR_MODIFIE,//9
INFO_CYCLE1,//10
INFO_CYCLE2,//13
INFO_CYCLE3,//16
INFO_CYCLE4,//19
START_cycle1,//11
START_cycle2,//14
START_cycle3,//17
START_cycle4,//20
INIT_1,//12
INIT_2,//15
INIT_3,//18
INIT_4,//21
CONTINUE_CYCLE_1, //22
CONTINUE_CYCLE_2, //23
CONTINUE_CYCLE_3, //24
CONTINUE_CYCLE_4, //25
FIN_CYCLE_1, //26
FIN_CYCLE_2, //27
FIN_CYCLE_3, //28
FIN_CYCLE_4, //29
};
Menu currentMenu = MAIN_MENU;
void displayMainMenu()
{ // main menu 0
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr); //
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," COMPACTEUR");
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(29, 29, 0x2190);
u8g2.drawGlyph(29, 45, 0x2190);
u8g2.drawGlyph(29, 61, 0x2190);
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(19, 26, "1 Information");
u8g2.drawStr(17, 42, "2 Demarrer");
u8g2.drawStr(17, 58, "3 Test moteur");
u8g2.sendBuffer();
}
void displayInfoMenu() { //menu 1
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr); //
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," INFORMATION");
// Changer temporairement la taille de la police
u8g2.setFont(u8g2_font_minicute_tr); // Choix d'une autre taille de police
u8g2.drawStr(23, 24, "By PROVITEQ");
// Revenir à la taille de police par défaut
u8g2.drawStr(1, 39, "- PROCTOR A");
u8g2.drawStr(1, 50, "- PROCTOR B (CBR)");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour ");
u8g2.sendBuffer();
}
void displayStartMenu()
{ //menu 2
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(35, 30, 0x2190);
u8g2.drawGlyph(35, 45, 0x2190);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," DEMARRER");
u8g2.drawStr(20, 27, "1 PROCTOR A");
u8g2.drawStr(20, 42, "2 PROCTOR B ");
u8g2.drawStr(55, 52, " (CBR)");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayTestMenu()
{ //menu 3
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
//vers gauche
u8g2.drawGlyph(12, 27, 0x2190);
u8g2.drawGlyph(12, 40, 0x2190);
u8g2.drawGlyph(12, 52, 0x2190);
u8g2.drawGlyph(12, 64, 0x2190);
//vers droite
u8g2.drawGlyph(105, 27, 0x2192);
u8g2.drawGlyph(105, 40, 0x2192);
u8g2.drawGlyph(105, 52, 0x2192);
u8g2.drawGlyph(105, 64, 0x2192);
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," TEST MOTEUR");
u8g2.drawStr(3, 25, "1 Rotation| Stop 4");
u8g2.drawStr(70, 37, "|");
u8g2.drawStr(3, 37, "2 Reculer Stop 5");
u8g2.drawStr(3, 49, "3 Avancer | Stop 6");
u8g2.drawStr(4, 61, "A Battage | Stop B");
u8g2.sendBuffer();
}
void displayProctorMenu()
{ //menu 4
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(20, 31, 0x2190);
u8g2.drawGlyph(20, 50, 0x2190);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," CYCLE PROCTOR A");
u8g2.drawStr(10, 28, "1 PROCTOR Normal");
u8g2.drawStr(10, 47, "2 PROCTOR Modifie ");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayCbrMenu()
{ //menu 5
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(20, 31, 0x2190);
u8g2.drawGlyph(20, 50, 0x2190);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," CYCLE PROCTOR B");
u8g2.drawStr(10, 28, "1 PROCTOR Normal");
u8g2.drawStr(10, 47, "2 PROCTOR Modifie ");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayProctorNormal()
{ // menu 6
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(32, 26, 0x2190);
u8g2.drawGlyph(32, 39, 0x2190);
u8g2.drawGlyph(32, 53, 0x2190);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR A NORMAL");
u8g2.drawStr(17, 23, "1 Info cycle");
u8g2.drawStr(17, 36, "2 Lancer cycle ");
u8g2.drawStr(17, 50, "3 Initialisation");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayProctorModifie()
{ // menu 7
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(32, 26, 0x2190);
u8g2.drawGlyph(32, 39, 0x2190);
u8g2.drawGlyph(32, 53, 0x2190);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR A MODIFIE");
u8g2.drawStr(17, 23, "1 Info cycle");
u8g2.drawStr(17, 36, "2 Lancer cycle ");
u8g2.drawStr(17, 50, "3 Initialisation");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayCbrNormal()
{ // menu 8
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(32, 26, 0x2190);
u8g2.drawGlyph(32, 39, 0x2190);
u8g2.drawGlyph(32, 53, 0x2190);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR B NORMAL");
u8g2.drawStr(17, 23, "1 Info cycle");
u8g2.drawStr(17, 36, "2 Lancer cycle ");
u8g2.drawStr(17, 50, "3 Initialisation");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayCbrModifie()
{ // menu 9
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(32, 26, 0x2190);
u8g2.drawGlyph(32, 39, 0x2190);
u8g2.drawGlyph(32, 53, 0x2190);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR B MODIFIE");
u8g2.drawStr(17, 23, "1 Info cycle");
u8g2.drawStr(17, 36, "2 Lancer cycle ");
u8g2.drawStr(17, 50, "3 Initialisation");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayInfo1()
{ //10
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(3, 10, "3 couches");
u8g2.drawStr(3, 23, "25 coups par couche");
u8g2.drawStr(1, 40, "duree : 1min 35s");
u8g2.drawStr(1, 50, "(duree / couche)");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayInfo2()
{ //13
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(3, 10, "5 couches");
u8g2.drawStr(3, 23, "25 coups par couche");
u8g2.drawStr(1, 40, "duree : 1min 35s");
u8g2.drawStr(1, 50, "(duree / couche)");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayInfo3()
{ //16
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(3, 10, "3 couches");
u8g2.drawStr(3, 23, "56 coups par couche");
u8g2.drawStr(1, 40, "duree : 1min 35s");
u8g2.drawStr(1, 50, "(duree / couche)");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayInfo4()
{ //19
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(87, 66, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(3, 10, "5 couches");
u8g2.drawStr(3, 23, "56 coups par couche");
u8g2.drawStr(1, 40, "duree : 1min 35s");
u8g2.drawStr(1, 50, "(duree / couche)");
u8g2.setFont(u8g2_font_04b_03_tr);
u8g2.drawStr(79, 62, "0 retour");
u8g2.sendBuffer();
}
void displayStart1()
{ //11
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR A NORMAL");
u8g2.drawStr(20, 35, "CYCLE EN COURS");
u8g2.drawStr(2, 54, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
void displayStart2()
{ //14
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR A MODIFIE");
u8g2.drawStr(20, 35, "CYCLE EN COURS");
u8g2.drawStr(2, 54, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
void displayStart3()
{ //17
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR B NORMAL");
u8g2.drawStr(20, 35, "CYCLE EN COURS");
u8g2.drawStr(2, 54, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
void displayStart4()
{ //20
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," PROCTOR B MODIFIE");
u8g2.drawStr(20, 35, "CYCLE EN COURS");
u8g2.drawStr(2, 54, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
void displayInit1()
{ //12
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," INITIALISATION");
u8g2.drawStr(24, 30, "INITIALISATION");
u8g2.drawStr(40, 41, "EN COURS");
u8g2.drawStr(2, 58, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
void displayInit2()
{ //15
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," INITIALISATION");
u8g2.drawStr(24, 30, "INITIALISATION");
u8g2.drawStr(40, 41, "EN COURS");
u8g2.drawStr(2, 58, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
void displayInit3()
{ //18
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," INITIALISATION");
u8g2.drawStr(24, 30, "INITIALISATION");
u8g2.drawStr(40, 41, "EN COURS");
u8g2.drawStr(2, 58, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
void displayInit4()
{ //21
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," INITIALISATION");
u8g2.drawStr(24, 30, "INITIALISATION");
u8g2.drawStr(40, 41, "EN COURS");
u8g2.drawStr(2, 58, "ne pas ouvrir la porte");
u8g2.sendBuffer();
}
int cycleCounter = 0;
void displayContinueCycle1()
{ //22
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(22, 52, 0x2190);
u8g2.drawGlyph(22, 64, 0x2190);
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," COUCHE TERMINE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.setCursor(9, 32);
u8g2.print("Couche complete : ");
u8g2.print(cycleCounter); // Affiche la valeur du compteur
u8g2.drawStr(10, 49, "1 Continuer cycle ");
u8g2.drawStr(10, 61, "A Annuler cycle");
u8g2.sendBuffer();
}
void displayContinueCycle2()
{ //23
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(22, 52, 0x2190);
u8g2.drawGlyph(22, 64, 0x2190);
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," COUCHE TERMINE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.setCursor(9, 32);
u8g2.print("Couche complete : ");
u8g2.print(cycleCounter); // Affiche la valeur du compteur
u8g2.drawStr(10, 49, "1 Continuer cycle ");
u8g2.drawStr(10, 61, "A Annuler cycle");
u8g2.sendBuffer();
}
void displayContinueCycle3()
{ //24
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(22, 52, 0x2190);
u8g2.drawGlyph(22, 64, 0x2190);
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," COUCHE TERMINE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.setCursor(9, 32);
u8g2.print("Couche complete : ");
u8g2.print(cycleCounter); // Affiche la valeur du compteur
u8g2.drawStr(10, 49, "1 Continuer cycle ");
u8g2.drawStr(10, 61, "A Annuler cycle");
u8g2.sendBuffer();
}
void displayContinueCycle4()
{ //25
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(22, 52, 0x2190);
u8g2.drawGlyph(22, 64, 0x2190);
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawButtonUTF8(5,8, U8G2_BTN_INV, u8g2.getDisplayWidth()-2*5,7,1," COUCHE TERMINE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.setCursor(9, 32);
u8g2.print("Couche complete : ");
u8g2.print(cycleCounter); // Affiche la valeur du compteur
u8g2.drawStr(10, 49, "1 Continuer cycle ");
u8g2.drawStr(10, 61, "A Annuler cycle");
u8g2.sendBuffer();
}
void displayFinCycle1()
{ //15
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(44, 53, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(20, 30, "FIN CYCLE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(32, 50, "0 retour");
u8g2.sendBuffer();
}
void displayFinCycle2()
{ //15
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(44, 53, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(20, 30, "FIN CYCLE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(32, 50, "0 retour");
u8g2.sendBuffer();
}
void displayFinCycle3()
{ //15
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(44, 53, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(20, 30, "FIN CYCLE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(32, 50, "0 retour");
u8g2.sendBuffer();
}
void displayFinCycle4()
{ //15
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(44, 53, 0x2190); //fleche retour
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(20, 30, "FIN CYCLE");
u8g2.setFont(u8g2_font_minicute_tr);
u8g2.drawStr(32, 50, "0 retour");
u8g2.sendBuffer();
}
//____________________________________ CODE COMPACTEUR _____________________________________________//
const int numInputs = 6;
const int analogIn[numInputs] = {A0, A1, A2, A8, A4, A5};
const int numOutputs = 4;
const int DigitalOut[numOutputs] = {2, 3, 4, 5};
bool capteurDame = false;
int val = 0;
float voltage = 0.0;
bool readanalogInA1() //capteur 6, rouge
{
val = analogRead(A1);
voltage = val * (5.0 / 1023.0);
return voltage > 4.97;
}
bool readanalogInA0() //capteur 4, bleu
{
val = analogRead(A0);
voltage = val * (5.0 / 1023.0);
return voltage > 4.97;
}
bool readanalogInA2() //capteur centre, gris
{
val = analogRead(A2);
voltage = val * (5.0 / 1023.0);
return voltage > 4.97;
}
bool readanalogInA8() //capteur Dame, blancOUnoir
{
val = analogRead(A8);
voltage = val * (5.0 / 1023.0);
return voltage > 4.97;
}
void moteur(int *DigitalOut, bool moteuron)
{
analogWrite(*DigitalOut, moteuron ? 255 : 0);
}
char readKey()
{
char key = keypad.getKey();
if (key)
{
Serial.println(key);
}
return key;
}
void rotation_1sur6()
{
//delay(50);
moteur(&DigitalOut[0], true);
delay(340);
moteur(&DigitalOut[0], false);
}
void rotation_1sur12()
{
moteur(&DigitalOut[0], true);
delay(140);
moteur(&DigitalOut[0], false);
}
void rotation_1sur4()
{
moteur(&DigitalOut[0], true);
delay(550);
moteur(&DigitalOut[0], false);
}
void translationAvantJusquaCapteurA0()
{
int count_5V = 0;
while (count_5V < 2)
{
float tension = analogRead(A0) * (5.0 / 1023.0);
// Serial.print("Tension : ");
//Serial.println(tension, 2);
if (tension >= 4.97)
{
count_5V++;
//Serial.println("Voltage 5V");
}
else
{
count_5V = 0; // Réinitialiser le compteur si la tension n'est pas de 5V
}
//Serial.print("Nombre de fois à 5V : ");
//Serial.println(count_5V);
if (count_5V == 2)
{
//Serial.println("Moteur coupé");
moteur(&DigitalOut[2], false);
}
else
{
moteur(&DigitalOut[2], true);
}
delay(50); // Attendre avant la prochaine lecture
}
}
bool derniere_mesure;
float seuil=4.97;
bool A2_vrai;
int compte_5V = 0;
bool A1_vrai = false;
void translationAvantJusquaCapteurA1()
{
int count_5V = 0;
while (count_5V < 3)
{
float tension = analogRead(A1) * (5.0 / 1023.0);
//Serial.print("Tension : ");
//Serial.println(tension, 2);
if (tension >= 4.97)
{
count_5V++;
//Serial.println("Voltage 5V");
}
else
{
count_5V = 0; // Réinitialiser le compteur si la tension n'est pas de 5V
}
//Serial.print("Nombre de fois à 5V : ");
//Serial.println(count_5V);
if (count_5V == 3)
{
//Serial.println("Moteur coupé");
moteur(&DigitalOut[2], false);
}
else
{
moteur(&DigitalOut[2], true);
}
delay(50); // Attendre avant la prochaine lecture
}
}
void TranslationArriereJusquaCapteurA2()
{
int count_5V = 0;
while (count_5V < 2)
{
float tension = analogRead(A2) * (5.0 / 1023.0);
//Serial.print("Tension : ");
//Serial.println(tension, 2);
if (tension >= 4.99)
{
count_5V++;
//Serial.println("Voltage 5V");
} else {
count_5V = 0; // Réinitialiser le compteur si la tension n'est pas de 5V
}
//Serial.print("Nombre de fois à 5V : ");
//Serial.println(count_5V);
if (count_5V == 02)
{
//Serial.println("Moteur coupé");
moteur(&DigitalOut[1], false);
}
else
{
moteur(&DigitalOut[1], true);
}
delay(13); // Attendre avant la prochaine lecture
}
}
void frapperUneFois()
{
int count_5V = 0;
moteur(&DigitalOut[3], true); // Active le moteur pour frapper
delay(50);
while (count_5V < 2)
{
float tension = analogRead(A8) * (5.0 / 1023.0); // Lecture de la tension sur le capteur A8
//Serial.print("Tension A8 : ");
//Serial.println(tension, 2);
if (tension >= 4.97)
{
count_5V++;
//Serial.println("Voltage 5V A8");
}
else
{
count_5V = 0; // Réinitialiser le compteur si la tension n'est pas de 5V
}
//Serial.print("Nombre de fois à 5V A8 : ");
//Serial.println(count_5V);
if (count_5V == 2)
{
delay(550);
//Serial.println("Moteur coupé A8");
moteur(&DigitalOut[3], false);
}
else
{
moteur(&DigitalOut[3], true);
}
delay(50); // Attendre avant la prochaine lecture de tension
}
moteur(&DigitalOut[3], false); // Désactive le moteur après la vérification
}
void battageETrotation()
{
int count_5V = 0;
moteur(&DigitalOut[3], true); // Active le moteur pour frapper
delay(50);
while (count_5V < 2)
{
float tension = analogRead(A8) * (5.0 / 1023.0); // Lecture de la tension sur le capteur A8
//Serial.print("Tension A8 : ");
//Serial.println(tension, 2);
if (tension >= 4.97)
{
count_5V++;
//Serial.println("Voltage 5V A8");
}
else
{
count_5V = 0; // Réinitialiser le compteur si la tension n'est pas de 5V
}
//Serial.print("Nombre de fois à 5V A8 : ");
//Serial.println(count_5V);
if (count_5V == 2)
{
delay(100);
rotation_1sur6();
delay(100);
//Serial.println("Moteur coupé A8");
moteur(&DigitalOut[3], false);
}
else
{
moteur(&DigitalOut[3], true);
}
delay(50); // Attendre avant la prochaine lecture de tension
}
moteur(&DigitalOut[3], false); // Désactive le moteur après la vérification
}
void battageETrotation4()
{
int count_5V = 0;
moteur(&DigitalOut[3], true); // Active le moteur pour frapper
delay(50);
while (count_5V < 2)
{
float tension = analogRead(A8) * (5.0 / 1023.0); // Lecture de la tension sur le capteur A8
//Serial.print("Tension A8 : ");
//Serial.println(tension, 2);
if (tension >= 4.97)
{
count_5V++;
//Serial.println("Voltage 5V A8");
}
else
{
count_5V = 0; // Réinitialiser le compteur si la tension n'est pas de 5V
}
//Serial.print("Nombre de fois à 5V A8 : ");
//Serial.println(count_5V);
if (count_5V == 2)
{
delay(100);
rotation_1sur4();
delay(100);
//Serial.println("Moteur coupé A8");
moteur(&DigitalOut[3], false);
}
else
{
moteur(&DigitalOut[3], true);
}
delay(50); // Attendre avant la prochaine lecture de tension
}
moteur(&DigitalOut[3], false); // Désactive le moteur après la vérification
}
void duree(int temps)
{
delay(100*temps);
}
void cycle6()
{
Serial.println("avancer au capteur A1");
translationAvantJusquaCapteurA1();
Serial.println("battage+rotation1/6 1");
battageETrotation(); //1
duree(1);
Serial.println("battage+rotation1/6 2");
battageETrotation(); //2
duree(1);
Serial.println("battage+rotation1/6 3");
battageETrotation(); //3
duree(1);
Serial.println("battage+rotation1/6 4");
battageETrotation(); //4
duree(1);
Serial.println("battage+rotation1/6 5");
battageETrotation(); //5
duree(1);
Serial.println("battage+rotation1/6 6");
frapperUneFois(); //6
duree(1);
Serial.println("rotation de 1/12");
duree(1);
rotation_1sur12();
delay(100);
Serial.println("reculer au centre");
TranslationArriereJusquaCapteurA2();
duree(2);
Serial.println("battage central");
moteur(&DigitalOut[3], true);
delay(2500);
moteur(&DigitalOut[3], false);
}
void cycle4()
{
Serial.println("avancer au capteur A0");
duree(1);
translationAvantJusquaCapteurA0();
duree(1);
for (int i = 0; i < 3; i++)
{
Serial.println("battage+rotation1/4 1");
battageETrotation4(); //1
duree(1);
Serial.println("battage+rotation1/4 2");
battageETrotation4();//2
duree(1);
Serial.println("battage+rotation1/4 3");
battageETrotation4(); //3
duree(1);
Serial.println("battage+rotation1/4 4");
battageETrotation4(); //4
duree(1);
Serial.println("battage+rotation1/4 5");
battageETrotation4(); //5
duree(1);
Serial.println("battage+rotation1/4 6");
battageETrotation4(); //6
duree(1);
Serial.println("battage+rotation1/4 7");
battageETrotation4(); //7
duree(1);
Serial.println("battage+rotation1/4 8");
frapperUneFois(); //8
duree(1);
// Maintenant, effectuer la rotation 1/12
Serial.println("rotation 1/12");
rotation_1sur12();
}
//mise au centre pour le 25eme coups
Serial.println("battage central");
duree(1);
TranslationArriereJusquaCapteurA2();
duree(1);
frapperUneFois();
}
void initialiserCompacteur()
{ bool A2_vrai = false;
duree(1);
Serial.println("initialisation dame");
frapperUneFois();
duree(1);
unsigned long startTime = millis(); // Enregistre le temps actuel (en millisecondes) au moment où la touche 'C' est pressée.
Serial.println("retour au centre");
TranslationArriereJusquaCapteurA2();
}
void setup()
{
u8g2.begin();
u8g2.setFont(u8g2_font_crox4tb_tr);
u8g2.drawStr(15, 40, "PROVITEQ"); // Affiche "PROVITEQ" aux coordonnées x=15 et y=40
u8g2.sendBuffer(); // Envoie le contenu du tampon pour l'affichage
delay(1600); // Pause de 1300 millisecondes
u8g2.clearBuffer(); // Efface le contenu de l'écran
displayMainMenu(); // Affiche le menu principal
pinMode(LED_BUILTIN, OUTPUT);
for (int i = 0; i < numOutputs; i++)
{
pinMode(DigitalOut[i], OUTPUT);
}
Serial.begin(9600);
Serial.println("Initialize System");
Serial.println("Please press the keyboard:");
analogWrite(DigitalOut[0] , 0);
analogWrite(DigitalOut[1] , 0);
analogWrite(DigitalOut[2] , 0);
analogWrite(DigitalOut[3] , 0);
}
void loop()
{
char key = keypad.getKey();
if (key)
{
if (key == '0')
{
// Go back to the previous menu
switch (currentMenu)
{
case INFO_MENU:
case START_MENU:
case TEST_MENU:
currentMenu = MAIN_MENU;
displayMainMenu();
break;
case PROCTOR_MENU:
case CBR_MENU:
currentMenu = START_MENU;
displayStartMenu();
break;
case PROCTOR_NORMAL:
case PROCTOR_MODIFIE:
currentMenu = PROCTOR_MENU;
displayProctorMenu();
break;
case CBR_NORMAL:
case CBR_MODIFIE:
currentMenu = CBR_MENU;
displayCbrMenu();
break;
case INFO_CYCLE1:
case INFO_CYCLE2:
case INFO_CYCLE3:
case INFO_CYCLE4:
case START_cycle1:
case START_cycle2:
case START_cycle3:
case START_cycle4:
case INIT_1:
case INIT_2:
case INIT_3:
case INIT_4:
// Going back to respective parent menu
if (currentMenu == INFO_CYCLE1 || currentMenu == START_cycle1 || currentMenu == INIT_1)
{
currentMenu = PROCTOR_NORMAL;
displayProctorNormal();
} else if (currentMenu == INFO_CYCLE2 || currentMenu == START_cycle2 || currentMenu == INIT_2)
{
currentMenu = PROCTOR_MODIFIE;
displayProctorModifie();
} else if (currentMenu == INFO_CYCLE3 || currentMenu == START_cycle3 || currentMenu == INIT_3)
{
currentMenu = CBR_NORMAL;
displayCbrNormal();
} else if (currentMenu == INFO_CYCLE4 || currentMenu == START_cycle4 || currentMenu == INIT_4)
{
currentMenu = CBR_MODIFIE;
displayCbrModifie();
}
break;
default:
break;
}
}
else
{
switch (currentMenu) {
case MAIN_MENU:
if (key == '1')
{
currentMenu = INFO_MENU;
displayInfoMenu();
} else if (key == '2')
{
currentMenu = START_MENU;
displayStartMenu();
} else if (key == '3')
{
currentMenu = TEST_MENU;
displayTestMenu();
}
break;
case INFO_MENU:
// Logique pour le menu d'informations
break;
case START_MENU:
if (key == '1')
{
currentMenu = PROCTOR_MENU;
displayProctorMenu();
} else if (key == '2')
{
currentMenu = CBR_MENU;
displayCbrMenu();
}
break;
case TEST_MENU:
// Logique pour le menu de test
if (key == '1')
{
analogWrite(DigitalOut[0] , 255);
}
if (key == '2')
{
analogWrite(DigitalOut[1] , 255);
}
if (key == '3')
{
analogWrite(DigitalOut[2] , 255);
}
if (key == 'A')
{
analogWrite(DigitalOut[3] , 255);
}
if (key == '4')
{
analogWrite(DigitalOut[0] , 0);
}
if (key == '5')
{
analogWrite(DigitalOut[1] , 0);
}
if (key == '6')
{
analogWrite(DigitalOut[2] , 0);
}
if (key == 'B')
{
analogWrite(DigitalOut[3] , 0);
}
break;
case PROCTOR_MENU:
if (key == '1')
{
currentMenu = PROCTOR_NORMAL;
displayProctorNormal();
}
else if (key == '2')
{
currentMenu = PROCTOR_MODIFIE;
displayProctorModifie();
}
break;
case CBR_MENU:
if (key == '1')
{
currentMenu = CBR_NORMAL;
displayCbrNormal();
}
else if (key == '2')
{
currentMenu = CBR_MODIFIE;
displayCbrModifie();
}
break;
case PROCTOR_NORMAL:
if (key == '1') {
currentMenu = INFO_CYCLE1;
displayInfo1();
} else if (key == '2') {
cycleCounter = 0;
currentMenu = START_cycle1;
displayStart1();
Serial.println("CYCLE 4 COMMENCÉ");
cycle4();
duree(1);
Serial.println("CYCLE 4 TERMINÉ");
currentMenu = CONTINUE_CYCLE_1; // Afficher le menu "CONTINUE_CYCLE_1" après la fin du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle1();
} else if (key == '3') {
currentMenu = INIT_1;
displayInit1();
Serial.println("INITIALISATION COMMENCÉE");
initialiserCompacteur();
Serial.println("INITIALISATION TERMINÉE");
currentMenu = PROCTOR_NORMAL;
displayProctorNormal();
}
break;
// Ajoutez ensuite dans la partie où vous gérez CONTINUE_CYCLE_1 pour gérer le compteur et les actions associées
case CONTINUE_CYCLE_1:
if (key == 'A')
{
cycleCounter = 0; // Remise à zéro du compteur si l'utilisateur annule
currentMenu = PROCTOR_NORMAL;
displayProctorNormal();
}
else if (key == '1')
{
currentMenu = START_cycle1;
displayStart1();
Serial.println("CYCLE 4 COMMENCÉ");
cycle4();
duree(1);
Serial.println("CYCLE 4 TERMINÉ");
currentMenu = CONTINUE_CYCLE_1; // Revenir au menu de continuation du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle1();
if (cycleCounter >= 3)
{
// Si le compteur atteint 3, passer à un nouveau menu
currentMenu = FIN_CYCLE_1;
// Faites les actions nécessaires pour le nouveau menu
displayFinCycle1();
}
}
break;
case FIN_CYCLE_1:
if (key == '0')
{
currentMenu = PROCTOR_NORMAL;
displayProctorNormal();
}
break;
case PROCTOR_MODIFIE:
if (key == '1') {
currentMenu = INFO_CYCLE2;
displayInfo2();
} else if (key == '2') {
cycleCounter = 0;
currentMenu = START_cycle2;
displayStart2();
Serial.println("CYCLE 4 modifie COMMENCÉ");
cycle4();
duree(1);
Serial.println("CYCLE 4 modifie TERMINÉ");
currentMenu = CONTINUE_CYCLE_2; // Afficher le menu "CONTINUE_CYCLE_1" après la fin du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle2();
} else if (key == '3') {
currentMenu = INIT_2;
displayInit2();
Serial.println("INITIALISATION COMMENCÉE");
initialiserCompacteur();
Serial.println("INITIALISATION TERMINÉE");
currentMenu = PROCTOR_MODIFIE;
displayProctorModifie();
}
break;
// Ajout de la gestion du compteur pour le menu PROCTOR_MODIFIE
case CONTINUE_CYCLE_2:
if (key == 'A')
{
cycleCounter = 0; // Remise à zéro du compteur si l'utilisateur annule
currentMenu = PROCTOR_MODIFIE;
displayProctorModifie();
}
else if (key == '1')
{
currentMenu = START_cycle2;
displayStart2();
Serial.println("CYCLE 4 COMMENCÉ");
cycle4();
duree(1);
Serial.println("CYCLE 4 TERMINÉ");
currentMenu = CONTINUE_CYCLE_2; // Revenir au menu de continuation du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle2();
if (cycleCounter >= 5) {
currentMenu = FIN_CYCLE_2;
displayFinCycle2();
}
break;
case FIN_CYCLE_2:
if (key == '0') {
currentMenu = PROCTOR_MODIFIE;
displayProctorModifie();
}
break;
case CBR_NORMAL:
if (key == '1') {
currentMenu = INFO_CYCLE3;
displayInfo3();
} else if (key == '2') {
cycleCounter = 0;
currentMenu = START_cycle3;
displayStart3();
Serial.println("CYCLE 6 COMMENCÉ");
for (int i = 0; i < 8; i++)
{
cycle6();
duree(1);
}
Serial.println("CYCLE 6 TERMINÉ");
currentMenu = CONTINUE_CYCLE_3; // Afficher le menu "CONTINUE_CYCLE_1" après la fin du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle3();
} else if (key == '3') {
currentMenu = INIT_3;
displayInit3();
Serial.println("INITIALISATION COMMENCÉE");
initialiserCompacteur();
Serial.println("INITIALISATION TERMINÉ");
currentMenu = CBR_NORMAL;
displayCbrNormal();
}
break;
case CONTINUE_CYCLE_3:
if (key == 'A') {
cycleCounter = 0; // Remise à zéro du compteur si l'utilisateur annule
currentMenu = CBR_NORMAL;
displayCbrNormal();
} else if (key == '1') {
currentMenu = START_cycle3;
displayStart3();
Serial.println("CYCLE 6 COMMENCÉ");
for (int i = 0; i < 8; i++)
{
cycle6();
duree(1);
}
Serial.println("CYCLE 6 TERMINÉ");
currentMenu = CONTINUE_CYCLE_3; // Revenir au menu de continuation du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle3();
if (cycleCounter >= 3) {
currentMenu = FIN_CYCLE_3;
displayFinCycle3();
}
}
break;
case FIN_CYCLE_3:
if (key == '0') {
currentMenu = CBR_NORMAL;
displayCbrNormal();
}
break;
case CBR_MODIFIE:
if (key == '1') {
currentMenu = INFO_CYCLE4;
displayInfo4();
} else if (key == '2') {
cycleCounter = 0;
currentMenu = START_cycle4;
displayStart4();
Serial.println("CYCLE 4 COMMENCÉ");
cycle4();
duree(1);
Serial.println("CYCLE 4 TERMINÉ");
currentMenu = CONTINUE_CYCLE_4; // Afficher le menu "CONTINUE_CYCLE_1" après la fin du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle4();
} else if (key == '3') {
currentMenu = INIT_4;
displayInit4();
Serial.println("INITIALISATION COMMENCÉE");
initialiserCompacteur();
Serial.println("INITIALISATION TERMINÉE");
currentMenu = CBR_MODIFIE;
displayCbrModifie();
}
break;
case CONTINUE_CYCLE_4:
if (key == 'A') {
cycleCounter = 0; // Remise à zéro du compteur si l'utilisateur annule
currentMenu = CBR_MODIFIE;
displayCbrModifie();
} else if (key == '1') {
currentMenu = START_cycle4;
displayStart4();
Serial.println("CYCLE 4 COMMENCÉ");
cycle4();
duree(1);
Serial.println("CYCLE 4 TERMINÉ");
currentMenu = CONTINUE_CYCLE_4; // Revenir au menu de continuation du cycle
cycleCounter++; // Incrémente le compteur à chaque fois que le cycle est terminé
displayContinueCycle4();
if (cycleCounter >= 5) {
currentMenu = FIN_CYCLE_4;
displayFinCycle4();
}
}
break;
case FIN_CYCLE_4:
if (key == '0') {
currentMenu = CBR_MODIFIE;
displayCbrModifie();
}
break;
// ... (gestion des autres cas des sous-menus)
}
}
}
}
}








