/* ************************************
** Pilotage d'un servomécanisme **
** par un Joystick + LED + Buzzer **
************************************
*/
// Appel des bibliothèques
#include <Servo.h>
// Attribution d'un nom explicite aux broches
#define pinServo 9
#define pinBuzzer 10
#define pinLedVerte 4
#define pinLedRouge 3
#define pinJoystickX A0
#define pinJoystickY A1
#define pinBouton 2
// Création de l'objet servo de type Servo
Servo servo;
void setup() {
// Déclaration des broches en sorties
pinMode(pinLedVerte,OUTPUT);
pinMode(pinLedRouge,OUTPUT);
pinMode(pinBuzzer,OUTPUT);
// Déclaration des broches en entrées
pinMode(pinJoystickX,INPUT);
pinMode(pinJoystickY,INPUT);
pinMode(pinBouton,INPUT_PULLUP);
// Déclaration du servo
servo.attach(pinServo);
// Initialisation de la liaison Série
Serial.begin(115200);
// Animation d'initialisation
digitalWrite(pinLedVerte,HIGH);
digitalWrite(pinLedRouge,HIGH);
servo.write(90);
delay(900);
tone(pinBuzzer,1000);
delay(100);
digitalWrite(pinLedVerte,LOW);
digitalWrite(pinLedRouge,LOW);
noTone(pinBuzzer);
// Fin animation
}// Fin setup()
void loop() {
// Lecture des paramètres du joystick
int joyX = analogRead(pinJoystickX);
int joyY = analogRead(pinJoystickY);
boolean bouton = !digitalRead(pinBouton); // ! pour inversion de logique (bouton NF)
// Affichage des infos sur le moniteur série
Serial.print("Joystick : X=");
Serial.print(joyX);
Serial.print(" ; Y=");
Serial.print(joyY);
Serial.print(" ; Bouton : ");
Serial.print(bouton);
// Commande du servo à partir de JoyX
int angle=map(joyX,0,1023,30,150);
servo.write(angle);
// Ecriture su moniteur série
Serial.print(" ; Servo : Angle=");
Serial.println(angle);
// Commande des LEDs à partir de joyY
if (joyY<487) { // LED rouge allumée
digitalWrite(pinLedRouge,HIGH);
digitalWrite(pinLedVerte,LOW);
}
else if (joyY>537) { // LED verte allumée
digitalWrite(pinLedRouge,LOW);
digitalWrite(pinLedVerte,HIGH);
}
else { // LED éteintes
digitalWrite(pinLedRouge,LOW);
digitalWrite(pinLedVerte,LOW);
}
// Commande du buzzer à partir du bouton du joystick
if (bouton == HIGH) { // Bouton appuyé
tone(pinBuzzer, 1000); // Frequence de 1000 Hz
}
else { // Bouton relâché
noTone(pinBuzzer);
}
// Petite pause...
delay(50);
}// Fin loop()