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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
// Programme escalier 13 Marches
#define trigPin 12 //Trig premier capteur
#define echoPin 11 //Echo premier capteur
#define trigPin2 13 //Trig2 second capteur
#define echoPin2 10 //Echo2 second capteur
int lumPin; //variable état du contact du capteur de luminosité
boolean etatLumPin;
// Numéros des pins des leds, du bas vers le haut
const byte pinMarches[] = {2,3,4,5,6,7,8,9,38,40,42,44,46};
const byte NMarches = sizeof(pinMarches) / sizeof(pinMarches[0]);
// capteur ultrason:
int mindist = 40; //distance en dessous de laquelle nous souhaitons demarrer le cycle d'allumage
long duration, distance; //capteur 1
long duration2, distance2; //capteur 2
void setup() {
lumPin = 1; //pin défini pour l'état du capteur de luminosité
etatLumPin = 0;
pinMode(lumPin, INPUT_PULLUP);
Serial.begin(9600);
pinMode(trigPin, OUTPUT); //On defini Trig comme une sortie
pinMode(echoPin, INPUT); //On defini Echo comme une entree
pinMode(trigPin2, OUTPUT); //On defini Trig2 comme une sortie
pinMode(echoPin2, INPUT); //On defini Echo2 comme une entree
}
void loop() {
boolean etatLumPin = digitalRead(lumPin);
Serial.print("Capteur de luminosite : ");
Serial.println(etatLumPin);
if (etatLumPin) //condition "nuit" pour utilisation du système
{
//premier capteur à*ultrason:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //Trig envoi pendant 10ms
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 340 / (2 * 10000);
Serial.print("Distance1 : ");
Serial.println(distance);
// second capteur à ultrason:
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10); //Trig envoi pendant 10ms
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = duration2 * 340 / (2 * 10000);
Serial.print("Distance2 : ");
Serial.println(distance2);
//Séquence 1:sens d'allumage de la led 1 à 13
if (distance < mindist) { // si capteur détecte une distance en dessous de 50cm
Serial.print("Séquence d'allumage 1");
void Montee (bool state) {
// Allumer ou éteindre les marches une par une à partir du bas
for (byte i=0; i< NMarches; i++)
{
digitalWrite(pinMarches[i], state);
int duration = 50*pinMarches[i];
if (pinMarches[i] > 30) duration = 500 + (pinMarches[i] - 38) * 25;
delay(duration);
}
}
// Séquence 2: sens d'allumage de la led 16 à 1
if (distance2 < mindist) { // si capteur détecte une distance en dessous de 50cm
Serial.print("Séquence d'allumage 2");
void Descente (bool state) {
// Allumer ou éteindre les marches une par une à partir du haut
for (int i=NMarches-1; i>=0 ; i--)
{
digitalWrite(pinMarches[i], state);
int duration = 350 + 50*(9-pinMarches[i]);
if (pinMarches[i] > 30) duration = 100 + (46 - pinMarches[i]) * 25;
delay(duration);
}
}
void setup()
{
for (int i=0; i< NMarches; i++) pinMode(pinMarches[i], OUTPUT);
pinMode(Detecteurhaut, INPUT);
pinMode(Detecteurbas, INPUT);
}
void loop() {
Etat_det_haut = digitalRead(Detecteurhaut);
Etat_det_bas = digitalRead(Detecteurbas);
if (Etat_det_bas==HIGH) {
Montee (HIGH);
while (Etat_det_haut != HIGH); Etat_det_haut = digitalRead(Detecteurhaut);
Montee (LOW);
} else if (Etat_det_haut==HIGH) {
Descente (HIGH);
while(Etat_det_bas != HIGH) Etat_det_bas = digitalRead(Detecteurbas);
Descente (LOW);
}
} |
Partager