Bonjour à tous,
Voila je viens de faire ma première interruption sur la pin 2 de mon arduino nano :
En fait je mesure la pulse de mon recepteur Radio (RC) et j'incrémente un programme sur mes leds. Tout fonctionne correctement j'arrive bien a passer de programme en programme mais le seul soucis c'est que dès fois je reste sur le meme programme car la boucle qui increment le prog se fait plusieurs.
Normal qd j'appuie sur mon poussoir RC la pulse va etre mesurer plusieurs fois et donc incrémenter plusieurs fois ma variable.
Comment je pourrais eviter se phénomène ?
Code:volatile long servo_startPulse; volatile unsigned int pulse_val; int servo_val; #include <Adafruit_NeoPixel.h> #define PIN0 4 #define PIN1 5 #define PIN2 6 #define PIN3 7 int i; int wait; int numpixel=8; int prog=0; Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(numpixel, PIN0, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(numpixel, PIN1, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(numpixel, PIN2, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(numpixel, PIN3, NEO_GRB + NEO_KHZ800); void setup(){ Serial.begin(9600); //pinMode(servo_val, INPUT); attachInterrupt(0, pulse_begin, RISING); strip0.begin(); strip0.show(); // Initialize all pixels to 'off' strip1.begin(); strip1.show(); strip2.begin(); strip2.show(); strip3.begin(); strip3.show(); i=0; wait = 0; } void pulse_begin(){ servo_startPulse = micros(); detachInterrupt(0); attachInterrupt(0, pulse_end, FALLING); } void pulse_end(){ pulse_val = micros() - servo_startPulse; detachInterrupt(0); attachInterrupt(0,pulse_begin, RISING); } void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip0.numPixels(); i++) { strip0.setPixelColor(i, c); strip1.setPixelColor(i, c); strip2.setPixelColor(i, c); strip3.setPixelColor(i, c); strip0.show(); strip1.show(); strip2.show(); strip3.show(); delay(wait); } } void loop(){ if (pulse_val >=1600){ prog++; if (prog>2){prog=1;} } if (prog==1){ wait=30; for (i=strip0.numPixels()-1; i>=0 ; i--){ strip0.setPixelColor(i, 255, 255, 255); strip1.setPixelColor(i, 255, 255, 255); strip0.show(); strip1.show(); delay(wait); } for (i=0; i<numpixel ; i++){ strip2.setPixelColor(i, 255, 255, 255); strip3.setPixelColor(i, 255, 255, 255); strip2.show(); strip3.show(); delay(wait); } for (i=strip0.numPixels()-1; i>=0 ; i--){ strip2.setPixelColor(i, 0, 0, 0); strip3.setPixelColor(i, 0, 0, 0); strip2.show(); strip3.show(); delay(wait); } for (i=0; i<numpixel ; i++){ strip0.setPixelColor(i, 0, 0, 0); strip1.setPixelColor(i, 0, 0, 0); strip0.show(); strip1.show(); delay(wait); } } if (prog==2){ colorWipe(strip0.Color(255, 0, 0), 50); // Red colorWipe(strip0.Color(0, 255, 0), 50); // Green colorWipe(strip0.Color(0, 0, 255), 50); // blue colorWipe(strip0.Color(255, 255, 0), 50); // Jaune colorWipe(strip0.Color(0, 255, 255), 50); // cyan colorWipe(strip0.Color(255, 0, 255), 50); // magenta colorWipe(strip0.Color(255, 255, 255), 50); // blanc } Serial.println(prog); }
Cordialement,
bypbop
-----