@@ -47,6 +47,73 @@ const uint32_t cloud[][4] = {
47
47
}
48
48
};
49
49
50
+ const uint32_t snake[][4 ] = {
51
+ { 0xffffffff , 0xffffffff , 0xffffffff , 66 },
52
+ { 0x7fffffff , 0xffffffff , 0xfffff7ff , 66 },
53
+ { 0x3fe7ffff , 0xffffffff , 0xff7ff3fe , 66 },
54
+ { 0x1fc3fe7f , 0xfffffff7 , 0xff3fe1fc , 66 },
55
+ { 0xf81fc3f , 0xe7ff7ff3 , 0xfe1fc0f8 , 66 },
56
+ { 0x500f81f , 0xc3fe3fe1 , 0xfc0f8070 , 66 },
57
+ { 0x500f , 0x81fc1fc0 , 0xf8070020 , 66 },
58
+ { 0x5 , 0xf80f80 , 0x70020000 , 66 },
59
+ { 0x5 , 0xa80880 , 0x50020000 , 600 },
60
+ { 0xd812 , 0x41040880 , 0x50020000 , 200 },
61
+ { 0x5 , 0xa80880 , 0x50020000 , 600 },
62
+ { 0xd812 , 0x41040880 , 0x50020000 , 200 },
63
+ { 0x5 , 0xa80880 , 0x50020000 , 130 },
64
+ { 0x45 , 0xa80880 , 0x50020000 , 130 },
65
+ { 0x45 , 0xa80880 , 0x10060000 , 130 },
66
+ { 0x45 , 0xa80080 , 0x100e0000 , 130 },
67
+ { 0x45 , 0x280080 , 0x101e0000 , 130 },
68
+ { 0x41 , 0x280080 , 0x103e0000 , 130 },
69
+ { 0x41 , 0x80080 , 0x107e0000 , 130 },
70
+ { 0x40 , 0x80084 , 0x107e0000 , 130 },
71
+ { 0x40 , 0x4084 , 0x107e0000 , 130 },
72
+ { 0x40 , 0x4004084 , 0x107e0000 , 130 },
73
+ { 0x40 , 0x4204084 , 0x107e0000 , 130 },
74
+ { 0x60 , 0x4204004 , 0x107e0000 , 130 },
75
+ { 0x70 , 0x4204004 , 0x7e0000 , 130 },
76
+ { 0x70 , 0x5204004 , 0x7c0000 , 130 },
77
+ { 0x70 , 0x5a04004 , 0x780000 , 130 },
78
+ { 0x70 , 0x5e04004 , 0x700000 , 130 },
79
+ { 0x70 , 0x45e04004 , 0x700000 , 130 },
80
+ { 0x70 , 0x45f04004 , 0x600000 , 130 },
81
+ { 0x71 , 0x45f04004 , 0x400000 , 130 },
82
+ { 0x71 , 0xc5f04004 , 0x400000 , 130 },
83
+ { 0x71 , 0xc5f04004 , 0x400002 , 130 },
84
+ { 0x71 , 0xe5f04004 , 0x2 , 130 },
85
+ { 0x71 , 0xe5f24000 , 0x2 , 130 },
86
+ { 0x71 , 0xe5f20020 , 0x2 , 130 },
87
+ { 0x71 , 0xe1f20020 , 0x2000002 , 130 },
88
+ { 0x71 , 0xe1f22020 , 0x2002002 , 130 },
89
+ { 0x31 , 0xe1f22020 , 0x2002006 , 130 },
90
+ { 0x11 , 0xe1f22020 , 0x200200e , 130 },
91
+ { 0x1 , 0xe1f22020 , 0x200201e , 130 },
92
+ { 0x1 , 0xe0f22020 , 0x200203e , 130 },
93
+ { 0x1 , 0xe0722020 , 0x200207e , 130 },
94
+ { 0x1 , 0xe0322020 , 0x20020fe , 130 },
95
+ { 0x1 , 0xe0122020 , 0x20820fe , 130 },
96
+ { 0x1 , 0xe0022020 , 0x21820fe , 130 },
97
+ { 0x0 , 0xe0022022 , 0x221820fe , 130 },
98
+ { 0x0 , 0x60022022 , 0x221820fe , 130 },
99
+ { 0x0 , 0x21022022 , 0x221820fe , 130 },
100
+ { 0x0 , 0x1822022 , 0x221820fe , 130 },
101
+ { 0x0 , 0x1802422 , 0x2218a0fe , 130 },
102
+ { 0x0 , 0x1802402 , 0x2218a0fe , 130 },
103
+ { 0x0 , 0x1802402 , 0x2019a0fe , 130 },
104
+ { 0x0 , 0x1802442 , 0x201980fe , 130 },
105
+ { 0x0 , 0x1802442 , 0x241980fc , 130 },
106
+ { 0x4000 , 0x1802442 , 0x241980f8 , 130 },
107
+ { 0x4000 , 0x1882442 , 0x241980f0 , 130 },
108
+ { 0x4000 , 0x1982442 , 0x241980e0 , 130 },
109
+ { 0x4001 , 0x1982442 , 0x241980c0 , 130 },
110
+ { 0x6001 , 0x1982442 , 0x24198080 , 130 },
111
+ { 0x6001 , 0x1982442 , 0x24198000 , 130 },
112
+ { 0x6001 , 0x1982442 , 0x24198000 , 130 },
113
+ { 0x6001 , 0x1982442 , 0x24198000 , 130 },
114
+ { 0x6001 , 0x1982442 , 0x24198000 , 600 }
115
+ };
116
+
50
117
#endif
51
118
52
119
@@ -55,6 +122,14 @@ const uint32_t cloud[][4] = {
55
122
#define SLOWBLINK_INTERVAL 2000
56
123
#define ALWAYS_ON_INTERVAL -1
57
124
125
+ /* The BLE_AVAILABLE animation follows the pattern:
126
+ * _|¯|_|¯|_|¯¯¯¯¯¯¯¯¯¯¯|_
127
+ * HIGH: led on
128
+ * LOW: led off
129
+ */
130
+ #define N_IMPULSES_START_ON_PERIOD 5
131
+ #define N_IMPULSES_END_ON_PERIOD 15
132
+
58
133
LEDFeedbackClass &LEDFeedbackClass::getInstance () {
59
134
static LEDFeedbackClass instance;
60
135
return instance;
@@ -116,8 +191,9 @@ void LEDFeedbackClass::setMode(LEDFeedbackMode mode) {
116
191
_ledPin = GREEN_LED;
117
192
#endif
118
193
#ifdef BOARD_HAS_LED_MATRIX
119
- matrix.loadFrame (bluetooth);
120
- _framePtr = (uint32_t *)bluetooth;
194
+ _framePtr = nullptr ;
195
+ matrix.loadSequence (snake);
196
+ matrix.play (true );
121
197
#endif
122
198
_ledChangeInterval = HEARTBEAT_INTERVAL;
123
199
_count = 0 ;
@@ -172,14 +248,15 @@ void LEDFeedbackClass::setMode(LEDFeedbackMode mode) {
172
248
#ifdef BOARD_HAS_RGB
173
249
turnOFF ();
174
250
_ledPin = RED_LED;
251
+ _ledChangeInterval = SLOWBLINK_INTERVAL;
175
252
#else
176
253
_ledPin = GREEN_LED;
254
+ _ledChangeInterval = FASTBLINK_INTERVAL;
177
255
#endif
178
256
#ifdef BOARD_HAS_LED_MATRIX
179
257
_framePtr = (uint32_t *)LEDMATRIX_EMOJI_SAD;
180
258
matrix.loadFrame (LEDMATRIX_EMOJI_SAD);
181
259
#endif
182
- _ledChangeInterval = FASTBLINK_INTERVAL;
183
260
}
184
261
break ;
185
262
default :
@@ -212,16 +289,17 @@ void LEDFeedbackClass::update() {
212
289
213
290
if (millis () - _lastUpdate > _ledChangeInterval/2 ) {
214
291
_lastUpdate = millis ();
292
+ // Implement the pattern for BLE_AVAILABLE
215
293
if (_mode == LEDFeedbackMode::BLE_AVAILABLE) {
216
294
if (_count == 0 ){
217
295
turnOFF ();
218
296
_count++;
219
297
return ;
220
- }else if (_count >= 5 && _count < 15 ){
298
+ }else if (_count >= N_IMPULSES_START_ON_PERIOD && _count < N_IMPULSES_END_ON_PERIOD ){
221
299
turnON ();
222
300
_count++;
223
301
return ;
224
- }else if (_count >= 15 ){
302
+ }else if (_count >= N_IMPULSES_END_ON_PERIOD ){
225
303
_count = 0 ;
226
304
return ;
227
305
}else {
0 commit comments