forked from thoralt/esp8266wordclock
-
Notifications
You must be signed in to change notification settings - Fork 6
/
ledfunctions.h
119 lines (104 loc) · 3.57 KB
/
ledfunctions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// ESP8266 Wordclock
// Copyright (C) 2016 Thoralt Franz, https://github.com/thoralt
//
// See ledfunctions.cpp for description.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef _LEDFUNCTIONS_H_
#define _LEDFUNCTIONS_H_
#include <Adafruit_NeoPixel.h>
#include <stdint.h>
#include <vector>
#include "config.h"
#include "matrixobject.h"
#include "starobject.h"
#include "particle.h"
typedef struct _leds_template_t
{
int param0, param1, param2;
const std::vector<int> LEDs;
} leds_template_t;
typedef struct _xy_t
{
int xTarget, yTarget, x, y, delay, speed, counter;
} xy_t;
#define NUM_MATRIX_OBJECTS 25
#define NUM_STARS 10
#define NUM_BRIGHTNESS_CURVES 2
class LEDFunctionsClass
{
public:
LEDFunctionsClass();
~LEDFunctionsClass();
void begin(int pin);
void process();
void setTime(int h, int m, int s, int ms);
void setBrightness(int brightness);
void setMode(DisplayMode newMode);
void show();
static int getOffset(int x, int y);
static const int width = 11;
static const int height = 10;
uint8_t currentValues[NUM_PIXELS * 3];
private:
static const std::vector<leds_template_t> hoursTemplate;
static const std::vector<leds_template_t> minutesTemplate;
DisplayMode mode = DisplayMode::plain;
std::vector<Particle*> particles;
std::vector<xy_t> arrivingLetters;
std::vector<xy_t> leavingLetters;
std::vector<MatrixObject> matrix;
std::vector<StarObject> stars;
uint8_t targetValues[NUM_PIXELS * 3];
Adafruit_NeoPixel *pixels = NULL;
int heartBrightness = 0;
int heartState = 0;
int brightness = 96;
int h = 0;
int m = 0;
int s = 0;
int ms = 0;
int lastM = -1;
int lastH = -1;
void fillBackground(int seconds, int milliseconds, uint8_t *buf);
void renderRed();
void renderGreen();
void renderBlue();
void renderMatrix();
void renderHeart();
void renderStars();
void renderUpdate();
void renderUpdateComplete();
void renderUpdateError();
void renderHourglass(uint8_t animationStep, bool green);
void renderWifiManager();
void renderTime(uint8_t *target, int h, int m, int s, int ms);
void renderFlyingLetters();
void prepareFlyingLetters(uint8_t *source);
void renderExplosion();
void prepareExplosion(uint8_t *source);
void fade();
void set(const uint8_t *buf, palette_entry palette[]);
void set(const uint8_t *buf, palette_entry palette[], bool immediately);
void setBuffer(uint8_t *target, const uint8_t *source, palette_entry palette[]);
// this mapping table maps the linear memory buffer structure used throughout the
// project to the physical layout of the LEDs
static const uint32_t PROGMEM mapping[NUM_PIXELS];
static const uint32_t PROGMEM brightnessCurveSelect[NUM_PIXELS];
static const uint32_t PROGMEM brightnessCurvesR[256*NUM_BRIGHTNESS_CURVES];
static const uint32_t PROGMEM brightnessCurvesG[256*NUM_BRIGHTNESS_CURVES];
static const uint32_t PROGMEM brightnessCurvesB[256*NUM_BRIGHTNESS_CURVES];;
};
extern LEDFunctionsClass LED;
#endif