Странное поведение adafruit_neopixel

tmorov

✩✩✩✩✩✩✩
7 Окт 2019
3
0
Здравствуйте, делаю часы по коду получается не понятка, две строчки из-за которых перестает меняться цвет если закомментировать то начинает работать. Что я не так сделал?


Форматирование (BB-код):
#include <Wire.h>
#include <DS3231.h>
#include "Adafruit_NeoPixel.h"
#include "DHT.h"

#define LED_COUNT 78 //количество светодиодов
#define LED_PIN 6 //ws2812
#define DHT_PIN 11 //датчик DHT11
#define T_PERIOD 1000 //период

Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN,
                          NEO_RGB + NEO_KHZ800);
DS3231 Clock;
DHT dht(DHT_PIN, DHT11);

bool h12;
bool dot;
unsigned long my_timer;
byte count;

byte digits[13][19] = {
 //1,1,1,2,2,2 3,3,3 4,4 5,5 6,6,6 7,7,7
  {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, //0
  {0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1}, //1 
  {1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0}, //2 
  {1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1}, //3 
  {1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,1,1,1}, //4 
  {1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1}, //5 
  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, //6 
  {0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1}, //7 
  {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, //8 
  {1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1}, //9   
  {0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0}, //C 
  {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0}, //* 
  {0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1}  //% 
};

int GetTime(){
  byte hours = Clock.getHour(h12, h12);
  byte minutes = Clock.getMinute();
  byte seconds = Clock.getSecond();
  dot = seconds % 2;
  return (hours * 100 + minutes);
}

void TimeToDislpay(){
  byte digit;
  int tTime = GetTime();
  byte index=78;
//  uint_32 color;

//точки
  if(dot){strip.setPixelColor(38, 0xFF0000);
          strip.setPixelColor(39, 0xFF0000);}
  else{strip.setPixelColor(38, 0x000000);
       strip.setPixelColor(39, 0x000000);};

  for(byte i=1;i<=4;i++){
    digit = tTime % 10;
    tTime /= 10;
    switch(i){
      case 1:
;        index = 59;
        break;
      case 2:
        index = 40;
        break;
      case 3:
        index = 19;
        break;
      case 4:
        index = 0;
        break;
    }
    for(byte k=0;k<=18;k++){
      if(digits[digit][k]==1){
//        strip.setPixelColor(index, 0xFF0000);//Если Раскомментировать то светотодиоды перестают менять Цвет
      }else{
//        strip.setPixelColor(index, 0x000000);//Если Раскомментировать то светотодиоды перестают менять Цвет
      }
      index++;(
    }
  }       
  strip.show();
}
void setup() {
  Serial.begin(9600);
  Wire.begin();
  dht.begin();
  pinMode(LED_BUILTIN, OUTPUT);
  strip.setBrightness(25);
  strip.begin();
  count = 0;
  my_timer = 0;
}

void loop() {
  TimeToDislpay();
  digitalWrite(LED_BUILTIN, dot);
  delay(1000);
 
}
[/SPOILER]
 

Вложения

tmorov

✩✩✩✩✩✩✩
7 Окт 2019
3
0
C++:
//точки
  if(dot){strip.setPixelColor(38, 0xFF0000);
          strip.setPixelColor(39, 0xFF0000);}
  else{strip.setPixelColor(38, 0x000000);
       strip.setPixelColor(39, 0x000000);};
Этот участок кода моргает двоеточием между часами и минутами



C++:
for(byte k=0;k<=18;k++){
      if(digits[digit][k]==1){
//        strip.setPixelColor(index, 0xFF0000);//Если Раскомментировать то светотодиоды перестают менять Цвет
      }else{
//        strip.setPixelColor(index, 0x000000);//Если Раскомментировать то светотодиоды перестают менять Цвет
      }
      index++;(
    }
А если здесь раскоменировать эти строчки
C++:
strip.setPixelColor(index, 0xFF0000);
strip.setPixelColor(index, 0x000000);
Причем любую из них то светодиодов перестают играть даже двоеточие.
Код работает, но ни чего не моргает
 

tmorov

✩✩✩✩✩✩✩
7 Окт 2019
3
0
Работает.
Сейчас выяснил что происходит это вовремя считывания массива digits. И только в функции TimeToDislpay. Буду дальше смотреть, где-то что-то душе написано, и да попробую с чистого листа все переписать. Спасибо за совет.