/* 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)
}
/*============================================================================*/