Bonsoir,
J'ai ce code pour faire d'un bouton poussoir un interrupteur ON / OFF
Il est fonctionnel et marche nickel.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const int buttonPin = 2;    //pin pour le bouton
const int ledPin =  13;     //pin pour la lED
 
int interrupteur = LOW;       //valeur de l'interrupeteur
int toggle = 0;             //valeur pour changement d'état du bouton
int buttonState = 0;        //etat fugitif du bouton    
 
 
void setup() {
  Serial.begin(9600);
  // Initialisation de la LED en sortie
  pinMode(ledPin, OUTPUT);     
  // Initialisation du bouton en entrée
  pinMode(buttonPin, INPUT);    
}
 
void loop(){
  // Lecture de l'état du bouton
  buttonState = digitalRead(buttonPin);
 
  //On regarde si le bouton est pressé
  if (buttonState == HIGH) {    
    //on regarde si il y a un changement d'état
    if (toggle == 1) {
      // on change l'état du bouton
      interrupteur=!interrupteur;
      // on reinitialise le toggle
      toggle=0;
      // on affiche l'état de l'interupteur virtuel sur la led
      digitalWrite(ledPin, interrupteur); 
    }  
  }   else {
    //le bouton n'est pas pressé, on active le toggle
    toggle=1;
  }
}
Ce que je voudrais c'est faire de ce code c'est une fonction afin de simplifier la vie si je manipule plusieurs boutons poussoirs en interrupteurs ON/OFF.

J'ai donc essayé de créer une fonction et ça me donne le code suivant, malheureusement, ça ne marche pas.
D'après le Serial.print, la valeur interrupteur reste bloquée sur 0.
Je dois avoir un problème de return (d'ailleurs elle ne retourne rien cette fonction...)
Donc si quelqu'un avait une petite idée elle serait bien venue

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
const int buttonPin = 2;    //pin pour le bouton
const int ledPin =  13;     //pin pour la lED
 
int interrupteur = LOW;       //valeur de l'interrupeteur
int toggle = 0;             //valeur pour changement d'état du bouton
int buttonState = 0;        //etat fugitif du bouton    
 
 
void setup() {
  Serial.begin(9600);
  // Initialisation de la LED en sortie
  pinMode(ledPin, OUTPUT);     
  // Initialisation du bouton en entrée
  pinMode(buttonPin, INPUT);    
}
 
void loop(){
  onOffSwitch(ledPin, buttonPin, toggle, interrupteur);   
}
 
 
int  onOffSwitch(int ledPin, int buttonPin, int toggle, int interrupteur) {
    buttonState = digitalRead(buttonPin);
 
   // DEBUG
    Serial.print("buttonState: ");
    Serial.println(buttonState);
 
    //On regarde si le bouton est pressé
      if (buttonState == HIGH) {           
    //on regarde si il y a un changement d'état
      if (toggle == 1) {
        // on change l'état du bouton
          interrupteur=!interrupteur;
        // on reinitialise le toggle
          toggle=0;
      // on affiche l'état de l'interupteur virtuel sur la led
      digitalWrite(ledPin, interrupteur); 
    }     
  } else {
    //le bouton n'est pas pressé, on active le toggle
    toggle=1;
  }
 
// DEBUG
Serial.print("ledPin : ");
Serial.println(ledPin) ;
Serial.print("buttonPin : ");
Serial.println(buttonPin) ;
Serial.print("toogle : "); 
Serial.println(toggle) ;
Serial.print("interrupteur : ");
Serial.println(interrupteur) ;
}
PS : je débute ....