diff --git a/platformio.ini b/platformio.ini index 0b0cec5..ab2e702 100644 --- a/platformio.ini +++ b/platformio.ini @@ -37,4 +37,5 @@ build_flags = lib_deps = https://github.com/takkaO/OpenFontRender bblanchon/ArduinoJson@^6.21.2 - https://github.com/tzapu/WiFiManager.git \ No newline at end of file + https://github.com/tzapu/WiFiManager.git + mathertel/OneButton @ ^2.0.3 diff --git a/src/NerdMinerV2.ino.cpp b/src/NerdMinerV2.ino.cpp index 7ff9f88..a1ca9eb 100644 --- a/src/NerdMinerV2.ino.cpp +++ b/src/NerdMinerV2.ino.cpp @@ -1,8 +1,13 @@ +//Botón configuración +#define PIN_BUTTON_1 0 +#define PIN_BUTTON_2 14 + #include #include #include #include #include // Graphics and font library +#include #include "mbedtls/md.h" #include "media/images.h" @@ -13,6 +18,9 @@ //3 seconds WDT #define WDT_TIMEOUT 3 +OneButton button1(PIN_BUTTON_1); +OneButton button2(PIN_BUTTON_2); + OpenFontRender render; @@ -31,6 +39,20 @@ unsigned long start = millis(); //void runMonitor(void *name); +void alternate_screen_state() { + int screen_state= digitalRead(38); + //Serial.printf("Screen state is '%s', switching to '%s'", screen_state, !screen_state); + Serial.println("Switching display state"); + digitalWrite(38, !screen_state); +} + +void alternate_screen_rotation() { + tft.getRotation() == 1 ? tft.setRotation(3) : tft.setRotation(1); + +} + + + /********* INIT *****/ void setup() { @@ -41,14 +63,29 @@ void setup() // Idle task that would reset WDT never runs, because core 0 gets fully utilized disableCore0WDT(); disableCore1WDT(); - + + // Setup the buttons + // Button 1 (Boot) + button1.setPressTicks(5000); + button1.attachClick(alternate_screen_state); + button1.attachDoubleClick(alternate_screen_rotation); + // button1.attachLongPressStart([]{Serial.println("Button 1 started a long press");}); + // button1.attachLongPressStop([]{Serial.println("Button 1 stopped a long press");}); + // button1.attachDuringLongPress([]{Serial.println("Button 1 is being held down");}); + + // Button 2 (GPIO14) + button2.setPressTicks(5000); + // button2.attachClick(); + // button2.attachDoubleClick([]{Serial.println("Button 2 was double clicked");}); + button2.attachLongPressStart(reset_configurations); + // button2.attachLongPressStop(reset_configurations); + // button2.attachDuringLongPress([]{Serial.println("Button 2 is being held down");}); + + /******** INIT NERDMINER ************/ Serial.println("NerdMiner v2 starting......"); - // Setup the button - pinMode(PIN_BUTTON_1, INPUT); - attachInterrupt(PIN_BUTTON_1, checkResetConfigButton, FALLING); - + /******** INIT DISPLAY ************/ tft.init(); tft.setRotation(1); @@ -73,7 +110,7 @@ void setup() /******** INIT WIFI ************/ init_WifiManager(); - + /******** CREATE TASK TO PRINT SCREEN *****/ //tft.pushImage(0, 0, MinerWidth, MinerHeight, MinerScreen); // Higher prio monitor task @@ -104,7 +141,10 @@ void app_error_fault_handler(void *arg) { } void loop() { - + // keep watching the push buttons: + button1.tick(); + button2.tick(); + wifiManagerProcess(); // avoid delays() in loop when non-blocking and other long running code int newStatus = WiFi.status(); @@ -118,9 +158,7 @@ void loop() { oldStatus = newStatus; } - checkResetConfigButton(); - - //Run miner on main core when there is time --Currently on test + //Run miner on main core when there is time --Currently on test // runMiner(); } \ No newline at end of file diff --git a/src/wManager.cpp b/src/wManager.cpp index aa8d993..0273514 100644 --- a/src/wManager.cpp +++ b/src/wManager.cpp @@ -27,10 +27,6 @@ char btcString[80] = "yourBtcAddress"; // Define WiFiManager Object WiFiManager wm; -static int buttonReset = 1; -static unsigned long lastButtonPress = 0; // Última vez que se pulsó el botón - -volatile bool buttonPressed = false; extern TFT_eSPI tft; // tft variable declared on main @@ -140,8 +136,6 @@ void init_WifiManager() { Serial.begin(115200); //Serial.setTxTimeoutMs(10); - //Init config pin - pinMode(PIN_BUTTON_2, INPUT); //Init pin 15 to eneble 5V external power (LilyGo bug) pinMode(PIN_ENABLE5V, OUTPUT); @@ -271,45 +265,11 @@ void init_WifiManager() } } -/*void checkResetConfigButton(){ - - // Leer el estado del botón - int buttonState = digitalRead(PIN_BUTTON_0); - unsigned int last_time = (millis() - lastButtonPress); - Serial.printf("button pressed %i - %u\n", buttonReset, last_time); - - buttonReset++; - lastButtonPress = millis(); - - if ( last_time > 1000) { - buttonReset = 1; - } - - // Si el botón está pulsado y ha pasado suficiente tiempo desde la última pulsación - if (last_time < 1000 && buttonReset == 4) { - buttonPressed = true; - } - -}*/ - -void checkResetConfigButton() { - // check for button press - if ( digitalRead(PIN_BUTTON_2) == LOW ) { - // poor mans debounce/press-hold, code not ideal for production - delay(50); - if( digitalRead(PIN_BUTTON_2) == LOW ){ - Serial.println("Button Pressed"); - // still holding button for 3000 ms, reset settings, code not ideaa for production - delay(3000); // reset delay hold - if( digitalRead(PIN_BUTTON_2) == LOW ){ - Serial.println("Button Held"); - Serial.println("Erasing Config, restarting"); - wm.resetSettings(); - SPIFFS.remove(JSON_CONFIG_FILE); //Borramos fichero - ESP.restart(); - } - } - } +void reset_configurations() { + Serial.println("Erasing Config, restarting"); + wm.resetSettings(); + SPIFFS.remove(JSON_CONFIG_FILE); //Borramos fichero + ESP.restart(); } diff --git a/src/wManager.h b/src/wManager.h index 1cb725a..71a6eb6 100644 --- a/src/wManager.h +++ b/src/wManager.h @@ -1,10 +1,5 @@ -//Botón configuración -#define PIN_BUTTON_1 0 -#define PIN_BUTTON_2 14 #define PIN_ENABLE5V 15 void init_WifiManager(); void wifiManagerProcess(); -void checkResetConfigButton(); -void checkRemoveConfiguration(); - +void reset_configurations(); \ No newline at end of file