Browse Source

Add metta send/receive status line

Birds don't blink (not used for metta send/receive status)
master
The Dod 3 months ago
parent
commit
2ad8702247
1 changed files with 38 additions and 8 deletions
  1. 38
    8
      talismetta/talismetta.ino

+ 38
- 8
talismetta/talismetta.ino View File

41
 #define YOURBIRD_X 53
41
 #define YOURBIRD_X 53
42
 #define YOURBIRD_Y 5
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
 #define SEND_INTERVAL 3000
48
 #define SEND_INTERVAL 3000
47
 unsigned long next_send = 0;
49
 unsigned long next_send = 0;
71
 };
73
 };
72
 
74
 
73
 frameType frames[NUM_FRAMES] = {
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
 const unsigned short *frame2image(frameType frame, bool is_salam, bool metta_from_me, bool metta_from_you) {
81
 const unsigned short *frame2image(frameType frame, bool is_salam, bool metta_from_me, bool metta_from_you) {
102
 TFT_eSprite rightSprite = TFT_eSprite(&tft);
104
 TFT_eSprite rightSprite = TFT_eSprite(&tft);
103
 TFT_eSprite mybirdSprite = TFT_eSprite(&tft);
105
 TFT_eSprite mybirdSprite = TFT_eSprite(&tft);
104
 TFT_eSprite yourbirdSprite = TFT_eSprite(&tft);
106
 TFT_eSprite yourbirdSprite = TFT_eSprite(&tft);
107
+TFT_eSprite statusSprite = TFT_eSprite(&tft);
105
 
108
 
106
 
109
 
107
 // lifted from MacAddress.c
110
 // lifted from MacAddress.c
207
   yourbirdSprite.createSprite(YOURBIRD_WIDTH, YOURBIRD_HEIGHT);
210
   yourbirdSprite.createSprite(YOURBIRD_WIDTH, YOURBIRD_HEIGHT);
208
   yourbirdSprite.setSwapBytes(true);
211
   yourbirdSprite.setSwapBytes(true);
209
   yourbirdSprite.pushImage(0, 0, YOURBIRD_WIDTH, YOURBIRD_HEIGHT, yourbird);
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
 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) {
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
   }
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
 void loop() {
254
 void loop() {
234
   unsigned long nowmillis = millis();
255
   unsigned long nowmillis = millis();
235
   if (digitalRead(BUTTON1PIN) == LOW) {
256
   if (digitalRead(BUTTON1PIN) == LOW) {
264
     0, 0, 240, 135,
285
     0, 0, 240, 135,
265
     frame2image(frames[current_frame], is_salam, metta_from_me_since, metta_from_you));
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
     mybirdSprite.pushToSprite(&background, MYBIRD_X, MYBIRD_Y, TFT_BLACK);
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
     yourbirdSprite.pushToSprite(&background, YOURBIRD_X, YOURBIRD_Y, TFT_BLACK);
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
   // Scroll overlays
308
   // Scroll overlays
279
   if (outro_start) { // Outro scroll overlay
309
   if (outro_start) { // Outro scroll overlay

Loading…
Cancel
Save