Hello hello
Je débute tout juste sur une arduino uno R3 (je l’ai reçu hier…) et je bute sur un programme.
Je souhaite faire un éclairage évolutif sur un diorama, piloté pas un Arduino (uno pour commencé, mais surement nano par la suite) et télécommandé (pour changer de mode)
Mais je bute sur un soucis. voila mon code (mélange de code repris un peu partout)
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 | /* YourDuino.com Example Software Sketch IR Remote Kit Test Uses YourDuino.com IR Infrared Remote Control Kit 2 http://arduino-direct.com/sunshop/index.php?l=product_detail&p=153 based on code by Ken Shirriff - http://arcfn.com Get Library at: https://github.com/shirriff/Arduino-IRremote Unzip folder into Libraries. RENAME folder IRremote terry@yourduino.com */ /*-----( Import needed libraries )-----*/ #include "IRremote.h" /*-----( Declare Constants )-----*/ int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11 int pinLed=3; // pin de la led de test /*-----( Declare objects )-----*/ IRrecv irrecv(receiver); // create instance of 'irrecv' decode_results results; // create instance of 'decode_results' /*-----( Declare Variables )-----*/ void setup() /*----( SETUP: RUNS ONCE )----*/ { Serial.begin(9600); Serial.println("IR Receiver Raw Data + Button Decode Test"); irrecv.enableIRIn(); // Start the receiver pinMode(pinLed,OUTPUT); // led en sortie de courant }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { if (irrecv.decode(&results)) // have we received an IR signal? { // Serial.println(results.value, HEX); UN Comment to see raw values translateIR(); irrecv.resume(); // receive the next value } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ void translateIR() // takes action based on IR code received // describing Car MP3 IR codes { switch(results.value) { case 0xFF30CF: Serial.println(" 1 "); digitalWrite(pinLed,HIGH); // on passe le pin à +5V delay (1000); digitalWrite(pinLed,LOW); // on passe le pin à 0V break; case 0xFF18E7: Serial.println(" 2 "); digitalWrite(pinLed,HIGH); // on passe le pin à +5V delay (2000); digitalWrite(pinLed,LOW); // on passe le pin à 0V break; case 0xFF7A85: Serial.println(" 3 "); digitalWrite(pinLed,HIGH); // on passe le pin à +5V delay (3000); digitalWrite(pinLed,LOW); // on passe le pin à 0V break; default: Serial.println(" other button "); } delay(500); } //END translateIR /* ( THE END ) */ |
La c’est un test avec une led qui s’allume en fonction du bouton utilisé, pour faire un code plus complexe par la suite. Le code n’est pas forcement complet, j’ai enlevé les boutons qui ne servent a rien.
En gros, chaque cas aura un bout de code, plus ou moins complexe suivant le cas, et n’utilisera pas forcement les mêmes pins de l’arduino. Pour gérer par exemple, les réverbères, l’éclairage des maisons, les feux tricolores, une barrière électrique…
Seulement j’aimerais pouvoir changer de mode (par un appuie sur la télécommande) en cours de mode. Si j’appuie sur 3, je suis obligé d’attendre que le code se fasse, et ensuite d’attendre que l’arduino attende que j’appuie, pour que l’appuie se fasse détecté. (je sais pas si je suis clair ^^).
Ce que je voudrais, c’est passer du cas 3 au cas 2, sans avoir besoin d’attendre que le code du cas 3 soit fini en entier…
La fonction delay() ne me semble pas approprié, et je pensais utiliser millis(), mais j’ai pas trop compris comment ça fonctionnait…
y’a aussi surement moyen, d’optimiser le tout, mais c’est pas d’actualité pour le moment… déjà faire en sorte que ça marche
merci d’avance pour vos précieux conseils…