// ***********************************************
// ** Corrigé du TP Joystick / Servo / Buzzer **
// ** 1ST4 - 09/01/2025 **
// ***********************************************
// Appel de la bibliothèque "Servo"
#include <Servo.h>
// Attribution d'un nom symbolique aux broches
#define pinJoyX A0
#define pinJoyY A1
#define pinBouton 8
#define pinServo 9
#define pinLedVerte 2
#define pinLedRouge 3
#define pinBuzzer 10
// Création de l'objet "monServo"
Servo monServo;
void setup() {
// Déclaration des entrées
pinMode(pinJoyX, INPUT);
pinMode(pinJoyY, INPUT);
pinMode(pinBouton, INPUT_PULLUP);
// Déclaration des sorties
pinMode(pinLedVerte, OUTPUT);
pinMode(pinLedRouge, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
monServo.attach(pinServo);
// Configuration du moniteur série
Serial.begin(115200);
Serial.println("Programme Joystick / Servo");
}
void loop() {
// Lecture des infos du joystick
int x = analogRead(pinJoyX);
int y = analogRead(pinJoyY);
boolean bouton = !digitalRead(pinBouton); // ! -> inversion logique 0 <-> 1
// Affichage sur le moniteur série
Serial.print("X = ");
Serial.print(x);
Serial.print(" - Y = ");
Serial.print(y);
Serial.print(" - Bouton = ");
Serial.print(bouton);
// Calcul de l'angle du servo
int angle = map(x,0,1023,30,150);
monServo.write(angle);
Serial.print(" - Angle = ");
Serial.print(angle);
Serial.println(" ");
// Commande des LED - Tests sur la valeur de y
if (y <= 487) { // Allumage de la LED rouge seule quand Y vers le bas
digitalWrite(pinLedRouge, HIGH);
digitalWrite(pinLedVerte, LOW);
}
else if (y >= 537) { // Allumage de la LED verte seule quand Y vers le haut
digitalWrite(pinLedVerte, HIGH);
digitalWrite(pinLedRouge, LOW);
}
else { // Extinction des 2 LEDs
digitalWrite(pinLedVerte, LOW);
digitalWrite(pinLedRouge, LOW);
}
// Commande du buzzer par le bouton
if(bouton == 1) {
tone(pinBuzzer, 500);
}
else {
noTone(pinBuzzer);
}
// Le petit délai qui fait plaisir
delay(10);
}