aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruser <user@node5.net>2024-01-04 22:36:40 +0100
committeruser <user@node5.net>2024-01-04 22:36:40 +0100
commit1478bb504bb93ad7f3b53df69e720e97d4a13939 (patch)
tree5da34f4877ae7d62936a010908969ac8dd0ccfc4
parente1841adc31423c5f24a9272a0452adc7216c1f80 (diff)
make animations more tasteful
-rw-r--r--src/main.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 4f18fe3..577f643 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -132,7 +132,7 @@ void display_number(int number) {
}
// Instantly changes. Binary, no fade
-void display_symbol(int digit_index, uint8_t symbol) {
+void display_symbol(int digit_index, uint8_t symbol, bool clear=true) {
// Counts up by bitshifting
uint8_t seg_counter = 1;
for (int segment_index = 0; segment_index < SEGMENT_COUNT; segment_index++) {
@@ -143,23 +143,26 @@ void display_symbol(int digit_index, uint8_t symbol) {
if (symbol & seg_counter) {
// Turn on LED
leds[led_index] = CHSV(hue, SATURATION, max_brightness);
- FastLED.show();
+ } else if (clear){
+ // Turn off LED
+ leds[led_index] = CRGB::Black;
}
// Increment segment counter used with bit mask comparison by bitshifting
seg_counter = seg_counter<<1;
}
+
+ FastLED.show();
}
// Change hue of 0-7 segments per frame each digit displays the same
-void play_animation(uint8_t *animation, int animation_size, int segment_delay) {
+void play_animation(uint8_t *animation, int animation_size, int segment_delay, bool clear=true, int8_t hue_shift=4) {
for (int i = 0; i < animation_size; i++){
for (int digit_index = 0; digit_index < 4; digit_index++) {
- display_symbol(digit_index, animation[i]);
+ display_symbol(digit_index, animation[i], clear);
}
- hue += 16; // Increment HSV hue a lot for rainbow vomit
- FastLED.show();
+ hue += hue_shift; // Increment HSV hue a lot for rainbow vomit
delay(segment_delay);
}
}
@@ -178,8 +181,8 @@ void setup() {
FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, LED_COUNT); // GRB ordering is assumed
// Turn off all LEDs
- FastLED.clear();
-
+ FastLED.clear();
+
Serial.begin(9600);
setServer(NTP_SERVER);
@@ -192,7 +195,7 @@ void setup() {
// Play animation untill connected to WiFi, or animation timeout is reached
// Will continue attempting to connect to WiFi
if (millis() < WIFI_CONN_ANI_TIMEOUT) {
- play_animation(spin_animation, sizeof(spin_animation), 100);
+ play_animation(spin_animation, sizeof(spin_animation), 100, false);
} else {
// Turn off all LEDs
FastLED.clear();
@@ -203,7 +206,7 @@ void setup() {
hue = 0;
// Turn off all LEDs
- FastLED.clear();
+ FastLED.clear();
Serial.println();
Serial.print("Connected, IP address: ");
@@ -242,9 +245,12 @@ void loop() {
int minutes = CopenhagenTime.dateTime("i").toInt();
// Play animation 5 seconds before hour change
- if(minutes == 59 && seconds >= 55) {
- play_animation(dual_spin_animation, sizeof(spin_animation), 50);
- FastLED.clear();
+ if(minutes == 59 && seconds >= 55 && seconds <= 56) {
+ for (int i = 0; i < 4; i++){
+ play_animation(dual_spin_animation, sizeof(dual_spin_animation), 120, true, 0); // No hue shift
+ }
+ FastLED.clear(); // Remove animation frame
+ update_clock(); // Display hour change
}
// Do nothing untill minute change