#include <Servo.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Largeur de l'écran en pixels
#define SCREEN_HEIGHT 64 // Hauteur de l'écran en pixels
#define BUTTON_Droite 3 // Broche du bouton poussoir pour tourner servo à droite
#define BUTTON_Centre 2 // Broche du bouton poussoir pour tourner servo à centre
#define BUTTON_Gauche 4 // Broche du bouton poussoir pour tourner servo à gauche
#define OLED_RESET -1 // Réinitialisation de l'écran -1 si inutilisé
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Servo monServo; // Déclaration de l'objet Servo
int servoSpeed = 10; // Vitesse du servo (plus la valeur est grande, plus le servo sera lent)
void setup() {
pinMode(BUTTON_Droite, INPUT_PULLUP); // Configurer la broche du bouton poussoir droite en entrée avec une résistance de tirage vers le haut
pinMode(BUTTON_Centre, INPUT_PULLUP); // Configurer la broche du bouton poussoir centre en entrée avec une résistance de tirage vers le haut
pinMode(BUTTON_Gauche, INPUT_PULLUP); // Configurer la broche du bouton poussoir gauche en entrée avec une résistance de tirage vers le haut
monServo.attach(9); // Attacher le servo à la broche 9 de l'Arduino Uno
Serial.begin(9600); // Initialise la communication série
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Adresse I2C par défaut pour l'écran 0x3C
Serial.println(F("SSD1306 allocation failed"));
for (;;)
;
}
display.display(); // Affiche le contenu (vide) de l'écran
delay(2000); // Pause de 2 secondes
display.clearDisplay(); // Efface l'écran
}
void loop() {
// Contrôle du servo par boutons
if (digitalRead(BUTTON_Droite) == LOW) { // Si le bouton droit est enfoncé
for (int angle = monServo.read(); angle <= 180; angle++) {
monServo.write(angle); // Faire tourner le servo à droite
delay(servoSpeed); // Attendre un petit moment pour ralentir le servo
}
}
if (digitalRead(BUTTON_Centre) == LOW) { // Si le bouton centre est enfoncé
for (int angle = monServo.read(); angle >= 90; angle--) {
monServo.write(angle); // Faire tourner le servo vers le centre
delay(servoSpeed); // Attendre un petit moment pour ralentir le servo
}
for (int angle = monServo.read(); angle <= 90; angle++) {
monServo.write(angle); // Faire tourner le servo vers le centre
delay(servoSpeed); // Attendre un petit moment pour ralentir le servo
}
}
if (digitalRead(BUTTON_Gauche) == LOW) { // Si le bouton gauche est enfoncé
for (int angle = monServo.read(); angle >= 0; angle--) {
monServo.write(angle); // Faire tourner le servo à gauche
delay(servoSpeed); // Attendre un petit moment pour ralentir le servo
}
}
// Affichage sur l'écran OLED
display.clearDisplay(); // Efface le contenu de l'écran
display.setTextSize(1); // Taille du texte
display.setTextColor(SSD1306_WHITE); // Couleur du texte
display.setCursor(0, 0); // Position du curseur
display.print("Position du servo : "); // Affiche le texte
display.println(monServo.read()); // Affiche l'angle actuel du servo
display.display(); // Affiche le contenu de l'écran
delay(100); // Délai pour rafraîchir l'écran
}