- Rémi,
Bonjour à tous,
Je suis bloqué depuis pas mal de temps sur un problème pour un projet sur arduino :
Je souhaite exécuter des instructions en fonction d'une sorte de "partition" stockée dans un char. En gros j'ai mon char, chaque caractère représentant une action a effectuer : "0" faire ceci, "1" faire cela donc "010010101" alterner suivant la séquence demandée.
mais j'ai beau essayer je n'y parviens pas. Voici mon code, si quelqu'un a une idée je suis preneur.
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 | #include <stdio.h> #include <string.h> #define ledPin 13 //utilise la led interne pin 13 const char sequence[] = "0101000011111111111100000000011"; //séquence a éxecuter const int boutonPin = 7; // bouton placé sur le pin 7 bool etatBouton = 1; // variable de l'etat du bouton void action0(); void action1(); void clignote(); void setup() { Serial.begin(9600); // ouvre la communication entre l'arduino et le PC pinMode(ledPin, OUTPUT); // la led est une sortie pinMode(boutonPin, INPUT); // le bouton est une entree Serial.print("pret"); } void loop() { delay(500); etatBouton= digitalRead(boutonPin); // on lit l'etat du bouton if (etatBouton == LOW) { // si le bouton est appuyé, on execute la séquence Serial.print("bouton appuye, depart sequence \n"); digitalWrite(ledPin, HIGH); for (int i =0; i<31; i++) { if (sequence[i] == 0){ // si le Ième caractere caractere est un zero on effectue l'action0 action0(); } else if (sequence[i] == 1) { // si le Ième caractere caractere est un un on effectue l'action1 action1(); } else { clignote(); } } } Serial.print("termine"); } void action0() { Serial.print("0"); //l'action est simplifiée pour gagner en lisibilité } void action1() { Serial.print("1"); } void clignote() { digitalWrite(ledPin, HIGH); delay(300); digitalWrite(ledPin, LOW); delay(300); digitalWrite(ledPin, HIGH); delay(300); digitalWrite(ledPin, LOW); } |
J'ai aussi essayé avec strcmp mais ca ne fonctionne pas non plus…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if (etatBouton == LOW) { Serial.print("bouton appuye, depart sequence \n"); digitalWrite(ledPin, HIGH); for (int i =0; i<31; i++) { if (strcmp(sequence[i], "0") == 0){ action0(); } else if (strcmp(sequence[i], "1") == 0) { action1(); } else { clignote(); } } |
+0
-0