5 #include <ESP8266WiFi.h>
7 #include <Adafruit_NeoPixel.h>
13 static uint16_t hue = 0; // 0-359
14 uint8_t saturation = 100; // 0-100
15 uint8_t lightness = 50; // 0-100
16 unsigned int PColor=0;
18 const char *ssid = "SSID";
19 const char *password = "PASSWORD";
21 const long utcOffsetInSeconds = 3600*-5;
24 NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
25 Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
28 //const int dataPin = 13; //Outputs the byte to transfer
29 //const int loadPin = 11; //3 //Controls the internal transference of data in SN74HC595 internal registers
30 //const int clockPin = 12; // 4//Generates the clock signal to control the transference of data
33 //const int dataPin = 14; //Outputs the byte to transfer
34 //const int loadPin = 0; //3 //Controls the internal transference of data in SN74HC595 internal registers
35 //const int clockPin = 4; // 4//Generates the clock signal to control the transference of data
38 const int dataPin = 14; //D5 //Outputs the byte to transfer
39 const int loadPin = 0; //D3 //3 //Controls the internal transference of data in SN74HC595 internal registers
40 const int clockPin = 4; //D2 // 4//Generates the clock signal to control the transference of data
59 pinMode(dataPin, OUTPUT);
60 pinMode(loadPin, OUTPUT);
61 pinMode(clockPin, OUTPUT);
62 digitalWrite(loadPin, 0);
63 shiftOut(dataPin, clockPin, LSBFIRST, 0b0000000000000000);
64 digitalWrite(loadPin, 1);
66 WiFi.begin(ssid, password);
69 while ( WiFi.status() != WL_CONNECTED ) {
71 digitalWrite(loadPin, 0);
72 shiftOut(dataPin, clockPin, LSBFIRST, digits[i]); //right
73 shiftOut(dataPin, clockPin, LSBFIRST, digits[b]); //left
74 digitalWrite(loadPin, 1);
81 digitalWrite(loadPin, 0);
82 shiftOut(dataPin, clockPin, LSBFIRST, 0b00001010); //right
83 shiftOut(dataPin, clockPin, LSBFIRST, 0b10011111); //left
84 digitalWrite(loadPin, 1);
91 strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
92 strip.show(); // Turn OFF all pixels ASAP
93 strip.setBrightness(25); // Set BRIGHTNESS to about 1/5 (max = 255)
98 for (unsigned int j=0; j<5; j++) {
99 for (unsigned int i=0; i<8; i++) {
100 digitalWrite(loadPin, 0);
102 shiftOut(dataPin, clockPin, LSBFIRST, disp); //right
103 shiftOut(dataPin, clockPin, LSBFIRST, disp); //left
104 digitalWrite(loadPin, 1);
112 for (unsigned int i=0; i<20; i++) {
113 digitalWrite(loadPin, 0);
114 shiftOut(dataPin, clockPin, LSBFIRST, digits[random(0,9)]); //right
115 shiftOut(dataPin, clockPin, LSBFIRST, digits[random(0,9)]); //left
116 digitalWrite(loadPin, 1);
122 * Map HSL color space to RGB
124 * Totally borrowed from:
125 * http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl/
127 * Probably not the most efficient solution, but
128 * it get's the job done.
130 uint32_t hsl(uint16_t ih, uint8_t is, uint8_t il) {
132 float h, s, l, t1, t2, tr, tg, tb;
135 h = (ih % 360) / 360.0;
136 s = constrain(is, 0, 100) / 100.0;
137 l = constrain(il, 0, 100) / 100.0;
141 return ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
144 if ( l < 0.5 ) t1 = l * (1.0 + s);
145 else t1 = l + s - l * s;
152 r = hsl_convert(tr, t1, t2);
153 g = hsl_convert(tg, t1, t2);
154 b = hsl_convert(tb, t1, t2);
156 // NeoPixel packed RGB color
157 return ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
163 uint8_t hsl_convert(float c, float t1, float t2) {
166 else if ( c > 1 ) c-=1;
168 if ( 6 * c < 1 ) c = t2 + ( t1 - t2 ) * 6 * c;
169 else if ( 2 * c < 1 ) c = t1;
170 else if ( 3 * c < 2 ) c = t2 + ( t1 - t2 ) * ( 2/3.0 - c ) * 6;
173 return (uint8_t)(c*255);
180 unsigned int Hour = timeClient.getHours();
181 unsigned int Minute = timeClient.getMinutes();
182 unsigned int Seconds = timeClient.getSeconds();
183 unsigned int Hour1 = (Hour/10U) % 10;
184 unsigned int Hour2 = (Hour/1U) % 10;
185 unsigned int Minute1 = (Minute/10U) % 10;
186 unsigned int Minute2 = (Minute/1U) % 10;
187 digitalWrite(loadPin, 0);
188 shiftOut(dataPin, clockPin, LSBFIRST, 0b0000000000000000);
189 digitalWrite(loadPin, 1);
193 for (b=0; b<6; b++) {
194 strip.setPixelColor(b, hsl(PColor, saturation, lightness));
203 digitalWrite(loadPin, 0);
204 shiftOut(dataPin, clockPin, LSBFIRST, digits[Hour2]); //right
205 shiftOut(dataPin, clockPin, LSBFIRST, digits[Hour1]); //left
206 digitalWrite(loadPin, 1);
208 digitalWrite(loadPin, 0);
209 shiftOut(dataPin, clockPin, LSBFIRST, digits[Minute2]); //right
210 shiftOut(dataPin, clockPin, LSBFIRST, digits[Minute1]); //left
211 digitalWrite(loadPin, 1);