toujours dans le cadre d'un compacteur, le projet est terminé a 95%, mais il me reste a connecter un capteur magnétique sur une porte.
lorsque la porte est fermé j'ai plus que 4.96 et quand la porte est ouverte j'ai moins donc le seuil cest 4.96V.
je narrive pas a codé cette interuption soit elle n'est jamais lu soit elle reste bloqué dedans, j'ai essayé plusieurs méthode non concluante.
voici le code complet :
#include <U8g2lib.h>
#include <Keypad.h>
#include <Arduino.h>
#include <avr/io.h>
#include <avr/interrupt.h>
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 8, /* data=*/ 7, /* CS=*/ 6, /* 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 10s");
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 10s");
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 : 2min 50s");
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 : 2min 50s");
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.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 == 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();
}
const int doorPin = A9; // Broche pour la porte (A9)
volatile bool doorOpen = false; // État de la porte (initialisé à fermé)
void doorStateChanged()
{
float voltage = analogRead(doorPin) * (5.0 / 1023.0); // Lecture de la tension
doorOpen = (voltage < 4.95); // Mettre à jour l'état de la porte en fonction du seuil de 4V
}
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);
pinMode(doorPin, INPUT_PULLUP); // Activer la résistance de pull-up interne
attachInterrupt(digitalPinToInterrupt(doorPin), doorStateChanged, CHANGE);
}
void loop()
{
if (doorOpen) {
// La porte est ouverte, exécutez ici le code correspondant
Serial.println("La porte est ouverte !");
} else {
// La porte est fermée, exécutez ici le code correspondant
Serial.println("La porte est fermée.");
}
delay(1000); // Léger délai pour éviter les lectures trop rapides
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)
}
}
}
}
}
et voici la parti ou ya l'interruption (non fonctionnel) je les mise dans le main mais j'ai tester en dehors etc j'ai meme fais a la main avec les registres sans succes)
const int doorPin = A9; // Broche pour la porte (A9)
volatile bool doorOpen = false; // État de la porte (initialisé à fermé)
void doorStateChanged()
{
float voltage = analogRead(doorPin) * (5.0 / 1023.0); // Lecture de la tension
doorOpen = (voltage < 4.95); // Mettre à jour l'état de la porte en fonction du seuil de 4V
}
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);
pinMode(doorPin, INPUT_PULLUP); // Activer la résistance de pull-up interne
attachInterrupt(digitalPinToInterrupt(doorPin), doorStateChanged, CHANGE);
}
void loop()
{
if (doorOpen) {
// La porte est ouverte, exécutez ici le code correspondant
Serial.println("La porte est ouverte !");
} else {
// La porte est fermée, exécutez ici le code correspondant
Serial.println("La porte est fermée.");
}
delay(1000); // Léger délai pour éviter les lectures trop rapides





