Commander un servomoteur par deux bouton poussoirs

Portrait de GEEK

Il est possible de commander un servomoteur par deux boutons poussoirs chacun pour le faire progresser dans un sens ou dans l'autre avec des angles limites paramètrables par angle_mini, angle_maxi et la vitesse par Tempo (inverse de la vitesse).

Code :

/* Inclut la librairie Servo pour manipuler le servomoteur
Soit :
- deux boutons poussoirs raccordés entre le 0 Volt et la pin 2 pour l'un et la pin 3 pour l'autre.
- un servomoteur fil rouge sur le 5 Volt, fil marron sur le 0 volt et le jaune sur la pin 9.

*/

#include <Servo.h>

int bp1 = 2;
int bp2 = 3;
int angle_mini = 0;
int angle_maxi = 180;
int Tempo = 1;

int position;

/* Créer un objet Servo pour contrôler le servomoteur */
Servo monServomoteur;

void setup()
{
  // Bouton poussoir 1
  pinMode(bp1, INPUT_PULLUP);
  pinMode(bp2, INPUT_PULLUP);

  // Attache le servomoteur au 9
  monServomoteur.attach(9);
  position = monServomoteur.read(); //pour permettre d'être à l'arrêt initialement
  Serial.begin(230400);
  Serial.print("Position du servo : "); Serial.println(position);
}

void loop()
{
    // Si Appuie BP1
  if (digitalRead(bp1) == LOW) {
    position = position + 1;
    if (position > angle_maxi) {
      position = angle_maxi; // limitation angle maxi
    }
    else {
      Serial.print("Position du servo : "); Serial.println(position);
    }
    monServomoteur.write(position/2);
    delay(Tempo);
  }

  // Si Appuie BP2
  if (digitalRead(bp2) == LOW) {

    position = position - 1;
    if (position < angle_mini) { //limitation angle mini
      position = angle_mini;
    }
    else {
      Serial.print("Position du servo : "); Serial.println(position);
    }
    monServomoteur.write(position/2); //affichage de la position sur la console série
    delay(Tempo);
  }
}