diff --git a/README.md b/README.md index 119c21c..f78847a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # led-ring-clock -An unusual Arduino-based analog clock using an Adafruit NeoPixel ring as a display. +An Arduino-based analog clock using an Adafruit NeoPixel ring as a display. This sketch requires the FastLED library, the Wire library (built-in), the EEPROM library (built-in), and the Adafruit RTClib. diff --git a/led-ring-clock.ino b/led-ring-clock.ino index ea0c42e..a48a7fc 100644 --- a/led-ring-clock.ino +++ b/led-ring-clock.ino @@ -20,7 +20,7 @@ const int pinBrightness = 0; const int neoPixelRingSize = 24; // Number of NeoPixels in ring // Default colors -CRGB red = CRGB(255, 25, 0); +CRGB red = CRGB(255, 0, 0); CRGB orange = CRGB(255, 78, 0); CRGB yellow = CRGB(255, 237, 0); CRGB green = CRGB(0, 255, 23); @@ -40,9 +40,9 @@ const CRGB colorSchemes[colorSchemeMax + 1][4] = {{off, // Color when only one i {CRGB(0, 0, 0), CRGB(255, 255, 255), CRGB(255, 255, 255), CRGB(0, 130, 255)}, {CRGB(0, 0, 0), CRGB(255, 255, 255), CRGB(255, 255, 255), CRGB(255, 25, 0)}, {CRGB(0, 0, 0), CRGB(64, 0, 128), CRGB(255, 72, 0), CRGB(255, 164, 0)}, - {CRGB(0, 0, 0), CRGB(255, 25, 0), CRGB(255, 164, 0), CRGB(255, 224, 0)}, - {CRGB(0, 0, 0), CRGB(0, 0, 255), CRGB(0, 164, 255), CRGB(0, 224, 255)}, - {CRGB(0, 0, 0), CRGB(255, 72, 0), CRGB(255, 164, 0), CRGB(0, 255, 164)}}; + {CRGB(0, 0, 0), CRGB(255, 25, 0), CRGB(255, 84, 0), CRGB(255, 224, 0)}, + {CRGB(0, 0, 0), CRGB(0, 0, 255), CRGB(0, 84, 255), CRGB(0, 255, 255)}, + {CRGB(0, 0, 0), CRGB(255, 0, 96), CRGB(255, 84, 0), CRGB(0, 255, 164)}}; const int gradientMax = 1; const CRGB gradients[gradientMax + 1][6] = {{CRGB(72, 0, 96), CRGB(255, 72, 0), CRGB(255, 164, 0), CRGB(255, 224, 0), CRGB(0, 255, 164), CRGB(0, 208, 255)}, @@ -73,17 +73,20 @@ CRGB leds[neoPixelRingSize]; RTC_DS1307 rtc; int clockMode, colorScheme, gradient; -int clockModeMax = 5; +int clockModeMax = 4; int buttonState = 0; -const int minBrightness = 3; +const int minBrightness = 4; int counter = 0; int timer = 0; +const int debugMessageInterval = 1000; +int lastDebugMessageTime = 0; + CRGB handColor, hourColor, minuteColor, secondColor; void setup() { - Serial.begin(115200); + Serial.begin(57600); // Init FastLED FastLED.addLeds(leds, neoPixelRingSize); @@ -104,6 +107,28 @@ void setup() { hourColor = colorSchemes[colorScheme][1]; minuteColor = colorSchemes[colorScheme][2]; secondColor = colorSchemes[colorScheme][3]; + + // Serial debug + Serial.println("WS2812 LED Ring Clock by jackw01"); + + // Light mode + if (digitalRead(pinButton) == LOW) { + for (int i = 0; i < neoPixelRingSize; i++) leds[i] = white; + FastLED.show(); + delay(60000); + } + + // Test animation + for (int i = 0; i < neoPixelRingSize; i++) { + leds[i] = white; + FastLED.show(); + delay(40); + } + for (int i = 0; i < neoPixelRingSize; i++) { + leds[i] = off; + FastLED.show(); + delay(40); + } } void loop() { @@ -135,8 +160,12 @@ void loop() { } } - showClock(); + if (millis() > lastDebugMessageTime + debugMessageInterval) { + lastDebugMessageTime = millis(); + printDebugMessage(); + } + showClock(); delay(20); counter ++; @@ -148,8 +177,7 @@ void loop() { void showClock() { - int brightnessPotValue = map(analogRead(pinBrightness), 0, 1023, minBrightness, 255); - FastLED.setBrightness(brightnessPotValue); + FastLED.setBrightness(map(analogRead(pinBrightness), 0, 1023, minBrightness, 255)); if (clockMode == 0) ringClock(); else if (clockMode == 1) dotClock(); @@ -159,6 +187,30 @@ void showClock() { else if (clockMode == 5) gradientHandsClock(); } +void printDebugMessage() { + + Serial.print("Current date/time: "); + DateTime now = rtc.now(); + Serial.print(now.year(), DEC); + Serial.print("/"); + Serial.print(now.month(), DEC); + Serial.print("/"); + Serial.print(now.day(), DEC); + Serial.print(" "); + Serial.print(now.hour(), DEC); + Serial.print(":"); + Serial.print(now.minute(), DEC); + Serial.print(":"); + Serial.print(now.second(), DEC); + Serial.println(); + Serial.print("Display mode: "); + Serial.println(clockMode); + Serial.print("Color scheme: "); + Serial.println(colorScheme); + Serial.print("Brightness: "); + Serial.println(map(analogRead(pinBrightness), 0, 1023, minBrightness, 255)); +} + // Show a ring clock void ringClock() { @@ -180,12 +232,9 @@ void ringClock() { newSecond = int(map(now.second(), 0, 59, 0, neoPixelRingSize - 1)); if (newMinute > newHour) { - for (int i = 0; i < newMinute; i++) leds[i] = minuteColor; for (int i = 0; i < newHour; i++) leds[i] = hourColor; - } else { - for (int i = 0; i < newHour; i++) leds[i] = hourColor; for (int i = 0; i < newMinute; i++) leds[i] = minuteColor; }