/*----------------------------------------------------------------------*/
//
// Esempio dell'uso di due timer con Esp32
// Sockets (A.Barone 24 Settembre 2025)
//
/*----------------------------------------------------------------------*/



hw_timer_t *timer_1ms = NULL;
hw_timer_t *timer_2s = NULL;

bool temp = false;
bool temp2 = false;

#define LED1 05
#define LED2 18

void IRAM_ATTR onTimer_1ms() // un microsecondo
{
if( temp == false )
digitalWrite(LED1, LOW);
else
digitalWrite(LED1, HIGH);

temp = !temp;
}

bool in1 = false;
bool in1_old = false;
int contatore = 0;
int conta_cicli = 0;

/*
void IRAM_ATTR onTimer_2s() // un microsecondo
{
in1 = digitalRead(12);
if( in1 != in1_old )
{
contatore++;
in1_old = in1;
}
conta_cicli++;
}
*/
void IRAM_ATTR onTimer_2s() // un microsecondo
{
if( temp2 == false )
digitalWrite(LED2, LOW);
else
digitalWrite(LED2, HIGH);

temp2 = !temp2;
}


void setup() {
// put your setup code here, to run once:

Serial.begin(9600); // inizializzazione della seriale di monitor

// inizializzazione dei led
pinMode(LED1, OUTPUT); // blinking Led
pinMode(LED2, OUTPUT); // led di segnalazione attività di campionamento
pinMode(12, INPUT); // led di segnalazione attività di campionamento

digitalWrite(LED1, HIGH); //spegnimento led (condizione Iniziale)
digitalWrite(LED2, HIGH); //spegnimento led (condizione Iniziale)
 

timer_1ms = timerBegin(1000000);
timerAttachInterrupt(timer_1ms, &onTimer_1ms);
timerAlarm(timer_1ms, 1000000, true, 0);

timer_2s = timerBegin(1000000);
timerAttachInterrupt(timer_2s, &onTimer_2s);
timerAlarm(timer_2s, 200000, true, 0);

}

int portata = 2;

void loop() {

if (conta_cicli == 50)
{
int volume = contatore * portata;
contatore = 0;
bool in1 = false;
bool in1_old = false;
}
}