/** ****************************************************************************************
* \mainpage FSM_Pulsante_OOP_v10
*
* @brief Esempio di implementazione FSM per la gestione
* di un pulsante
*
* https://wokwi.com/projects/422171332361372673
* https://www.planttext.com/?text=XLNBRjim4BmRy3_iBIs2G8g1N5AaY6EfZL4vJlr0qPF1M5jvKPeqHCf0ypKzzZ_oOoMfXqN5JawITsTdPsT9-LPfbkjYo_kzCnWMMcuPC311JV2B19b7Ig1f9s4YPOwmmnmuWmoL9YdGPWi1ku8h9ZHQbhKK5h6JIj4JST8lVoqg9uvxPXboD1af2BO5DymSeHtaXSWsbiXoVI-OI2Ke0XGwPo2GS-daITWJclweC2j8C-1dxDafiiW_jjWGcngXwDaHCmwYaFkwN4aX0JMjDwXD06lTvf5IoMHIbeHfJNjc6HM2CAYNVqwlQOHcUA_441nweaKoPwhfmwgPhCivNiCNuytE-7f7dEMfjAc8QNODbs4G3e91EBYgAgBuRhfy6CMhA4w6F-46hi9F40GmCtERIkjkYa-o46i44h0bpacXKsNBa-d3rzNZB9xFLujxyxYV9f4XkGp3acOkCqwitcoz2NIROCS8Hybuz6sr64_YwN9HCZcY1MrH5jen4OSrf_Nlr_Nzdd9-ZwCahj-TkZXQpOO_Eg7wvs68GsooJ1RZbLDp2CxY91vs2njClsVRmdLvIY0eHOwCT_ech98N5v_RWWoOrADr1LDBuATg7ZjxFhUNwSD77zEYSrHHjQg6iWkk59AQ8KVcTtslOpkVKvPXxjh4UnDz4pRQC97XAvmlFWZQejeORnNUcCVnxNKwU295rZAvapy-yobGEL73s0pbuHiLRui-NlE6yguJhm_Q-VbfLALzOh-C8rlHYFShh9B3IU_twlUkLx587KtZsJ5WsREQkMbu6javAmtmtPFk8LlyzbmT1pLtmKrHVM2Q0tBIFxiJtxuJUF_wUw2knRSeKlT7-Hy0
*
*
TODO aggiungere i metodi click, longPress, ...
* @author Filippo Bilardo
* @version 1.0 10/02/25 Versione iniziale
*/
#include "Pulsante.h"
#include "Led.h"
//-----------------------------------------------------------------------------
//Istanze degli oggetti Led e Pulsante
LED ledRed(13);
LED ledYellow(11);
LED ledGreen(9);
LED ledBlue(7);
Pulsante pRed(12);
Pulsante pYellow(10);
Pulsante pGreen(8);
Pulsante pBlue(2);
//-----------------------------------------------------------------------------
// Implementazione delle funzioni di callback per i vari eventi.
void onPress(Pulsante& button) {Serial.println("Press Event Triggered");}
void onChange(Pulsante& button) {Serial.println("Change Event Triggered");}
void onLongPress(Pulsante& button) {Serial.println("Long Press Event Triggered");}
void onMultiClick(Pulsante& button) {
int clickCount = button.getClickCount();
if (clickCount == 1) {
Serial.println("Single Click Event Triggered");
} else if (clickCount == 2) {
Serial.println("Double Click Event Triggered");
} else if (clickCount == 3) {
Serial.println("Triple Click Event Triggered");
} else if (clickCount > 3) {
Serial.print(clickCount);
Serial.println(" Click Event Triggered");
}
}
void onRelease(Pulsante& button) {Serial.println("Release Event Triggered");}
void onLongClick(Pulsante& button) {Serial.println("Long Click Event Triggered");}
void toggleLedRed(Pulsante& button) {ledRed.inverti();}
void LedRedBlink(Pulsante& button) {
int clickCount = button.getClickCount();
if(clickCount>1) ledRed.lampeggia(clickCount*3, 200);
}
void toggleLedYellow(Pulsante& button) {ledYellow.inverti();}
void toggleLedGreen(Pulsante& button) {ledGreen.inverti();}
void setup() {
Serial.begin(9600);
ledRed.lampeggia(4,100);
ledYellow.lampeggia(4,50);
ledGreen.test(4);
ledBlue.test(4);
pRed.setLongPressCallback(toggleLedRed);
pRed.setMultiClickCallback(LedRedBlink);
pYellow.setMultiClickCallback(toggleLedYellow);
pGreen.setChangeCallback(toggleLedGreen);
pBlue.setPressCallback(onPress);
pBlue.setChangeCallback(onChange);
pBlue.setLongPressCallback(onLongPress);
pBlue.setMultiClickCallback(onMultiClick);
pBlue.setReleaseCallback(onRelease);
pBlue.setLongClickCallback(onLongClick);
}
void loop() {
pRed.update();
pYellow.update();
pGreen.update();
pBlue.update();
}