/* UD5.LAB7A - Monostabile */




/*============================== CONFIGURAZIONI ==============================*/
#define PIN_RED_BTN 4					//PIN utilizzati su Arduino per collegare
#define PIN_RED_LED 2					//"wokwi-pushbutton" e "wokwi-led"

#define TIMER 5000					//Durata del tempo di accensione del LED in
									//millisecond
/*============================================================================*/




/*============================ VARIABILI GLOBALI =============================*/
unsigned long timerStart = 0;			//Dichiaro e inizializzo una variabile utile
									//a misurare la durata dell'accensione del
									//"wokwi-led"
/*============================================================================*/




/*=========================== FUNZIONI PRINCIPALI ============================*/
void setup() {
	pinMode(PIN_RED_BTN,INPUT_PULLUP);	//PIN_BTN1 accetta segnali in ingresso e la
  									//sua resistenza di pullup è attiva
  
	pinMode(PIN_RED_LED,OUTPUT);		//PIN_LED1 emette segnali in uscita
}


void loop() {
	int btn1 = !digitalRead(PIN_RED_BTN);	//Con resistenza di pullup attiva si ha
  										//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(btn1) {							//Se la variabile btn1 è vera ("1 logi- 
		digitalWrite(PIN_RED_LED,HIGH);	//co"), PIN_LED1 viene portato su HIGH e
										//il "wokwi-led" si accende.
		
		timerStart = 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() - timerStart > TIMER) {	//Se la differenza tra il tempo di ac-
		digitalWrite(PIN_RED_LED,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)
}
/*============================================================================*/