|
@@ -41,7 +41,9 @@ unsigned long outro_start;
|
41
|
41
|
#define YOURBIRD_X 53
|
42
|
42
|
#define YOURBIRD_Y 5
|
43
|
43
|
|
44
|
|
-
|
|
44
|
+#define STATUS_SEND_MILLIS 1000
|
|
45
|
+#define STATUS_RECEIVE_MILLIS 1058 // 2X23X23 to make things resonate
|
|
46
|
+#define STATUS_COLOR TFT_SKYBLUE
|
45
|
47
|
|
46
|
48
|
#define SEND_INTERVAL 3000
|
47
|
49
|
unsigned long next_send = 0;
|
|
@@ -71,9 +73,9 @@ enum frameType {
|
71
|
73
|
};
|
72
|
74
|
|
73
|
75
|
frameType frames[NUM_FRAMES] = {
|
74
|
|
- FRAME_ME, FRAME_US, FRAME_U,
|
75
|
|
- FRAME_U, FRAME_US, FRAME_U,
|
76
|
|
- FRAME_U, FRAME_US, FRAME_ME
|
|
76
|
+ FRAME_ME, FRAME_ME, FRAME_US,
|
|
77
|
+ FRAME_U, FRAME_U, FRAME_US,
|
|
78
|
+ FRAME_US, FRAME_US, FRAME_US
|
77
|
79
|
};
|
78
|
80
|
|
79
|
81
|
const unsigned short *frame2image(frameType frame, bool is_salam, bool metta_from_me, bool metta_from_you) {
|
|
@@ -102,6 +104,7 @@ TFT_eSprite leftSprite = TFT_eSprite(&tft);
|
102
|
104
|
TFT_eSprite rightSprite = TFT_eSprite(&tft);
|
103
|
105
|
TFT_eSprite mybirdSprite = TFT_eSprite(&tft);
|
104
|
106
|
TFT_eSprite yourbirdSprite = TFT_eSprite(&tft);
|
|
107
|
+TFT_eSprite statusSprite = TFT_eSprite(&tft);
|
105
|
108
|
|
106
|
109
|
|
107
|
110
|
// lifted from MacAddress.c
|
|
@@ -207,6 +210,9 @@ void setup() {
|
207
|
210
|
yourbirdSprite.createSprite(YOURBIRD_WIDTH, YOURBIRD_HEIGHT);
|
208
|
211
|
yourbirdSprite.setSwapBytes(true);
|
209
|
212
|
yourbirdSprite.pushImage(0, 0, YOURBIRD_WIDTH, YOURBIRD_HEIGHT, yourbird);
|
|
213
|
+
|
|
214
|
+ statusSprite.createSprite(240, 18);
|
|
215
|
+ statusSprite.setSwapBytes(true);
|
210
|
216
|
}
|
211
|
217
|
|
212
|
218
|
void do_scroll(const unsigned short *left_image, const unsigned short *right_image, unsigned long start_time, unsigned long freeze_duration, unsigned long scroll_duration, bool is_reverse) {
|
|
@@ -230,6 +236,21 @@ void do_scroll(const unsigned short *left_image, const unsigned short *right_ima
|
230
|
236
|
}
|
231
|
237
|
}
|
232
|
238
|
|
|
239
|
+void do_status(bool is_send) {
|
|
240
|
+ unsigned long cycle = is_send ? STATUS_SEND_MILLIS : STATUS_RECEIVE_MILLIS;
|
|
241
|
+ float quotient = float(millis() % cycle) / cycle;
|
|
242
|
+ if (!is_send) {
|
|
243
|
+ quotient = 1.0 - quotient;
|
|
244
|
+ }
|
|
245
|
+ int32_t r_in = 130 * quotient; // a bit larger than 240/2
|
|
246
|
+ int32_t r_out = 130 * pow(quotient, 0.75); // grows faster
|
|
247
|
+
|
|
248
|
+ statusSprite.fillSprite(TFT_BLACK);
|
|
249
|
+ statusSprite.fillEllipse(120, 9, r_out, 10, STATUS_COLOR);
|
|
250
|
+ statusSprite.fillEllipse(120, 9, r_in, 10, TFT_BLACK);
|
|
251
|
+ statusSprite.pushToSprite(&background, 0, 116, TFT_BLACK);
|
|
252
|
+}
|
|
253
|
+
|
233
|
254
|
void loop() {
|
234
|
255
|
unsigned long nowmillis = millis();
|
235
|
256
|
if (digitalRead(BUTTON1PIN) == LOW) {
|
|
@@ -264,16 +285,25 @@ void loop() {
|
264
|
285
|
0, 0, 240, 135,
|
265
|
286
|
frame2image(frames[current_frame], is_salam, metta_from_me_since, metta_from_you));
|
266
|
287
|
|
267
|
|
- // mybird (steady, pulse if metta_from_me_Since)
|
268
|
|
- if (!metta_from_me_since || frames[current_frame] == FRAME_ME) {
|
|
288
|
+ // mybird (always on)
|
|
289
|
+ if (true /* !metta_from_me_since || frames[current_frame] == FRAME_ME || frames[current_frame] == FRAME_US */) {
|
269
|
290
|
mybirdSprite.pushToSprite(&background, MYBIRD_X, MYBIRD_Y, TFT_BLACK);
|
270
|
291
|
}
|
271
|
292
|
|
272
|
|
- // yourbird (steady if nearby, heart beat if metta_from_you)
|
273
|
|
- if (nearby && (!metta_from_you || frames[current_frame] == FRAME_U)) {
|
|
293
|
+ // yourbird (if nearby)
|
|
294
|
+ if (nearby /* && (!metta_from_you || frames[current_frame] == FRAME_U || frames[current_frame] == FRAME_US) */) {
|
274
|
295
|
yourbirdSprite.pushToSprite(&background, YOURBIRD_X, YOURBIRD_Y, TFT_BLACK);
|
275
|
296
|
}
|
276
|
297
|
|
|
298
|
+ // "send" status
|
|
299
|
+ if (metta_from_me_since) {
|
|
300
|
+ do_status(true);
|
|
301
|
+ }
|
|
302
|
+
|
|
303
|
+ // "receive" status
|
|
304
|
+ if (metta_from_you) {
|
|
305
|
+ do_status(false);
|
|
306
|
+ }
|
277
|
307
|
|
278
|
308
|
// Scroll overlays
|
279
|
309
|
if (outro_start) { // Outro scroll overlay
|