diff --git a/menu.cpp b/menu.cpp new file mode 100644 index 0000000..e8293b8 --- /dev/null +++ b/menu.cpp @@ -0,0 +1,130 @@ +#include "menu.h" +#include + +// Variables de configuration du menu +bool local = true; +bool solo = true; +int difficulty = 1; + +uint8_t btnPrevA; +uint8_t btnPrevB; +uint8_t btnA; +uint8_t btnB; + +bool isMod = false; +bool isModJeu = false; +bool isDifficulty = false; +bool isPlay = false; +bool isWebSet = false; + +Adafruit_SH1107 display = Adafruit_SH1107(64, 128, &Wire); + +unsigned long lastDebounceTimeA = 0; +unsigned long lastDebounceTimeB = 0; +const unsigned long debounceDelay = 200; + +// Assure-toi que epd_bitmap_logo soit déclaré ailleurs ou inclus ici +//extern const unsigned char epd_bitmap_logo[]; + +void setupMenu() { + pinMode(BUTTON_A, INPUT_PULLUP); + pinMode(BUTTON_B, INPUT_PULLUP); + + btnPrevA = digitalRead(BUTTON_A); + btnPrevB = digitalRead(BUTTON_B); + + display.begin(0x3C, true); + display.clearDisplay(); + // display.drawBitmap(0, 0, epd_bitmap_logo, 128, 64, SH110X_WHITE); + display.display(); + delay(1000); + display.clearDisplay(); + display.display(); + + display.setRotation(1); + display.setTextColor(SH110X_WHITE); + display.setCursor(0, 0); + display.display(); +} + +void choixMode() { + display.clearDisplay(); + display.setCursor(0, 0); + display.print("Choisissez le mode :\n"); + display.print("[A] Local\n"); + display.print("[B] Web\n"); + display.display(); +} + +void choixModeJeu() { + display.clearDisplay(); + display.setCursor(0, 0); + display.print("Choisissez le type :\n"); + display.print("[A] Solo\n"); + display.print("[B] Duo\n"); + display.display(); +} + +void choixDifficulty() { + display.clearDisplay(); + display.setCursor(0, 0); + display.print("Choisissez la \ndifficulte :\n"); + display.print("[A] Debutant\n"); + display.print("[B] Expert\n"); + display.display(); +} + +void menu() { + if (!isMod) { + choixMode(); + } else if (local && !isModJeu) { + choixModeJeu(); + } else if (local && solo && !isDifficulty) { + choixDifficulty(); + } else { + isPlay = true; + } +} + +void handleButtonA() { + if (!isMod) { + local = true; + isMod = true; + } else if (!isModJeu) { + solo = true; + isModJeu = true; + } else if (solo && !isDifficulty) { + difficulty = 1; + isDifficulty = true; + isPlay = true; + } +} + +void handleButtonB() { + if (!isMod) { + local = false; + isMod = true; + } else if (!isModJeu) { + solo = false; + isModJeu = true; + } else if (solo && !isDifficulty) { + difficulty = 2; + isDifficulty = true; + isPlay = true; + } +} + +void readButton() { + btnA = digitalRead(BUTTON_A); + if (btnA == LOW && btnPrevA == HIGH && (millis() - lastDebounceTimeA > debounceDelay)) { + lastDebounceTimeA = millis(); + handleButtonA(); + } + btnPrevA = btnA; + btnB = digitalRead(BUTTON_B); + if (btnB == LOW && btnPrevB == HIGH && (millis() - lastDebounceTimeB > debounceDelay)) { + lastDebounceTimeB = millis(); + handleButtonB(); + } + btnPrevB = btnB; +} diff --git a/menu.h b/menu.h index fe6ff1b..63ce57e 100644 --- a/menu.h +++ b/menu.h @@ -1,150 +1,42 @@ +#ifndef MENU_H +#define MENU_H + #include #include +// Variables de configuration du menu +extern bool local; +extern bool solo; +extern int difficulty; -bool local = true; -bool solo = true; -int difficulty = 1; +extern uint8_t btnPrevA; +extern uint8_t btnPrevB; +extern uint8_t btnA; +extern uint8_t btnB; -uint8_t btnPrevA; -uint8_t btnPrevB; -uint8_t btnA; -uint8_t btnB; - -bool isMod = false; -bool isModJeu = false; -bool isDifficulty = false; -bool isPlay = false; -bool isWebSet = false; +extern bool isMod; +extern bool isModJeu; +extern bool isDifficulty; +extern bool isPlay; +extern bool isWebSet; #define BUTTON_A 15 #define BUTTON_B 32 -Adafruit_SH1107 display = Adafruit_SH1107(64, 128, &Wire); -unsigned long lastDebounceTimeA = 0; -unsigned long lastDebounceTimeB = 0; -const unsigned long debounceDelay = 200; +extern Adafruit_SH1107 display; -void setupMenu() { - pinMode(BUTTON_A, INPUT_PULLUP); - pinMode(BUTTON_B, INPUT_PULLUP); +extern unsigned long lastDebounceTimeA; +extern unsigned long lastDebounceTimeB; +extern const unsigned long debounceDelay; - btnPrevA = digitalRead(BUTTON_A); - btnPrevB = digitalRead(BUTTON_B); +void setupMenu(); +void choixMode(); +void choixModeJeu(); +void choixDifficulty(); +void menu(); - display.begin(0x3C, true); - display.clearDisplay(); - display.drawBitmap(0, 0, epd_bitmap_logo, 128, 64, SH110X_WHITE); - display.display(); - delay(1000); - display.clearDisplay(); - display.display(); +void handleButtonA(); +void handleButtonB(); +void readButton(); - display.setRotation(1); - display.setTextColor(SH110X_WHITE); - display.setCursor(0, 0); - display.display(); -} - - - - - - - - - - - - -void choixMode() { - display.clearDisplay(); - display.setCursor(0, 0); - display.print("Choisissez le mode :\n"); - display.print("[A] Local\n"); - display.print("[B] Web\n"); - display.display(); -} - -void choixModeJeu() { - display.clearDisplay(); - display.setCursor(0, 0); - display.print("Choisissez le type :\n"); - display.print("[A] Solo\n"); - display.print("[B] Duo\n"); - display.display(); -} - -void choixDifficulty() { - display.clearDisplay(); - display.setCursor(0, 0); - display.print("Choisissez la \ndifficulte :\n"); - display.print("[A] Debutant\n"); - display.print("[B] Expert\n"); - display.display(); -} - - -void menu() { - if (!isMod) { - choixMode(); - } else if (local && !isModJeu) { - choixModeJeu(); - } else if (local && solo && !isDifficulty) { - choixDifficulty(); - } else { - isPlay = true; - } -} - - - - - - - - - -void handleButtonA() { - if (!isMod) { - local = true; - isMod = true; - } else if (!isModJeu) { - solo = true; - isModJeu = true; - } else if (solo && !isDifficulty) { - difficulty = 1; - isDifficulty = true; - isPlay = true; - } -} - -void handleButtonB() { - if (!isMod) { - local = false; - isMod = true; - } else if (!isModJeu) { - solo = false; - isModJeu = true; - } else if (solo && !isDifficulty) { - difficulty = 2; - isDifficulty = true; - isPlay = true; - } -} - - -void readButton(){ - btnA = digitalRead(BUTTON_A); - if (btnA == LOW && btnPrevA == HIGH && (millis() - lastDebounceTimeA > debounceDelay)) { - lastDebounceTimeA = millis(); - handleButtonA(); - } - btnPrevA = btnA; - btnB = digitalRead(BUTTON_B); - if (btnB == LOW && btnPrevB == HIGH && (millis() - lastDebounceTimeB > debounceDelay)) { - lastDebounceTimeB = millis(); - handleButtonB(); - } - btnPrevB = btnB; -} \ No newline at end of file +#endif // MENU_H