Professional Documents
Culture Documents
h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <FastLED.h>
#define LED_PIN 5
#define NUM_LEDS 120
#define BRIGHTNESS 255
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
// fast simulation
bool isSimOn = false;
bool isMarksOn = true;
bool isFadeOn = false;
int period = 100;
void setup() {
Serial.begin(115200);
// FastLED init
FastLED.addLeds<LED_TYPE, LED_PIN,
COLOR_ORDER>(leds,
NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
fill_solid(leds, NUM_LEDS, CHSV(255, 255, 0));
// WiFiManager
// Local initialization. Once its business is
done, there is no need to keep it around
WiFiManager wifiManager;
wifiManager.autoConnect("AutoConnectAP");
Serial.println("Connected.");
timeClient.begin();
server.on("/", handle_main);
server.on("/sim", handle_sim);
server.on("/time", handle_time);
server.on("/marks", handle_marks);
server.on("/fade", handle_fade);
server.begin();
Serial.println("HTTP server started");
timeClient.update();
Serial.println("NTP server updated");
// power-up safety delay
delay(2000);
}
void loop() {
server.handleClient();
handleClock();
FastLED.show();
if (isSimOn) simulateFast();
}
void simulateFast() {
EVERY_N_MILLISECONDS(period) {
utcOffsetInSeconds += 60;
timeClient.setTimeOffset(utcOffsetInSeconds);
Serial.println(timeClient.getFormattedTime());
}
}
void handleClock() {
timeClient.update();
if (isFadeOn) {
fadeToBlackBy(leds, NUM_LEDS, 1);
} else {
FastLED.clear();
}
if (isMarksOn) {
leds[29].setRGB(25, 25, 25);
leds[90].setRGB(25, 25, 25); //0
leds[44].setRGB(25, 25, 25);
leds[75].setRGB(25, 25, 25); //15
leds[59].setRGB(25, 25, 25);
leds[60].setRGB(25, 25, 25); //30
leds[14].setRGB(25, 25, 25);
leds[105].setRGB(25, 25, 25); //45
}
leds[hrPos].setRGB(0, 0, 255);
}
void handle_sim() {
isSimOn = !isSimOn;
if (!isSimOn) timeClient.setTimeOffset(10800);
server.send(200, "text/plain", isSimOn ? "Sim on"
: "Sim off");
}
void handle_marks() {
isMarksOn = !isMarksOn;
server.send(200, "text/plain", isMarksOn ? "Marks
on" : "Marks off");
}
void handle_fade() {
isFadeOn = !isFadeOn;
server.send(200, "text/plain", isFadeOn ? "Fade
on" : "Fade off");
}
void handle_main() {
server.send(200, "text/plain", "main");
}
void handle_time() {
timeClient.update();
BLUE - Hour
RED - Second