/* UD5.LAB7A - Monostabile */
/*============================== CONFIGURAZIONI ==============================*/
#define PIN_BTN_RED1 5 //PIN utilizzati su Arduino per collegare
#define PIN_BTN_GRN1 4 //"wokwi-pushbutton" e "wokwi-led"
#define PIN_LED_RED1 3
#define PIN_LED_GRN1 2
#define TIMER_RED1 2000 //Durata del tempo di accensione del LED in
#define TIMER_GRN1 2000 //millisecondi
/*============================================================================*/
/*============================ VARIABILI GLOBALI =============================*/
unsigned long timerStartRed1 = 0; //Dichiaro e inizializzo una variabile utile
unsigned long timerStartGrn1 = 0; //a misurare la durata dell'accensione del
//"wokwi-led"
/*============================================================================*/
/*=========================== FUNZIONI PRINCIPALI ============================*/
void setup() {
pinMode(PIN_BTN_RED1,INPUT_PULLUP); //PIN_BTN1 accetta segnali in ingresso e la
pinMode(PIN_BTN_GRN1,INPUT_PULLUP); //sua resistenza di pullup è attiva
pinMode(PIN_LED_RED1,OUTPUT); //PIN_LED1 emette segnali in uscita
pinMode(PIN_LED_GRN1, OUTPUT);
}
void loop() {
int btnRed1 = !digitalRead(PIN_BTN_RED1); //Con resistenza di pullup attiva si ha
int btnGrn1 = !digitalRead(PIN_BTN_GRN1); //PIN_BTN1 normalmente HIGH ("1 logico")
//Si desidera che "wokwi-pushbutton" re-
//stituisca normalmente uno "0 logico" e
//alla sua pressione corrisponda "1 lo-
//gico". Pertanto, si sfrutta la varia-
//bile btn1 inizializzandola con valore
//negato rispetto a quanto letto su
//PIN_BTN1.
if(btnRed1) { //Se la variabile btn1 è vera ("1 logi-
digitalWrite(PIN_LED_RED1,HIGH); //co"), PIN_LED1 viene portato su HIGH e
//il "wokwi-led" si accende.
timerStartRed1 = millis(); //Sfruttando la funzione millis(), si
//assegna alla variabile timerStart il
//valore dell'istante temporale in cui
//viene rilevata la pressione di "wokwi-
//pushbutton".
}
if(millis() - timerStartRed1 > TIMER_RED1) { //Se la differenza tra il tempo di ac-
digitalWrite(PIN_LED_RED1,LOW); //censione di Arduino e il valore della
} //variabile timerStart è maggiore di
//TIMER, PIN_LED1 viene portato su LOW e
//il "wokwi_led" si spegne.
if(btnGrn1) { //Se la variabile btn1 è vera ("1 logi-
digitalWrite(PIN_LED_GRN1,HIGH); //co"), PIN_LED1 viene portato su HIGH e
//il "wokwi-led" si accende.
timerStartGrn1 = millis(); //Sfruttando la funzione millis(), si
//assegna alla variabile timerStart il
//valore dell'istante temporale in cui
//viene rilevata la pressione di "wokwi-
//pushbutton".
}
if(millis() - timerStartGrn1 > TIMER_GRN1) { //Se la differenza tra il tempo di ac-
digitalWrite(PIN_LED_GRN1,LOW); //censione di Arduino e il valore della
} //variabile timerStart è maggiore di
//TIMER, PIN_LED1 viene portato su LOW e
//il "wokwi_led" si spegne.
delay(30); //Ritardo introdotto per evitare false
//pressioni di "wokwi-pushbutton"
//(debounce)
}
/*============================================================================*/