Skip to content

Instantly share code, notes, and snippets.

@gilliangoud
Created December 22, 2019 20:01
Show Gist options
  • Save gilliangoud/363aa8b9da3b111c6a5786f23c3ab2ee to your computer and use it in GitHub Desktop.
Save gilliangoud/363aa8b9da3b111c6a5786f23c3ab2ee to your computer and use it in GitHub Desktop.
#define FASTLED_ESP32_I2S true
//#define FASTLED_ALLOW_INTERRUPTS 0
#define FASTLED_SHOW_CORE 0
#include "src/FASTLED/FastLED.h"
#define LED_PIN 13
#define N_LEDS 98
#define BRIGHTNESS 20 //brightness (max 254)
#define N_LEDS_SEGMENT 7
#define N_DISPLAYS 2
CRGB leds[N_LEDS];
static CRGB color = CRGB::White;
static CRGB colors[2] = {CRGB::White, CRGB::Red};
void setup() {
FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, N_LEDS);
FastLED.setBrightness( BRIGHTNESS );
delay(500);
}
// segments start at 1
void setSegment(int segment, CRGB color) {
for(int i = ((segment - 1) * N_LEDS_SEGMENT); i < (segment * N_LEDS_SEGMENT); i++){
leds[i] = color;
}
}
void setSegments(int segments[7], CRGB color){
for(int i = 0; i < N_LEDS_SEGMENT; i++){
if(segments[i] > 0){
setSegment(segments[i], color);
}
}
}
// displays start at 0
// segments start at 1
void setNumber(int nDisplay, int number, CRGB color){
int segmentOffset = nDisplay * 7;
int number0[7] = {1 + segmentOffset,2 + segmentOffset,3 + segmentOffset,4 + segmentOffset,5 + segmentOffset,6 + segmentOffset,0};
int number1[7] = {3 + segmentOffset,4 + segmentOffset,0,0,0,0,0};
int number2[7] = {2 + segmentOffset,3 + segmentOffset,5 + segmentOffset,6 + segmentOffset,7 + segmentOffset,0,0};
int number3[7] = {2 + segmentOffset,3 + segmentOffset,4 + segmentOffset,5 + segmentOffset,7 + segmentOffset,0,0};
int number4[7] = {1 + segmentOffset,3 + segmentOffset,4 + segmentOffset,7 + segmentOffset,0,0,0};
int number5[7] = {1 + segmentOffset,2 + segmentOffset,4 + segmentOffset,5 + segmentOffset,7 + segmentOffset,0,0};
int number6[7] = {1 + segmentOffset,2 + segmentOffset,4 + segmentOffset,5 + segmentOffset,6 + segmentOffset,7 + segmentOffset,0};
int number7[7] = {2 + segmentOffset,3 + segmentOffset,4 + segmentOffset,0,0,0,0};
int number8[7] = {1 + segmentOffset,2 + segmentOffset,3 + segmentOffset,4 + segmentOffset,5 + segmentOffset,6 + segmentOffset,7 + segmentOffset};
int number9[7] = {1 + segmentOffset,2 + segmentOffset,3 + segmentOffset,4 + segmentOffset,5 + segmentOffset,7 + segmentOffset,0};
switch(number){
case 0:
setSegments(number0, color);
break;
case 1:
setSegments(number1, color);
break;
case 2:
setSegments(number2, color);
break;
case 3:
setSegments(number3, color);
break;
case 4:
setSegments(number4, color);
break;
case 5:
setSegments(number5, color);
break;
case 6:
setSegments(number6, color);
break;
case 7:
setSegments(number7, color);
break;
case 8:
setSegments(number8, color);
break;
case 9:
setSegments(number9, color);
break;
default:
break;
}
}
byte countDigits(int num){
byte count=0;
while(num){
num=num/10;
count++;
}
return count;
}
byte getDigit(unsigned int number, int digit) {
for (int i=0; i<digit-1; i++) {
number /= 10;
}
return number % 10;
}
void showNumber(int number, CRGB color[], bool toRight) {
FastLED.clear();
int nDigits = countDigits(number);
// minus 1 because displays start at 0
int j = 1;
for(int i = nDigits; i >= 0; i--){
if(toRight && number < 10) {
setNumber(i, getDigit(number, j++), color[i]);
} else {
setNumber(i - 1, getDigit(number, j++), color[i-1]);
}
}
FastLED.show();
}
int noemer = 0;
void loop() {
delay(1000);
showNumber(noemer, colors, true);
noemer++;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment