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 123 124 125 126 127 128
| /*ESSAI ALLUMAGE PROGRESSIF ECLAIRAGE D'ESCALIER
AVEC CARTE D'EXTENSION PWM 16 CANAUX
Avec capteur ultrason en haut et bas des escaliers
Principe recherché: détection présence (avec capteur ultrason) haut des escalier > allumage progressif du haut vers le bas
puis délai et extinction progressive du haut vers le bas.
Même principe à l'inverse avec le second capteur à ultrason (séquence que je n'arrive pas à intégrer)
*/
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); //chemin d'accès à la carte pwm
#define LEDMIN 0 // impulsion min (entre 0 et 4096)
#define LEDMAX 4000 //impulsion max (entre 0 et 4096)
#define trigPin 12 //Trig premier capteur
#define echoPin 11 //Echo premier capteur
#define trigPin2 13 //Trig2 second capteur
#define echoPin2 10 //Echo2 second capteur
#define ledUltra1 2 //led de contrôle capteur à ultrason 1
#define ledUltra2 3 //led de contrôle capteur à ultrason 2
// Liste des leds
uint8_t led1 = 0;
uint8_t led2 = 1;
uint8_t led3 = 2;
uint8_t led4 = 3;
uint8_t led5 = 4;
uint8_t led6 = 5;
uint8_t led7 = 6;
uint8_t led8 = 7;
uint8_t led9 = 8;
uint8_t led10 = 9;
uint8_t led11 = 10;
uint8_t led12 = 11;
uint8_t led13 = 12;
uint8_t led14 = 13;
uint8_t led15 = 14;
uint8_t led16 = 15;
// capteur ultrason:
int mindist = 20; //distance en dessous de laquelle nous souhaitons démarrer le cycle d'allumage
long duration, distance; //capteur 1
long duration2, distance2; //capteur 2
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT); //On défini Trig comme une sortie
pinMode(echoPin, INPUT); //On défini Echo comme une entrée
pinMode(trigPin2, OUTPUT); //On défini Trig2 comme une sortie
pinMode(echoPin2, INPUT); //On défini Echo2 comme une entrée
pinMode(ledUltra1, OUTPUT);
pinMode(ledUltra2, OUTPUT);
pwm.begin(); //démarrage carte pwm
pwm.setPWMFreq(60); //réglage de la fréquence
}
void loop() {
//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 à 16
if (distance < mindist) { // si capteur détecte une distance en dessous de 50cm
Serial.print("Séquence d'allumage 1");
for (uint8_t led = 0 ; led < 16; led++) {
for (uint16_t pulselen = LEDMIN; pulselen < LEDMAX; pulselen += 10) { //chiffre/nombre pair
pwm.setPWM(led, 0, pulselen);
}
}
delay(2000);// délai avant extinction progressive:
for (uint8_t led = 0 ; led < 16; led++) {
for (uint16_t pulselen = LEDMAX; pulselen > LEDMIN; pulselen -= 2) { //chiffre/nombre pair
pwm.setPWM(led, 0, pulselen);
}
}
Serial.print("Fin de séquence d'allumage 1");
}
// 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");
for (uint8_t led = 15+1 ; led > 0; led--) {
for (uint16_t pulselen = LEDMIN; pulselen < LEDMAX; pulselen +=10) { //chiffre/nombre pair
pwm.setPWM(led-1, 0, pulselen);
}
}
delay(2000);// délai avant extinction progressive:
for (uint8_t led = 15+1 ; led > 0; led--) {
for (uint16_t pulselen = LEDMAX; pulselen > LEDMIN; pulselen -= 2) { //chiffre/nombre pair
pwm.setPWM(led-1, 0, pulselen);
}
}
Serial.print("Fin de séquence d'allumage 2");
}
} |
Partager