-
Notifications
You must be signed in to change notification settings - Fork 0
/
night_light.cpp
127 lines (92 loc) · 2.45 KB
/
night_light.cpp
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
120
121
122
123
124
125
126
127
#include <Arduino.h>
#include "src/timer/Timer.h"
#include "src/NeoPixel/Adafruit_NeoPixel.h"
#define ONOFF_PIN 9
#define LED_PIN 12
#define POWER_PIN 4
#define NEOPIXEL_PIN 3
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 30
// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 1000 // Time (in milliseconds) to pause between pixels
#define INITIAL_DELAY 10000
//Configuration config;
Timer timer;
bool is_on;
int current_pixel;
/* **** Logging ***** */
// uncomment define to enable logging to serial console
//#define LOG_ENABLED
void log(const char str[]) {
#ifdef LOG_ENABLED
Serial.print(str);
Serial.print("\n");
#endif
}
bool isButtonPressed() {
return !static_cast<bool>(digitalRead(ONOFF_PIN));
}
void setLEDOn(void) {
digitalWrite(LED_PIN, LOW);
}
void setLEDOff(void) {
digitalWrite(LED_PIN, HIGH);
}
void setNeoPixelOn(void) {
digitalWrite(POWER_PIN, HIGH);
delay(100);
pixels.begin();
}
void setNeoPixelOff(void) {
digitalWrite(POWER_PIN, LOW);
pinMode(NEOPIXEL_PIN, INPUT);
}
void turnOnAllPixels(){
for(int i=0; i<NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(50, 50, 30));
}
pixels.show();
}
/** Arduino setup function */
void setup() {
#ifdef LOG_ENABLED
Serial.begin(9600);
#endif
log("Start initializing inputs...");
// Configure ON_OFF Pin as input
pinMode(ONOFF_PIN, INPUT_PULLUP);
// Configure
pinMode(LED_PIN, OUTPUT);
setLEDOn();
// Configure Neopixel Power switch
pinMode(POWER_PIN, OUTPUT);
setNeoPixelOff();
is_on = false;
}
/** Arduino loop function */
void loop() {
timer.update();
setLEDOn();
if (isButtonPressed()) {
setLEDOff();
setNeoPixelOn();
turnOnAllPixels();
is_on = true;
current_pixel = NUMPIXELS;
delay(INITIAL_DELAY);
}
if (current_pixel==0) {
is_on = false;
setNeoPixelOff();
}
if (is_on) {
delay(DELAYVAL); // Pause before next pass through loop
current_pixel--;
pixels.setPixelColor(current_pixel, pixels.Color(0, 0, 0));
pixels.show();
}
}