/* * PiepPattern.cpp * * Created on: 25.02.2020 * Author: flori */ #include "main.h" #include "PiepPattern.h" #include "PiepMode.h" #define SERIAL_PRINT(x) // Serial.print(" "); Serial.print(x) #define STANDBY 0 #define ON 1 /** * */ PiepPattern::PiepPattern() { requestCount = 0; numberModes = 0; counter = 0; modeIndex = 0; startRequest = false; stopRequest = false; state = STANDBY; outPin = 13; piepModes = NULL; } /** * */ IRAM_ATTR void PiepPattern::Start(uint8_t outPin) { startRequest = true; this->outPin = outPin; state = STANDBY; } /** * */ IRAM_ATTR void PiepPattern::Stop() { stopRequest = true; } /** * */ IRAM_ATTR void PiepPattern::TaskCyclic() { switch (state) { case STANDBY: SERIAL_PRINT("STDBY"); stopRequest = false; if (startRequest) { startRequest = false; counter = 0; modeIndex = 0; if (numberModes > 0) { state = ON; piepModes[modeIndex]->Start(outPin); piepModes[modeIndex]->TaskCyclic(); } } break; case ON: SERIAL_PRINT(modeIndex); SERIAL_PRINT(piepModes[modeIndex]->onTime); startRequest = false; piepModes[modeIndex]->TaskCyclic(); if (stopRequest) { piepModes[modeIndex]->Stop(); state = STANDBY; } else { if (piepModes[modeIndex]->HasCompleted()) { if (++modeIndex < numberModes) { piepModes[modeIndex]->Start(outPin); } else if ( requestCount == 0) { modeIndex = 0; piepModes[modeIndex]->Start(outPin); } else if ( ++counter < requestCount ) { modeIndex = 0; piepModes[modeIndex]->Start(outPin); } } } break; default: Serial.print(state); break; } }