Ceci est une ancienne révision du document !
Pendant notre deuxième édition de Game Of Drone, l'épreuve de pilotage consistait à faire voler le drone autour de trois potos. Pour l'occasion nous avons créer un jeu de lumière.
Petite explication: Trois potos sont placés en triangle. Au sommet de chacun d'eux, se trouve une lampe. Lorsque le drone commence l'épreuve il doit faire un tour du poto qui à sa lampe qui clignote. Lorsqu'il à fait un tour complet, la lampe s'arrête de clignoter et reste allumée puis le poto suivant se met à clignoter… puis le troisième !
Notre problématique était donc de faire un code arduino pour controller ce système.
Notre système peut être dans 5 états différents: -Tous les potos éteint -Le premier poto qui clignote et le reste éteint -Le premier poto est allumé le deuxième clignotte et le troisième est éteint -Les deux premiers potos sont allumés, le troisième clignotte -Les trois potos sont allumés
Nous avons 5 boutons pour contrôler l'état du système.
La fréquence à laquelle clignote un poto est de 1Hz. Pour le code Arduino nous ne pourront pas utilisé la fonction delay() car il faut surveiller également les boutons pour voir si l'utilisateur appuie dessus. Pour ce faire nous allons utiliser la technique de la machine à état
int time;
int state=0;
int LED=0;
void setup() {
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
pinMode(4, INPUT);
pinMode(3, INPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
time=millis();
time_p=millis();
}
// the loop function runs over and over again forever
void loop() {
if (digitalRead(7)==0) { state=0;}
else if (digitalRead(6)==0) { state=1;}
else if (digitalRead(5)==0) { state=2;}
else if (digitalRead(4)==0) { state=3;}
else if (digitalRead(3)==0) { state=4;}
else state=state;
updateLED();
blinkLED();
}
void blinkLED(){
if (state==0) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
}
if (state==1) {
if (LED==1) {
digitalWrite(12, HIGH);
} else {
digitalWrite(12, LOW);
}
digitalWrite(11, LOW);
digitalWrite(10, LOW);
}
if (state==2) {
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
} else {
digitalWrite(11, LOW);
}
digitalWrite(10, LOW);
if (state==3) {
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
} else {
digitalWrite(10, LOW);
}
if (state==4) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
}
}
void updateLED(){
if (time-millis()>500) {
LED=1-LED;
time=millis();
}
}