Ho inserito in uno Sketch funzionante delle righe di comando per leggere il dato ricevuto da un flussimetro tipo questo:

Basta che abilito la linea " //attachInterrupt (PIN_FLUSSO, impulso, RISING); // Interrupt pin D2" dove definisco i parametri dell'interrupt e lo installo sul Wemos, che il tutto non funziona più correttamente.
Il relè si attiva e disattiva ogni secondo.
Se poi abilito il monitor seriale vedo solo caratteri strani che scorrono velocemente.
Lo sketch è questo:
/**************** ? ***********
Test_sensore_IR_Fluss
1 febbraio 2022
Scheda: "LOLIN(WEMOS) D1 R2 & mini
Porta: "/dev/cu.wchusbserial1410"
Inserito flussometro
****************************************/
#define PIN_LED_Verde 12 // Pin D6 (GPIO12)
#define PIN_LED_Rosso 13 // Pin D7 (GPIO13)
#define PIN_SENSORE 14 // Pin D5 (GPIO14)
#define PIN_RELE 2 // Pin D4 (GPIO2)
#define PIN_FLUSSO 4 // Pin D2 (GPIO4)
const long T_RELE = 60000; // tempo di attrazione in mS
unsigned long t_on;
bool gatto_prec;
int flusso; // Acqua che scorre
volatile int count; // Variabile di conteggio
void setup(){
pinMode(PIN_LED_Verde, OUTPUT);
pinMode(PIN_LED_Rosso, OUTPUT);
pinMode(PIN_SENSORE, INPUT);
pinMode(PIN_RELE, OUTPUT);
pinMode(PIN_FLUSSO, INPUT);
digitalWrite(PIN_RELE, LOW);
digitalWrite(PIN_LED_Verde, HIGH);
digitalWrite(PIN_LED_Rosso, HIGH);
//attachInterrupt (PIN_FLUSSO, impulso, RISING); // Interrupt pin D2
Serial.begin(9600);
}
void Ostacolo(){
if (digitalRead(PIN_SENSORE) == HIGH && gatto_prec == LOW)
{
gatto_prec = HIGH;
t_on = millis();
digitalWrite(PIN_RELE, HIGH);
//Flusso();
//digitalWrite(PIN_LED_Verde, HIGH); // acceso
//digitalWrite(PIN_LED_Rosso, LOW); // spento
}
if (gatto_prec == HIGH && millis() - t_on > T_RELE)
{
digitalWrite(PIN_RELE, LOW);
//digitalWrite(PIN_LED_Verde, LOW); // acceso
//digitalWrite(PIN_LED_Rosso, HIGH); // spento
}
if(digitalRead(PIN_SENSORE) == LOW) gatto_prec = LOW;
}
void impulso(){
count = count + 1;
}
void Flusso(){
count = 0; //Resetta il conteggio
interrupts(); //Abilita gli interrupt
delay(1000);
noInterrupts(); //Disabilita gli interrupt
flusso = (count);
Serial.println (flusso);
if(flusso >= 100){
digitalWrite(PIN_LED_Verde, LOW); // acceso
digitalWrite(PIN_LED_Rosso, HIGH); // spento
Serial.println("Pompa attiva");
}
else{
digitalWrite(PIN_LED_Rosso, LOW);
digitalWrite(PIN_LED_Verde, HIGH);
Serial.println("Pompa non attiva");
}
}
void loop(){
Ostacolo();
}
Lello