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.
