Помогите избавиться от delay

Тема в разделе "Arduino & Shields", создана пользователем Securbond, 8 ноя 2018.

Метки:
  1. Securbond

    Securbond Гуру

    Поочерёдный вывод двух разных строк. (виден свет в конце тоннеля)
    Код (C++):
    #include <Adafruit_GFX.h>
    #include <Adafruit_NeoMatrix.h>
    #include <Adafruit_NeoPixel.h>

    #define PIN 2 //Пин с лентой
    #define NUMPIXELS 128 //количество светодиодов в ленте
    uint8_t brightness = 250; //Яркость матрицы
    String mess = "";
    String txt1 = ":-:--:---"; //такие символы проще тестировать на коротком куске ленты (8 светиков)
    String txt2 = ".........";
    bool tFlag;

    long previousMillis = 0;
    long previousMillis2 = 0;
    long interval = 100;
    long interval2 = 2000;
    int i = 0;
    byte stat=0;

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //В данном скетче можно не использовать
    Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 8, PIN,
      NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
      NEO_GRB           + NEO_KHZ800);
    const uint16_t colors[] = {
      matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };

    int x = matrix.width();
    void showText( String t, uint16_t color, int wait, int x){//функция вывода текста на матрицу
        matrix.setTextColor(color);
        t = (utf8rus(t));
        matrix.fillScreen(0);
        matrix.setBrightness(brightness);
        matrix.setCursor(x,0);
        matrix.print(t);
        matrix.show();
    }
    void setup() {
    Serial.begin(115200);
    tFlag = true;
      mess = txt1;
    pinMode(LED_BUILTIN,OUTPUT);
      matrix.begin();
      matrix.setTextWrap(false);
      matrix.setBrightness(40);
      matrix.setTextColor(colors[0]);
    }

    void loop() {
    unsigned long currentMillis = millis();

    //просто тикаем в сериал и подмигиваем светодиодом на плате
    if(currentMillis - previousMillis2 > interval2) {
    previousMillis2 = currentMillis;
    digitalWrite(LED_BUILTIN,stat);
    Serial.println("тик");
    stat=!stat;
      }
     
      //через необходимый интервал вызываем функцию вывода текста, передавая ей x- необходимое значение сдвига текста
      //если закончили вывод сообщения txt1, то меняем его на сообщение txt2
    if(tFlag == true){
      if(currentMillis - previousMillis > interval) {
       previousMillis = currentMillis;
        if  ((--x > (52*(-1)))){
          showText(mess,matrix.Color(0, 0, 139), 100, x);
          tFlag == true;    
        } else {    
          x = matrix.width();
          tFlag == false;
          if (mess == txt1){
          mess = txt2;
          tFlag = true;        
         } else {
          mess = txt1;
          tFlag = true;
           }
          }
         }  
        }
    }
     
  2. Securbond

    Securbond Гуру

    Решаешь одну проблему, вылазит другая. Теперь данные с брокера перестали обновляться.