Étiquettes : , , ,

L’un des exemples les plus répandu quand on apprend la programmation avec Arduino est la gestion d’un bouton poussoir. En effet, une des fonctions les plus utiles à développer est de pouvoir interagir avec la carte Arduino. L’interface la plus minimaliste est un bouton en entrée et le moniteur série en sortie. De plus, les fonctionnalités que l’on peut développé sur un bouton poussoir peuvent être appliquées à de nombreux capteurs (interrupteur, capteur magnétique, RFID, etc.). Nous allons voir ici quelques unes de ces fonctionnalités.

Matériel

  • Ordinateur
  • Arduino UNO
  • Câble USB pour connecter l’Arduino à l’ordinateur
  • Bouton poussoir

Schéma de connexion

push-button-arduino_bb Gestion d'un bouton poussoir avec Arduino

Il y a différentes manières de brancher un bouton à la carte Arduino. La plus simple est de la brancher entre la masse et une entrée analogique de l’Arduino. Pour que la pression du bouton soit détectée correctement, nous allons ajouter une résistance de pullup disponible par le code. Ainsi, l’état sera haut (1024) lorsque le bouton est relâché et bas(0) lorsque le bouton est pressé.

Code de base

Dans cet exemple, nous allons détecté si le bouton est pressé ou non.

//Parameters 
const int btnPin  = A0; 
 
//Variables 
int btnVal  = 0; 

void setup(){ 
//Init Serial USB 
Serial.begin(9600); 
Serial.println(F("Initialize System")); 
//Init btn 
pinMode(btnPin,INPUT_PULLUP); 
} 

void loop() {
  ////Read pushbutton 
  btnVal=analogRead(btnPin); 
  Serial.print(btnVal); 
  Serial.print(F("-->")); 
  if(btnVal<200){ 
    Serial.println(F("Button is pressed")); 
  }else{ 
    Serial.println(F("Button is released")); 
  } 
  delay(100);
}

Le code va constamment lire l’entrée analogique et écrire « bouton pressé » ou « relâché » ce qui n’est pas très propre ni facile à debugger.

Code de détection de l’état du bouton

Une manière d’améliorer ce code est de rajouter une variable qui enregistre l’état du bouton. Ceci permet d’afficher le résultat une seule fois lorsque le bouton a changé d’état.

//Parameters 
const int btnPin  = A0; 
 
//Variables 
int btnVal  = 0; 
bool btnState  = false; 
bool oldbtnState  = false; 
 
void setup(){ 
//Init Serial USB 
Serial.begin(9600); 
Serial.println(F("Initialize System")); 
//Init btn 
pinMode(btnPin,INPUT_PULLUP); 
} 
 
void loop(){ 
testPushBtn(); 
} 
 
void testPushBtn( ){/* function testPushBtn */ 
////Read pushbutton 
btnVal=analogRead(btnPin); 
if(btnVal<200){ 
  btnState=true; 
  if(oldbtnState!=btnState) Serial.print(btnVal);Serial.print(F("-->"));Serial.println(F("Button was pressed")); 
}else{ 
  btnState=false; 
  if(oldbtnState!=btnState) Serial.print(btnVal);Serial.print(F("-->"));Serial.println(F("Button was released")); 
} 
oldbtnState=btnState; 
} 

Code pour transformer un bouton poussoir en interrupteur

Une fois l’état du bouton en mémoire, il est facile de transformer le bouton poussoir en interrupteur. Dans cet exemple, la LED s’allume lorsqu’on appuie sur le bouton et s’éteint lorsqu’on appuie de nouveau.

//Parameters
const int btnPin  = A0;
const int ledPin = 13;

//Variables
int btnVal  = 0;
bool btnState  = false;
bool oldbtnState  = false;
bool ledState  = LOW;


void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init btn
  pinMode(btnPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  testPushBtn();
}

void testPushBtn( ) { /* function testPushBtn */
  ////Read pushbutton
  btnVal = analogRead(btnPin);
  if (btnVal < 200) {
    btnState = true;
  } else {
    btnState = false;
  }
  
  if (oldbtnState != btnState) {
    if(btnState==true){
      Serial.print(F("Button was pressed")); Serial.print(F("-->")); Serial.print(F("LED "));
      ledState = !ledState;
      Serial.println(ledState);
      digitalWrite(ledPin, ledState);
    }
  }

  oldbtnState = btnState;
}

Mélanger et modifier ces exemple pour obtenir la fonctionnalité que vous désirez. Il est aussi nécessaire dans certains cas de rajouter des fonctions de d’anti-rebond.

Pour une gestion plus avancée du bouton poussoir, vous pouvez utiliser une interruption pour détecter l’état du bouton.

Application

  • Créer une interface minimaliste pour votre projet

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie