#include "Arduino_LED_Matrix.h" ArduinoLEDMatrix matrix; uint8_t heartFull[8][12] = { {0,1,1,0,0,1,1,0,0,0,0,0}, {1,1,1,1,1,1,1,1,0,0,0,0}, {1,1,1,1,1,1,1,1,0,0,0,0}, {0,1,1,1,1,1,1,0,0,0,0,0}, {0,0,1,1,1,1,0,0,0,0,0,0}, {0,0,0,1,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, }; uint8_t heartSmall[8][12] = { {0,0,1,0,0,1,0,0,0,0,0,0}, {0,1,1,1,1,1,1,0,0,0,0,0}, {0,1,1,1,1,1,1,0,0,0,0,0}, {0,0,1,1,1,1,0,0,0,0,0,0}, {0,0,0,1,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, }; uint8_t blank[8][12] = { {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0}, }; const int BPM = 72; bool beating = false; int beatCount = 0; const int totalBeats = 5; void beatHeart() { int beatInterval = 60000 / BPM; matrix.renderBitmap(heartFull, 8, 12); delay(80); matrix.renderBitmap(blank, 8, 12); delay(60); matrix.renderBitmap(heartSmall, 8, 12); delay(80); matrix.renderBitmap(blank, 8, 12); delay(beatInterval - 220); } void setup() { Serial.begin(9600); // USB → Serial Monitor Serial1.begin(9600); // Hardware UART ← from Nano on pin 0 matrix.begin(); matrix.renderBitmap(blank, 8, 12); Serial.println("UNO R4 READY — listening on Serial1 (pin 0)"); } void loop() { static unsigned long lastReport = 0; if (millis() - lastReport > 5000) { Serial.print("STATUS: Listening... beats so far: "); Serial.println(beatCount); lastReport = millis(); } if (Serial1.available()) { String msg = Serial1.readStringUntil('\n'); msg.trim(); Serial.print("RECEIVED: ["); Serial.print(msg); Serial.println("]"); if (msg == "PRESS") { Serial.println("PRESS confirmed — starting heartbeat!"); beating = true; beatCount = 0; } } if (beating) { beatHeart(); beatCount++; if (beatCount >= totalBeats) { beating = false; matrix.renderBitmap(blank, 8, 12); Serial.println("Heartbeat complete."); } } }