#include <Servo.h>
Servo servoAzimut;
Servo servoElevation;
int ldrPins[] = {A0, A1, A2, A3}; // Broches analogiques pour les 4 LDR
int joystickX = A4; // Connectez l'axe X du joystick à l'entrée analogique A4
int joystickY = A5; // Connectez l'axe Y du joystick à l'entrée analogique A5
int switchPin1 = 7; // Connectez une broche de l'interrupteur à la broche 7 de l'Arduino
int switchPin2 = 8; // Connectez une autre broche de l'interrupteur à la broche 8 de l'Arduino
bool manualControl = false;
int lastAzimutAngle = 0; // Stocke le dernier angle de l'azimut
int lastElevationAngle = 0; // Stocke le dernier angle de l'élévation
void setup() {
servoAzimut.attach(9); // Connectez le servomoteur azimut à la broche 9
servoElevation.attach(10); // Connectez le servomoteur élévation à la broche 10
pinMode(switchPin1, INPUT_PULLUP); // Configure la première broche de l'interrupteur comme une entrée avec une résistance de pull-up interne
pinMode(switchPin2, INPUT_PULLUP); // Configure la deuxième broche de l'interrupteur comme une entrée avec une résistance de pull-up interne
}
void loop() {
// Vérifie si l'interrupteur est en position ON
if (digitalRead(switchPin1) == LOW && digitalRead(switchPin2) == HIGH) {
// Si l'interrupteur est en position ON, passer en mode manuel
manualControl = true;
} else {
// Si l'interrupteur est en position OFF, passer en mode automatique
manualControl = false;
}
if (!manualControl) {
// Mode automatique : Suivi du soleil en fonction des données des 4 LDR
int ldrValues[4];
// Lire les valeurs des 4 LDR
for (int i = 0; i < 4; i++) {
ldrValues[i] = analogRead(ldrPins[i]);
}
// Calculer les angles en fonction des valeurs des LDR
int azimutAngle = map(ldrValues[0] - ldrValues[1], -1023, 1023, -90, 90); // Différence entre les deux capteurs pour l'azimut
int elevationAngle = map(ldrValues[2] - ldrValues[3], -1023, 1023, -90, 90); // Différence entre les deux autres capteurs pour l'élévation
// Déplacer les servomoteurs selon les angles calculés
servoAzimut.write(90 + azimutAngle); // Ajouter 90 pour avoir une plage de 0 à 180 degrés
servoElevation.write(90 + elevationAngle); // Ajouter 90 pour avoir une plage de 0 à 180 degrés
} else {
// Mode manuel : Contrôle des panneaux solaires à l'aide du joystick
int xValue = analogRead(joystickX); // Lire la valeur de l'axe X du joystick
int yValue = analogRead(joystickY); // Lire la valeur de l'axe Y du joystick
// Convertir les valeurs du joystick en angles pour les servomoteurs
int azimutAngle = map(xValue, 0, 1023, 0, 180);
int elevationAngle = map(yValue, 0, 1023, 0, 180);
// Déplacer les servomoteurs selon les angles du joystick
servoAzimut.write(azimutAngle);
servoElevation.write(elevationAngle);
}
delay(15); // Petite pause pour laisser le servomoteur se déplacer
}