É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 poussoir 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

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. Ansi, l’état sera haut (1024) lorsque le bouton est relâché(0) et bas 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 was pressed")); 
  }else{ 
    Serial.println(F("Button was 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’éteind 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 moyenne glissante ou de debounce.

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