Oui, la bonne question est : que veux-tu faire avec le bouton et la led rouge ?
J'ai repris ton code à ma manière, mais sans écrire la tâche 5 car elle est mal définie :
#include <Adafruit_NeoPixel.h>
#define PIN 9
#define NUM_LEDS 2
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
#define BT 4
#define BTN 2
#define Vert 6
#define Rouge 10
#define Blanc 11
#define Orange 12
#define Bleu 13
int brightness = 0;
const long interval_T1 = 1500;
const long interval_T4 = 800;
void setup() {
Serial.begin(9600);
pinMode(PIN, OUTPUT);
pinMode(Blanc, OUTPUT);
pinMode(Rouge, OUTPUT);
pinMode(Bleu, OUTPUT);
pinMode(Vert, OUTPUT);
pinMode(Orange, OUTPUT);
pinMode(BTN, INPUT);
pinMode(BT, INPUT_PULLUP);
digitalWrite(Blanc, HIGH);
strip.begin();
strip.fill(strip.Color(255, 153, 0), 0, 2);// pixel color set to yellow
}
void task1 (unsigned long duration) {
static unsigned long chrono = millis();
static int Orange_State = LOW;
if (millis() - chrono < duration) return;
chrono = millis();
Orange_State = !Orange_State;
digitalWrite(Orange, Orange_State);
}
void task2 (unsigned long duration) {
static unsigned long chrono = millis();
static int Bleu_State = LOW;
if (millis() - chrono < duration) return;
chrono = millis();
Bleu_State = !Bleu_State;
digitalWrite(Bleu, Bleu_State);
}
void loop() {
// Task 1 LED Orange clignote rapidement
task1 (interval_T4);
// Task 2 LED bleu clignote lentement
task2 (interval_T1);
//Task 3 Neopixels s'allument en jaune et flicker
strip.setBrightness(random(150,255)); // random brightness adjust for flicker effect
strip.show();
// Task 4 LED Vert s'allume avec BT
int button_state = digitalRead(BT);
digitalWrite(Vert, !button_state);
delay(30);
for (int bright = 255; bright = 0; bright --) {
strip.setBrightness(bright);
strip.show();
}
// Task 5 LED Rouge flashe 4 fois avec BTN
if (digitalRead(BTN) == HIGH){
for (int i=0; i<4; i=i+1) {
digitalWrite (Rouge, HIGH);
delay (100);
digitalWrite (Rouge, LOW);
delay (100);
}
}
else {
digitalWrite(Rouge, LOW);
}
}
Je n'ai pas compilé, il peut y avoir des erreurs.
Donc explique ce que tu veux faire avec ce bouton est cette led rouge. Pour l'instant, tant que le bouton est enfoncé, la led va clignoter. Si tu relâches le bouton, elle finira de clignoter puis s'éteindra. Mais c'est une tâche bloquante : pendant les 800 ms du clignotement, rien d'autre n'est fait (les autres leds restent dans leur état actuel et donc peuvent dépasser leur durée d'allumage)