/** ****************************************************************************************
* \mainpage LedFSM_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
*
* @author Filippo Bilardo
* @version 1.0 10/02/25 Versione iniziale
*/
#define LED1 26
#define LED2 27
#define LED3 25
void setup(void) {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop(void) {
led1Task(LED1);
led2Task(LED2, 600);
led3Task(LED3, 200);
//TODO altro task per scrittura sulla seriale
}
void led1Task(int ledPin) {
static unsigned long timerStart = millis();
unsigned long timerNow = millis();
if (timerNow - timerStart >= 1000) {
timerStart = timerNow;
digitalWrite(ledPin, !digitalRead(ledPin));
}
}
void led2Task(int ledPin, int durata) {
static unsigned long timerStart = millis();
unsigned long timerNow = millis();
int tempoTrascorso = timerNow - timerStart;
if (tempoTrascorso >= durata) {
timerStart = timerNow;
digitalWrite(ledPin, !digitalRead(ledPin));
}
}
void led3Task(int ledPin, int durata) {
static unsigned long timerStart = millis();
unsigned long timerNow = millis();
int tempoTrascorso = timerNow - timerStart;
if (tempoTrascorso >= durata) {
timerStart = timerNow;
digitalWrite(ledPin, !digitalRead(ledPin));
}
}