Déclencher un mécanisme au bout de 9 secondes de compte à rebours dans le but de commander un lance-confetti de classe Delirium I pour faire une vidéo trop stylée !
Nous devrons créer le montage suivant pour réussir à lancer les confettis dans les délais, dans un premier temps nous modéliserons l'ordre de lancer par une diode rouge DL.
Il faudrait modéliser le compte à rebours par trois diodes RGB (diodes 3 couleurs)) qui feront l'effet suivant :
Puis une dernière diode classique s'allumerait (fin du compte à rebours)
….
Pour les plus avancés dans leur montage, nous génèrerons quelques notes de musique avec des buzzers piezzo éléctronique pour faire comme les compte à rebours dans les films d'espionnage ^^
Nomenclature du circuit :
int SortieRouge = 3;
int SortieBleue = 10;
int SortieVerte = 11;
int EntreeInter = A0;
int Diode1 = 4;
int Diode2 = 5;
int Diode3 = 6;
int SortieFeu = 7;
int SortieBuzzer = 8;
unsigned long t ;
unsigned long tStart;
void setup() {
// II - Déclaration des sortie et mise à Zéro
// NB : Par pure flemme je mets toutes les pins digitales de 2 à 11 en sortie et à l'état bas...
for(int i = 2; i<12; i++) {
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
}
// III - Définition de fonctions utiles pour le programme
// Sons et lumières
void RGB(int R, int G, int B) {
analogWrite(SortieRouge,R);
analogWrite(SortieBleue,G);
analogWrite(SortieRouge,B);
t=millis();
}
void carre(int TempsHaut, int TempsBas) {
digitalWrite(SortieBuzzer, HIGH);
delayMicroseconds(TempsHaut);
digitalWrite(SortieBuzzer, LOW);
delayMicroseconds(TempsBas);
}
void rouge(){
RGB(255,0,0);
carre(150,500);
}
void vert() {
RGB(0,255,0);
carre(100,3000);
}
void bleu(){
RGB(0,0,255);
carre(500,5000);
}
void jaune(){
RGB(240, 195, 0);
carre(500,2000);
}
void orange(){
RGB(223, 109, 20);
carre(150,1000);
}
void violet(){
RGB(102, 0, 255);
carre(100,0);
}
void adressage(boolean a, boolean b, boolean c){
if(a) {
digitalWrite(Diode1,HIGH);
}
else if(b){
digitalWrite(Diode2,HIGH);
}
else if(c){
digitalWrite(Diode3,HIGH);
}
else {
digitalWrite(Diode1,LOW);
digitalWrite(Diode2,LOW);
digitalWrite(Diode3,LOW);
}
}
// IV -- Fonction principale
void loop() {
t=millis();
boolean start = digitalRead(EntreeInter);
if(start) {
tStart=millis();
while(t-tStart<500) {
bleu();
adressage(true,false,false);
}
while(t-tStart<1000) {
bleu();
adressage(true,true,false);
}
while(t-tStart<1500) {
bleu();
adressage(true, true ,true);
}
while(t-tStart<2000) {
vert();
adressage(false, false, true);
}
while(t-tStart<2500) {
vert();
adressage(false, true, true);
}
while(t-tStart<3000) {
vert();
adressage(true, true, true);
}
while(t-tStart<3500) {
jaune();
adressage(true, false,false );
}
while(t-tStart<4000) {
jaune();
adressage(true, true, false);
}
while(t-tStart<4500) {
jaune();
adressage(true, true, true);
}
while(t-tStart<5000) {
orange();
adressage(false, false, true);
}
while(t-tStart<5500) {
orange();
adressage(false, true , true);
}
while(t-tStart<6000) {
orange();
adressage(true, true, true);
}
while(t-tStart<6500) {
rouge();
adressage(true,false, false);
}
while(t-tStart<7000) {
rouge();
adressage(true, true, false);
}
while(t-tStart<7500) {
rouge();
adressage(true, true, true);
}
while(t-tStart<8000) {
RGB(0,0,0);
adressage(false, false, false);
}
while(t-tStart<8500) {
rouge();
adressage(true, true, true);
}
while(t-tStart<10000) {
adressage(true,true,true);
violet();
rouge();
vert();
jaune();
orange();
if(t-tStart>9000) {
digitalWrite(SortieFeu, HIGH);
}
}
}
delay(1);
}