Buenas noches compañeros retomando un poco la programación estoy con el reto de hacer un letrero con ws2811 en modo de cronometro al monteo de iniciar este funciona correctamente pero al momento de pasar los 33 segundos contabilizados comienza hacer cosas raras y no desplega la cuenta en curso les dejo el código para ver si ustedes ven algun error o una mejor idea de como relizar este letrero
#include <Adafruit_NeoPixel.h>
#define PIN 8
Adafruit_NeoPixel strip = Adafruit_NeoPixel(63, PIN, NEO_GRB + NEO_KHZ800);
unsigned long DigitBytes[] = {
0x0003FFFF, // 0
0x000001F8, // 1
0x001C7E3F, // 2
0x001C0FFF, // 3
0x001F81F8, // 4
0x001F8FC7, // 5
0x001FFFC7, // 6
0x000001FF, // 7
0x001FFFFF, // 8
0x001F81FF // 9
};
int m, mu=0,md=0;
int s, su=0,sd=0;
int l, lu=0,ld=0,lc1=0;
void setup() {
strip.begin();
}
void showDigit(int d, int offset) {
unsigned long digit = DigitBytes[d];
for (int i = offset; i < offset + 21; i++) {
if (digit & 1) {
strip.setPixelColor(i, 0xF8F8FF);
} else {
strip.setPixelColor(i, 0x000000);
}
digit = digit >> 1;
}
strip.show();
}
void loop() {
int tiempoContabilizado=millis();
m=(tiempoContabilizado/1000)/60; //Calculamos los minutos
mu=m%10; //Descomponemos los minutos y sacamos el valor de las unidades
md=(m-mu)/10; //Descomponemos los minutos y sacamos el valor de las decenas
s=(tiempoContabilizado/1000)%60; //Calculamos los segundos
su=s%10; //Descomponemos los segundos y sacamos el valor de las unidades
sd=(s-su)/10; //Descomponemos los segundos y sacamos el valor de las decenas
l=(tiempoContabilizado%1000); //Calculamos las milesimas de segundo
lu=l%10; //Descomponemos las milesimas y sacamos el valor de las unidades
ld=((l-lu)/10)%10; //Descomponemos las milesimas y sacamos el valor de las decenas
lc1=(l-(ld*10)-lu)/100; //Descomponemos las milesimas y sacamos el valor de las centenas
showDigit(su, 0);
showDigit(sd, 21);
showDigit(md, 42);
}
de igual manera me pasa con la libreria fastled
#include "FastLED.h"
#define NUM_LEDS 63 // 4*7*4 +2 Number of LED controlled
#define COLOR_ORDER BRG // Define color order for your strip
#define DATA_PIN 6 // Data pin for led comunication
int x = 1;
CRGB leds[NUM_LEDS]; // Define LEDs strip
// 0,0,0,0
// 1,1,1,1
// 1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728
byte digits[10][21] = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0}, // Digit 0
{0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0}, // Digit 1
{1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1}, // Digit 2
{1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1}, // Digit 3
{0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1}, // Digit 4
{1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1}, // Digit 5
{1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 6
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0}, // Digit 7
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 8
{1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1}}; // Digit 9 | 2D Array for numbers on 7 segment
int m, mu=0,md=0;
int s, su=0,sd=0;
int l, lu=0,ld=0,lc1=0;
// int ledColor = 0x0000FF; // Color used (in hex)
long ledColor = CRGB::LightCoral; // Color used (in hex)
void setup(){
Serial.begin(9600);
// Wire.begin();
LEDS.addLeds<WS2811, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // Set LED strip type
LEDS.setBrightness(75); // Set initial brightness
LEDS.setBrightness(255);
}
// Convert time to array needet for display
void TimeToArray(){
int Now =x; // Get time
int cursor = 63; // last led number
for(int i=1;i<=4;i++){
int digit=su;
int digit1=sd;
int digit2=md;
// get last digit in time[]={10,24,10045,0}
if (i==1){
Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
cursor = 86;
for(int k=0; k<=21;k++){
Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==2){
Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
cursor =42;
for(int k=0; k<=20;k++){
Serial.print(digits[digit][k]);
if (digits[digit2][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==3){
Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
cursor =21;
for(int k=0; k<=20;k++){
Serial.print(digits[digit][k]);
if (digits[digit1][k]== 1){leds[cursor]=0xFF0000;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
// Serial.println();
}
else if (i==4){
// Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
cursor =0;
for(int k=0; k<=20;k++){
Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
// Serial.println();
}
};
};
void loop() // Main loop
{
TimeToArray(); // Get leds array with required configuration
FastLED.show(); // Display leds array
int tiempoContabilizado=millis();
m=(tiempoContabilizado/1000)/60; //Calculamos los minutos
mu=m%10; //Descomponemos los minutos y sacamos el valor de las unidades
md=(m-mu)/10; //Descomponemos los minutos y sacamos el valor de las decenas
s=(tiempoContabilizado/1000)%60; //Calculamos los segundos
su=s%10; //Descomponemos los segundos y sacamos el valor de las unidades
sd=(s-su)/10; //Descomponemos los segundos y sacamos el valor de las decenas
l=(tiempoContabilizado%1000); //Calculamos las milesimas de segundo
lu=l%10; //Descomponemos las milesimas y sacamos el valor de las unidades
ld=((l-lu)/10)%10; //Descomponemos las milesimas y sacamos el valor de las decenas
lc1=(l-(ld*10)-lu)/100; //Descomponemos las milesimas y sacamos el valor de las centenas
}