eclairage bandeau ws2812

Accueil/Questions/eclairage bandeau ws2812
eclairage bandeau ws2812 2015-02-12T21:43:27+00:00

Accueil Forums Questions eclairage bandeau ws2812

6 sujets de 1 à 6 (sur un total de 6)
  • Auteur
    Messages
  • mickaelr30
    Participant
    Nombre d'articles : 4
    #8461 |

    bonjour,
    mon projet est de mettre des bandeaux LED dans ma montée d’escalier. Sur chaque plinthe je vais installé un bandeau de 7 LED WS2812 sur 10 marches.Dans un premier temps j’aimerai allumer mes bandeaux les un après les autres avec un décalage d’environ une à deux secondes
    Ne connaissant pas trop la programmation j’ai fait des tests mais je n’arrive pas au résultat voulu.
    comment faudrait-il programmer pour avoir ce décalage
    merci
    Mickael

    arnaud9212
    Admin bbPress
    Nombre d'articles : 118

    Je crois comprendre que vous avez déjà fait les branchements pour vos leds. Si chacun des bandeaux de led est relié à un pin de l’Arduino, disons les pins 3,4,5,6,7,8,9,10,11,12,13 pour notre exemple voila à quoi le programme pourrait ressembler pour allumer les marches à deux secondes d’interval puis toutes les éteindre à la fois :

    byte pins = {3,4,5,6,7,8,9,10,11,12}; //changer ici les numéros des pins en fonction des branchements
    
    void setup() {
    
    for(int i = 0; i < 10; i++){
    
    pinMode(pins, OUTPUT);
    
    digitalWrite(pins, LOW);
    
    }
    
    }
    
    void loop() {
    
    for(int i = 0; i < 10; i ++){
    
    digitalWrite(pins, HIGH);
    
    delay(2000);
    
    }
    
    for(int i = 0; i < 10; i ++){
    
    digitalWrite(pins, LOW);
    
    }
    
    }
    mickaelr30
    Participant
    Nombre d'articles : 4

    en fait ce que j’aimerai faire c’est eclairé chaque marche avec un decalage d’environ 1 seconde puis eteidre en commencant par le bas et remonter
    j’ai commencé le code comme ceci mais j’ai peur que ce soit lourd :

    #include <Adafruit_NeoPixel.h>

    #define PIN 6
    long temps;

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(135, PIN, NEO_GRB + NEO_KHZ800);

    uint32_t white = strip.Color(255,255,255);

    void setup() {
    strip.begin();
    strip.show();
    temps = millis();

    }

    void loop() {
    strip.setBrightness(50);
    // dim();
    escalier();
    }

    void escalier() {
    for (int i=0; i < 7; i++) {
    strip.setPixelColor(i, white);
    strip.show();
    //delay(1);

    }

    if((millis() – temps) >1000) {
    for (int i=7; i < 15; i++) {
    strip.setPixelColor(i, white);
    strip.show();
    //temps = millis();
    // delay(20);
    }
    }
    if((millis() – temps) >2000) {
    for (int i=15; i < 22; i++) {
    strip.setPixelColor(i, white);
    strip.show();
    //temps = millis();
    // delay(20);
    }
    }
    }

    peux t-on simplifier le code sans avoir à retaper les commandes 10 fois de suite pour la montée et 10 fois de suite pour la descente ?
    entre parenthese il y à 7 leds par marche d’ou le (int i=0; i < 7; i++)

    arnaud9212
    Admin bbPress
    Nombre d'articles : 118

    Je peux vous proposer ce code :

    void escalier() {

    for(int y = 0;  y<10;y++){

    for (int i=0; i < 7; i++) {
    strip.setPixelColor(i+7*y, white);
    strip.show();
    }

    dela(1000);

    }

    for(int y = 0;  y<10;y++){

    for (int i=0; i < 7; i++) {
    strip.setPixelColor(i+7*y, black);
    strip.show();
    }

    dela(1000);

    }

    }

    mickaelr30
    Participant
    Nombre d'articles : 4

    merci,
    je vais essayer, par contre de ce que j’ai compris Delay met en pose l’arduino. Comme je vais normalement avoir d’autres programmes qui vont tourner dessus je devrais plutot utiliser millis() ?

    arnaud9212
    Admin bbPress
    Nombre d'articles : 118

    Si tu appelles ta fonction escalier, même avec millis() le programme restera bloquer à l’interieur de cette fonction, il faut que la fonction escalier test si il faut qu’elle change un état ou non ce qui nous donnerais :

    void escalier() {

    if(millis() – lastchange > 1000){
    if(y >= 20) y = 0;
    if(y < 10){ for (int i=0; i < 7; i++) { strip.setPixelColor(i+7*y, white); strip.show(); } } else if(y < 20){ for (int i=0; i < 7; i++) { strip.setPixelColor(i+7*(y-10), black); strip.show(); } } y++; lastChange = millis(); } }

6 sujets de 1 à 6 (sur un total de 6)

Vous devez être connecté pour répondre à ce sujet.