1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| // Définition des pins pour les LEDs et les boutons
const int ledPins[] = {13, 12, 11, 10}; // Pins des LEDs
const int buttonPins[] = {9, 8, 7, 6}; // Pins des boutons
const int numLeds = 4;
const int numButtons = 4;
int currentFloor = -1; // Étage actuel
bool buttonsPressed[numButtons] = {false, false, false, false}; // État des boutons
void setup() {
// Initialiser les pins des LEDs comme sorties
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // S'assurer que toutes les LEDs sont éteintes au départ
}
for (int i = 0; i < numButtons; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
}
void loop() {
bool buttonChanged = false;
// Vérifier l'état de chaque bouton
for (int i = 0; i < numButtons; i++) {
bool buttonState = digitalRead(buttonPins[i]) == LOW; // Lire l'état du bouton (LOW signifie pressé)
if (buttonState != buttonsPressed[i]) {
// Si l'état du bouton a changé
buttonsPressed[i] = buttonState;
if (buttonState) {
// Si le bouton est pressé
moveElevator(i);
buttonChanged = true;
}
}
}
// Ajout d'un délai pour éviter les erreurs
if (buttonChanged) {
delay(300);
}
}
void moveElevator(int targetFloor) {
if (targetFloor != currentFloor) { // S'assurer que l'ascenseur se déplace seulement si nécessaire
if (targetFloor < currentFloor) {
// Déplacer l'ascenseur vers le bas
for (int i = currentFloor; i >= targetFloor; i--) {
updateLeds(i);
delay(1000); // Attendre un moment avant de changer d'étage
}
} else if (targetFloor > currentFloor) {
// Déplacer l'ascenseur vers le haut
for (int i = currentFloor; i <= targetFloor; i++) {
updateLeds(i);
delay(1000); // Attendre un moment avant de changer d'étage
}
}
currentFloor = targetFloor; // Mettre à jour l'étage actuel
}
}
void updateLeds(int floor) {
// Éteindre toutes les LEDs
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
// Allumer la LED correspondant à l'étage
if (floor >= 0 && floor < numLeds) { // Vérifier que l'étage est valide
digitalWrite(ledPins[floor], HIGH);
}
} |
Partager