Logo Pastebin.fr
Pastebin

Retrouvez, créez et partagez vos snippets en temps réel.

projet ascenseur

#include <Servo.h>

// --- Attribution des broches ---
const int pinMoteur = 4; // Moteur (Fil rouge)
const int pinBuzzer = 8; // Buzzer
const int ledRDC = 2; // LED Étage RDC (Déplacée sur broche 2)
const int led1ER = 7; // LED Étage 1
const int led2EME = 13; // LED Étage 2

// Servomoteurs pour les portes
Servo porteRDC, porte1ER, porte2EME;

// Capteurs Ultrasons (SIG sur ton schéma)
const int trigRDC = A0;
const int trig1ER = A1;
const int trig2EME = A2;

// --- Variables de gestion ---
int etageCible = -1;
String commandeRecue;
const int seuilArret = 5; // Distance en cm pour l'arrêt de la cabine

void setup() {
// Communication avec le module Bluetooth (TX/RX)
Serial.begin(9600);

pinMode(pinMoteur, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
pinMode(ledRDC, OUTPUT);
pinMode(led1ER, OUTPUT);
pinMode(led2EME, OUTPUT);

// Attachement des servos sur les broches 9, 10, 11
porteRDC.attach(9);
porte1ER.attach(10);
porte2EME.attach(11);
// État initial
fermerPortes();
eteindreLeds();
digitalWrite(pinMoteur, LOW);
}

void loop() {
// 1. Réception des ordres Bluetooth (MIT App Inventor)
if (Serial.available() > 0) {
commandeRecue = Serial.readStringUntil('\n');
commandeRecue.trim();

if (commandeRecue == "onRDC") etageCible = 0;
else if (commandeRecue == "on1ER") etageCible = 1;
else if (commandeRecue == "on2EME") etageCible = 2;
else if (commandeRecue == "off") {
etageCible = -1;
digitalWrite(pinMoteur, LOW);
}
}

// 2. Gestion du trajet
if (etageCible != -1) {
long distance;

// On mesure uniquement la distance du capteur de l'étage demandé
if (etageCible == 0) distance = lireDistance(trigRDC);
else if (etageCible == 1) distance = lireDistance(trig1ER);
else if (etageCible == 2) distance = lireDistance(trig2EME);

if (distance < seuilArret) {
digitalWrite(pinMoteur, LOW); // Stop
allumerLedEtage(etageCible);
bipArrivee();
ouvrirPorte(etageCible);
etageCible = -1;
}
else {
digitalWrite(pinMoteur, HIGH); // En mouvement
eteindreLeds();
}
}
}
// Fonction pour mesurer la distance via capteur PING (3 broches)
long lireDistance(int pin) {
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
delayMicroseconds(2);
digitalWrite(pin, HIGH);
delayMicroseconds(5);
digitalWrite(pin, LOW);
pinMode(pin, INPUT);
return pulseIn(pin, HIGH) / 58;
}

void allumerLedEtage(int etage) {
eteindreLeds();
if (etage == 0) digitalWrite(ledRDC, HIGH);
if (etage == 1) digitalWrite(led1ER, HIGH);
if (etage == 2) digitalWrite(led2EME, HIGH);
}

void eteindreLeds() {
digitalWrite(ledRDC, LOW);
digitalWrite(led1ER, LOW);
digitalWrite(led2EME, LOW);
}

void ouvrirPorte(int etage) {
if (etage == 0) porteRDC.write(90);
else if (etage == 1) porte1ER.write(90);
else if (etage == 2) porte2EME.write(90);
delay(3000); // Reste ouvert 3s
fermerPortes();
}

void fermerPortes() {
porteRDC.write(0);
porte1ER.write(0);
porte2EME.write(0);
}

void bipArrivee() {
digitalWrite(pinBuzzer, HIGH);
delay(200);
digitalWrite(pinBuzzer, LOW);
}

Créé il y a 3 semaines.

Rechercher un Pastebin

Aucun paste trouvé.