Potentiomètre et boutons via VirtualWire

Bonjour à tous.

Alors voilà, je souhaite réaliser une télécommande HF 433Mhz comportant 6 boutons et un potentiomètre.
Pour ce qui est des boutons j’ai fait le début du programme et ça marche.

Je voulais savoir si il est possible de gérer un potentiomètre en parallèle avec les boutons et si oui comment?

J’ai fait plusieurs tentatives mais toutes se sont soldées par un échec. (Boutons qui ne marchaient plus par exemple)

Code pour l’émetteur:

#include <VirtualWire.h>

bool Bouton1 = false ;
bool Bouton2 = false ;
bool Bouton3 = false ;
bool Bouton4 = false ;
bool Bouton5 = false ;
bool Bouton6 = false ;


int valeur = 0;

void setup() {
  pinMode(11, OUTPUT);

  pinMode(2, OUTPUT);

  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);

  vw_set_ptt_inverted(true);
  vw_set_tx_pin(12);
  vw_setup(4000);

}

void loop() {

  digitalWrite(11, HIGH);

  Bouton1 = digitalRead(3);
  Bouton2 = digitalRead(4);
  Bouton3 = digitalRead(5);
  Bouton4 = digitalRead(6);
  Bouton5 = digitalRead(7);
  Bouton6 = digitalRead(8);

  if (Bouton1 == true) {
    valeur = 1;
    digitalWrite(2, HIGH);
  }
  if (Bouton2 == true) {
    valeur = 2;
    digitalWrite(2, HIGH);
  }
  if (Bouton3 == true) {
    valeur = 3;
    digitalWrite(2, HIGH);
  }
  if (Bouton4 == true) {
    valeur = 4;
    digitalWrite(2, HIGH);
  }
  if (Bouton5 == true) {
    valeur = 5;
    digitalWrite(2, HIGH);
  }
  if (Bouton6 == true) {
    valeur = 6;
    digitalWrite(2, HIGH);
  }
  
  if (Bouton1 == false && Bouton2 == false && Bouton3 == false && Bouton4 == false && Bouton5 == false && Bouton6 == false) {
    valeur = 0;
    digitalWrite(2, LOW);
  }

  vw_send((byte *) &valeur, sizeof(valeur)); // On envoie le message
  vw_wait_tx(); // On attend la fin de l'envoi
}

Code pour le récepteur :

#include <VirtualWire.h>


void setup() {
  Serial.begin(9600);

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);

pinMode(13, OUTPUT);
digitalWrite(13, LOW);

  vw_set_ptt_inverted(true); // Required for DR3100
  vw_set_rx_pin(11);
  vw_setup(4000);
  vw_rx_start(); // On peut maintenant recevoir des messages


}

void loop() {

  int valeur;
  byte taille_message = sizeof(int);

 
  vw_wait_rx();

  if (vw_get_message((byte *) &valeur, &taille_message)) {
    // On copie le message, qu'il soit corrompu ou non

    if (valeur == 1) digitalWrite(2, HIGH);
    if (valeur == 2) digitalWrite(3, HIGH);
    if (valeur == 3) digitalWrite(4, HIGH);
    if (valeur == 4) digitalWrite(5, HIGH);
    if (valeur == 5) digitalWrite(6, HIGH);
    if (valeur == 6) digitalWrite(7, HIGH);
    if (valeur == 0) {
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
    }
    Serial.println(valeur); 
  }
}

Vous devriez utiliser des tableaux pour gérer vos boutons plutôt que de dupliquer tout ce code (tiliser HIGH et LOW et true et false sans les mélanger, apprenez à être précis sur les types ça vous servira toujours dans le futur)

le potentiomètre c’est similaire, mais vous devez lire la valeur et l’envoyer. La question c’est du comment allez vous dire au récepteur que c’est le potentiomètre qui vaut 6 plutôt que le bouton 6 qui est appuyé —> votre message doit être un peu plus riche et vous devriez envoyer une paire de valeurs : le N° de l’objet à toucher par exemple de 1 à 6 pour les boutons et 7 pour le potentiomètre et la valeur courante donc HIGH ou LOW pour les boutons et la valeur du potentiomètre pour l’entree 7