Помощь с arduino и ws2812b

Тема в разделе "Arduino & Shields", создана пользователем Ghost-Tula, 31 мар 2020.

  1. Ghost-Tula

    Ghost-Tula Нуб

    Добрый день, я в этом деле новичок есть код в нем есть 4 эффекта они переключаются автоматически, подскажите пожалуйста как сделать так что бы между режимами можно было переключаться только кнопкой одной
    Код (C++):
    #include <FastLED.h>

    #define DATA_PIN     9          //Пин светодиодов
    #define CLOCK_PIN    3          //Пин кнопки
    #define NUM_LEDS     31         //Количество светодиодов
    #define LED_TYPE     WS2812B    //Тип светодиодов
    #define COLOR_ORDER  GRB        //Порядок цветов
    #define BRIGHTNESS   255        //Яркость

    CRGB leds[NUM_LEDS];

    void setup() {
        Serial.begin(57600);
        Serial.println("resetting");
        LEDS.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
        LEDS.setBrightness(BRIGHTNESS);
    }

    typedef void (*SimplePatternList[])();
    SimplePatternList gPatterns = { rgb, red, green, blue };

    void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(150); } }

    uint8_t gCurrentPatternNumber = 0;

    void loop() {
      gPatterns[gCurrentPatternNumber]();
      EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically
    }

    #define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))

    void nextPattern()
    {
     
      gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns);
    }

    void rgb() {
        static uint8_t hue = 0;
        Serial.print("x");
       
        for(int i = (NUM_LEDS)-1; i >= 0; i--) {
        leds[i] = CHSV(hue++, 255, 255);
        FastLED.show();
        //leds[i] = CRGB::Red;
        fadeall();
        delay(7);
      }
    }
    void red() {
        static uint8_t hue = 0;
        Serial.print("x");
       
        for(int i = (NUM_LEDS)-1; i >= 0; i--) {
        //leds[i] = CHSV(hue++, 255, 255);
        FastLED.show();
        leds[i] = CRGB::Red;
        fadeall();
        delay(7);
      }
    }
    void green() {
        static uint8_t hue = 0;
        Serial.print("x");
     
        for(int i = (NUM_LEDS)-1; i >= 0; i--) {
        //leds[i] = CHSV(hue++, 255, 255);
        FastLED.show();
        leds[i] = CRGB::Green;
        fadeall();
        delay(7);
      }
    }
    void blue() {
        static uint8_t hue = 0;
        Serial.print("x");
     
        for(int i = (NUM_LEDS)-1; i >= 0; i--) {
        //leds[i] = CHSV(hue++, 255, 255);
        FastLED.show();
        leds[i] = CRGB::Blue;
        fadeall();
        delay(7);
      }
    }
     
  2. b707

    b707 Гуру

    Изменения минимальны - во второй строчке loop() вызывать next_pattern() по нажатию кнопки.
    Само собой, что нужно описать кнопку и ее опрос.
    все остальное можно не трогать
     
  3. Ghost-Tula

    Ghost-Tula Нуб

    Можно пожалуйста поподробнее, а то я как чайник)