Routage d'effet audio contrôlé par un Arduino Nano

Bonjour à tous, j'espère que vous allez bien.

Est ce que quelqu'un parmi vous a une suggestion pour détecter le front montant d'une variable ?

Voici une image concrète de mon problème :


Ce sont les allés retours entre 0 et 1 de la variable F1 que j'aimerais corriger.

Voici le code :

// Constantes d'entrées :
const int IN1 = A5;     // Défini IN1 comme entrée

// Définition des variables :
//  FX1
int val_IN1 = 0;    // Valeur de l'entrée analogique allant de 0 à 1023
int bf1 = 0;        // Valeur du bouton poussoir en fonction de la valeur de l'entrée analogique
int f1 = 0;         // état des FX1, 2 et 3 en fonction des boutons poussoirs
int f1_prec = 0;    // état précédent des bus FX pour les ramener à 0 en cas d'activation d'un bus déjà activé

long time = 0;      // the last time the output pin was toggled
long debounce = 200;// the debounce time, increase if the output flickers

void setup()
{
Serial.begin(9600);
pinMode(IN1, INPUT);
}

void loop()
{
// Test du programme :
int sensorValue = analogRead(IN1);
float volt = sensorValue * (5.0 / 1023.0);
float val = sensorValue;
Serial.println(f1);

// Lecture de l'état des entrées :
val_IN1 = analogRead(IN1); // La valeur de IN1 dépend de la lecture analogique de IN1


// Valeur du bouton poussoir de FX1 en fonction de la valeur de la tension lue sur IN1 :
if (val_IN1 > 950                  && millis() - time > debounce) {bf1 = 1;}
if (val_IN1 > 750 && val_IN1 < 850 && millis() - time > debounce) {bf1 = 2;}
if (val_IN1 > 570 && val_IN1 < 670 && millis() - time > debounce) {bf1 = 3;}
if (val_IN1 > 430 && val_IN1 < 530 && millis() - time > debounce) {bf1 = 4;}
if (val_IN1 > 310 && val_IN1 < 410 && millis() - time > debounce) {bf1 = 5;}
if (val_IN1 > 200 && val_IN1 < 300 && millis() - time > debounce) {bf1 = 6;}
if (val_IN1 > 80  && val_IN1 < 180 && millis() - time > debounce) {bf1 = 7;}
if (val_IN1 < 50                   && millis() - time > debounce) {bf1 = 0;}

// Modification de la valeur de FX1 en fonction du boutton poussoir qui est appuyé et de l'état précédent de FX1 (toggle mode):
//Si BP FX1 = X,alors FX1 = X Si BP FX1 = X ET que l'état précédent était à X, alors FX1 = 0
if (bf1 == 1)  {f1 = 1;}      if (bf1 == 1  &&         f1_prec == 1)             {f1 = 0;}
if (bf1 == 2)  {f1 = 2;}      if (bf1 == 2  &&         f1_prec == 2)             {f1 = 0;}
if (bf1 == 3)  {f1 = 3;}      if (bf1 == 3  &&         f1_prec == 3)             {f1 = 0;}
if (bf1 == 4)  {f1 = 4;}      if (bf1 == 4  &&         f1_prec == 4)             {f1 = 0;}
if (bf1 == 5)  {f1 = 5;}      if (bf1 == 5  &&         f1_prec == 5)             {f1 = 0;}
if (bf1 == 6)  {f1 = 6;}      if (bf1 == 6  &&         f1_prec == 6)             {f1 = 0;}
if (bf1 == 7)  {f1 = 7;}      if (bf1 == 7  &&         f1_prec == 7)             {f1 = 0;}

if (f1 == 0){f1_prec = 0;}
if (f1 == 1){f1_prec = 1;}
if (f1 == 2){f1_prec = 2;}
if (f1 == 3){f1_prec = 3;}
if (f1 == 4){f1_prec = 4;}
if (f1 == 5){f1_prec = 5;}
if (f1 == 6){f1_prec = 6;}
if (f1 == 7){f1_prec = 7;}
}

Merci à tous pour vos suggestions et bonne journée,

Jérôme.