From 57b6142a31f0a9a0d6a18645d86eeef9f084dc3b Mon Sep 17 00:00:00 2001 From: willem Date: Fri, 17 Dec 2021 13:47:24 +0100 Subject: [PATCH] update --- FW/leo_muziekdoos_esp32/platformio.ini | 4 +- FW/leo_muziekdoos_esp32/src/audio.cpp | 3 +- FW/leo_muziekdoos_esp32/src/config.cpp | 4 +- FW/leo_muziekdoos_esp32/src/game.cpp | 5 ++- FW/leo_muziekdoos_esp32/src/led.cpp | 57 ++++++++++++++++++++++++++ FW/leo_muziekdoos_esp32/src/led.h | 12 ++++++ FW/leo_muziekdoos_esp32/src/main.cpp | 3 ++ FW/leo_muziekdoos_esp32/src/ota.cpp | 4 +- FW/leo_muziekdoos_esp32/src/power.cpp | 3 ++ FW/leo_muziekdoos_esp32/src/power.h | 1 + FW/leo_muziekdoos_esp32/src/rfid.cpp | 2 +- FW/leo_muziekdoos_esp32/src/rfid.h | 2 +- FW/leo_muziekdoos_esp32/src/sensor.cpp | 27 +++++++----- FW/leo_muziekdoos_esp32/src/sensor.h | 4 +- 14 files changed, 110 insertions(+), 21 deletions(-) create mode 100644 FW/leo_muziekdoos_esp32/src/led.cpp create mode 100644 FW/leo_muziekdoos_esp32/src/led.h diff --git a/FW/leo_muziekdoos_esp32/platformio.ini b/FW/leo_muziekdoos_esp32/platformio.ini index 271ac9d..2f9f4ce 100644 --- a/FW/leo_muziekdoos_esp32/platformio.ini +++ b/FW/leo_muziekdoos_esp32/platformio.ini @@ -14,9 +14,11 @@ board = m5stack-atom framework = arduino lib_deps = bblanchon/ArduinoJson@^6.18.5 + fastled/FastLED@^3.4.0 monitor_speed = 115200 lib_ldf_mode = deep+ extra_scripts = ./littlefsbuilder.py build_flags = -DHARDWARE=2 - -DCORE_DEBUG_LEVEL=3 + -DCORE_DEBUG_LEVEL=4 + -DNDEF_DEBUG=1 \ No newline at end of file diff --git a/FW/leo_muziekdoos_esp32/src/audio.cpp b/FW/leo_muziekdoos_esp32/src/audio.cpp index e64b68f..b83aa8b 100644 --- a/FW/leo_muziekdoos_esp32/src/audio.cpp +++ b/FW/leo_muziekdoos_esp32/src/audio.cpp @@ -94,7 +94,8 @@ void initAudio() out = new AudioOutputI2S(); out->SetPinout(I2S_BCLK, I2S_WCLK, I2S_DATA); // bclk, wclk, data out->SetGain(AUDIOGAIN); - + pinMode(DAC_SDMODE, OUTPUT); + digitalWrite(DAC_SDMODE, HIGH); mp3 = new AudioGeneratorMP3(); audioInitOk = true; log_i("init Audio Done"); diff --git a/FW/leo_muziekdoos_esp32/src/config.cpp b/FW/leo_muziekdoos_esp32/src/config.cpp index c01d672..d938608 100644 --- a/FW/leo_muziekdoos_esp32/src/config.cpp +++ b/FW/leo_muziekdoos_esp32/src/config.cpp @@ -69,9 +69,9 @@ String getConfigSong(String uid) for (JsonVariant v : array) { String taguid((const char*)v["TagUID"]); - uint16_t result = uid.compareTo(taguid) + uint16_t result = uid.compareTo(taguid); - log_v("compare %s(config) with %s(read) = %d",taguid.c_Str(), uid.c_Str(), result); + log_v("compare %s(config) with %s(read) = %d",taguid.c_str(), uid.c_str(), result); if (!result) { String filename((const char*)v["audiofile"]); diff --git a/FW/leo_muziekdoos_esp32/src/game.cpp b/FW/leo_muziekdoos_esp32/src/game.cpp index 435773a..6afa308 100644 --- a/FW/leo_muziekdoos_esp32/src/game.cpp +++ b/FW/leo_muziekdoos_esp32/src/game.cpp @@ -58,9 +58,9 @@ void handleGame(void) setGameState(stateStartPlaying); log_i("nextState = Start playing"); } - if (timeNow - idleTime > TIMEOUT_IDLE) + else { - clearRFIDlastUID(); + setRFIDscanState(true); } } } @@ -88,6 +88,7 @@ void handleGame(void) { log_i("activeState = startPlaying"); newState = false; + setRFIDscanState(false); } if (hallIsIdle()) diff --git a/FW/leo_muziekdoos_esp32/src/led.cpp b/FW/leo_muziekdoos_esp32/src/led.cpp new file mode 100644 index 0000000..8634af2 --- /dev/null +++ b/FW/leo_muziekdoos_esp32/src/led.cpp @@ -0,0 +1,57 @@ +#include "led.h" + +CRGB leds[NUM_LEDS]; + +bool ledstate = false; +uint32_t lastLedTime = 0; + +void initLed(void) +{ + FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical + FastLED.setBrightness(80); +} + +void handleLed(void) +{ + uint32_t timeNow = millis(); + if (timeNow - lastLedTime > LEDTIMEOUT) + { + if (ledstate) + { + if (getPowerState() == POWERSTATES::on) + { + if(getAudioState()) + { + leds[0] = CRGB::Purple; + } + else if( getRFIDlastUID() != "") + { + leds[0] = CRGB::Yellow; + } + else + { + leds[0] = CRGB::Green; + } + } + else if (getPowerState() == POWERSTATES::poweringOn2) + { + leds[0] = CRGB::Blue; + } + else if (getPowerState() == POWERSTATES::poweringOff2) + { + leds[0] = CRGB::Orange; + } + else + { + leds[0] = CRGB::Red; + } + } + else + { + leds[0] = CRGB::Black; + } + FastLED.show(); + ledstate = !ledstate; + lastLedTime = timeNow; + } +} \ No newline at end of file diff --git a/FW/leo_muziekdoos_esp32/src/led.h b/FW/leo_muziekdoos_esp32/src/led.h new file mode 100644 index 0000000..7e469a6 --- /dev/null +++ b/FW/leo_muziekdoos_esp32/src/led.h @@ -0,0 +1,12 @@ +#pragma once +#include +#include "board.h" +#include "power.h" +#include "audio.h" +#include "rfid.h" + +#define NUM_LEDS 1 +#define LEDTIMEOUT 500 + +void initLed(void); +void handleLed(void); \ No newline at end of file diff --git a/FW/leo_muziekdoos_esp32/src/main.cpp b/FW/leo_muziekdoos_esp32/src/main.cpp index c35dd0d..d010ef3 100644 --- a/FW/leo_muziekdoos_esp32/src/main.cpp +++ b/FW/leo_muziekdoos_esp32/src/main.cpp @@ -8,6 +8,7 @@ #include "config.h" #include "ota.h" #include "game.h" +#include "led.h" uint32_t looptime = 0; @@ -26,6 +27,7 @@ void setup() initAudio(); initRfid(); initSensor(); + initLed(); initGame(); } @@ -34,6 +36,7 @@ void loop() looptime = millis(); handlePower(); + handleLed(); if (getPowerState() == POWERSTATES::on) { diff --git a/FW/leo_muziekdoos_esp32/src/ota.cpp b/FW/leo_muziekdoos_esp32/src/ota.cpp index 211f674..a49dd66 100644 --- a/FW/leo_muziekdoos_esp32/src/ota.cpp +++ b/FW/leo_muziekdoos_esp32/src/ota.cpp @@ -85,10 +85,12 @@ bool OtaProcess_class::initialize(void) case otaInitDone: { setProcessState(processIdle); + return true; } default: break; } + return false; } void OtaProcess_class::idle(void) @@ -98,7 +100,7 @@ void OtaProcess_class::idle(void) log_i("Otastate = Idle"); m_newState = false; } - if (m_otaState = otaInitDone) + if (m_otaState == otaInitDone) { ArduinoOTA.handle(); } diff --git a/FW/leo_muziekdoos_esp32/src/power.cpp b/FW/leo_muziekdoos_esp32/src/power.cpp index c5766e3..8007cf4 100644 --- a/FW/leo_muziekdoos_esp32/src/power.cpp +++ b/FW/leo_muziekdoos_esp32/src/power.cpp @@ -43,8 +43,10 @@ void powerOn(void) void powerOff(void) { log_w("poweringDown!"); + digitalWrite(DAC_SDMODE, LOW); digitalWrite(PWR_HOLD, LOW); delay(1000); + ESP.restart(); } bool measureBattery(void) @@ -146,6 +148,7 @@ void handlePowerState(void) if (buttonPower.pressedFor(POWERBUTTONDELAY)) { powerstate = poweringOff2; + setAudioState(false); log_w("poweringoff: 3/3 ==> powerOff"); } else if (buttonPower.pressedFor(500)) diff --git a/FW/leo_muziekdoos_esp32/src/power.h b/FW/leo_muziekdoos_esp32/src/power.h index efe3276..d9418ea 100644 --- a/FW/leo_muziekdoos_esp32/src/power.h +++ b/FW/leo_muziekdoos_esp32/src/power.h @@ -5,6 +5,7 @@ #include "JC_Button.h" #include "Battery.h" #include "sensor.h" +#include "audio.h" #define TIMEOUT_POWER (5 * 1000 * 60) //5minutes timeout diff --git a/FW/leo_muziekdoos_esp32/src/rfid.cpp b/FW/leo_muziekdoos_esp32/src/rfid.cpp index 66cf38d..40be3e0 100644 --- a/FW/leo_muziekdoos_esp32/src/rfid.cpp +++ b/FW/leo_muziekdoos_esp32/src/rfid.cpp @@ -26,7 +26,7 @@ void handleRfid() if (lastRFID - timeNow > RFIDINTERVAL && RfidScanActive) { log_i("scanning"); - if (nfc.tagPresent()) + if (nfc.tagPresent(100)) { NfcTag tag = nfc.read(); lastUid = tag.getUidString(); diff --git a/FW/leo_muziekdoos_esp32/src/rfid.h b/FW/leo_muziekdoos_esp32/src/rfid.h index b0335b3..1f119c1 100644 --- a/FW/leo_muziekdoos_esp32/src/rfid.h +++ b/FW/leo_muziekdoos_esp32/src/rfid.h @@ -9,7 +9,7 @@ #include "NfcAdapter.h" #define NDEF_SUPPORT_MIFARE_CLASSIC -#define RFIDINTERVAL 200 +#define RFIDINTERVAL 800 void initRfid(void); void handleRfid(void); diff --git a/FW/leo_muziekdoos_esp32/src/sensor.cpp b/FW/leo_muziekdoos_esp32/src/sensor.cpp index c8533c4..59f13bf 100644 --- a/FW/leo_muziekdoos_esp32/src/sensor.cpp +++ b/FW/leo_muziekdoos_esp32/src/sensor.cpp @@ -7,9 +7,10 @@ uint32_t lastVbatt = 0; uint16_t BatterySensor = 0; uint16_t HallSensor = 0; -uint32_t last_hall_read; -uint16_t last_hall_sample; -uint8_t hall_idle_count; +uint32_t last_hall_read=0; +uint16_t last_hall_sample=0; +uint16_t last_hall_Delta=0; +uint8_t hall_idle_count=0; bool hall_is_Idle = true; bool hallinitOK = false; @@ -38,11 +39,6 @@ bool getSensorInitStatus(void) void handleSensor(void) { uint32_t timeNow = millis(); - if (lastADS - timeNow > ADSINTERVAL) - { - HallSensor = ADS.readADC(HALL_INPUT); - lastADS = timeNow; - } if (lastVbatt - timeNow > VBATTINTERVALL - VBATTMEASPRECHARGE) { @@ -81,15 +77,26 @@ void handleHallSensor(void) uint32_t timeNow = millis(); if (timeNow - last_hall_read > HALLINTERVAL) { - uint16_t hall_sample = getHall(); + uint16_t hall_sample = ADS.readADC(HALL_INPUT); + bool skipfirstSample = false; + if(!last_hall_Delta) + { + skipfirstSample = true; + } uint16_t hall_delta = (last_hall_sample > hall_sample) ? (last_hall_sample - hall_sample) : (hall_sample - last_hall_sample); + hall_delta = (hall_delta + last_hall_Delta)/2; + last_hall_Delta = hall_delta; + if(skipfirstSample) + { + return; + } if (hall_delta > HALLIDLETHRESHOLD) { if (hall_idle_count > HALLIDLESAMPLES) { hall_is_Idle = false; hall_idle_count = HALLPLAYSAMPLES; - log_i("Game: playing"); + log_i("Game: playing, delta = %d",hall_delta); } else { diff --git a/FW/leo_muziekdoos_esp32/src/sensor.h b/FW/leo_muziekdoos_esp32/src/sensor.h index 75ffcae..c16ebab 100644 --- a/FW/leo_muziekdoos_esp32/src/sensor.h +++ b/FW/leo_muziekdoos_esp32/src/sensor.h @@ -3,12 +3,12 @@ #include "ADS1X15.h" #include "board.h" -#define ADSINTERVAL 250 +#define ADSINTERVAL 100 #define VBATTINTERVALL 1000 #define VBATTMEASPRECHARGE 250 #define HALLINTERVAL 100 -#define HALLIDLETHRESHOLD 4 +#define HALLIDLETHRESHOLD 5 #define HALLIDLESAMPLES 4 #define HALLPLAYSAMPLES 8