 const byte ackVal = 0b11110000;
 
 #if ROLE == ROLE_SENDER
+#define HEARTBEAT_THRESH_MILLIS 1000
+
 uint8_t triggerButtonPin = 2;
 uint8_t resetButtonPin = 3;
 
 Switch triggerButton = Switch(triggerButtonPin);
 Switch resetButton = Switch(resetButtonPin);
+
+uint8_t heartbeatLEDPin = 13;
+
+unsigned long lastHeartbeat = 0;
+bool isCommHealthy = false;
 
 #else
 #define TRIGGER_SERVO_ANGLE 90

            Serial.println("RESET");
            actuationServo.write(RESET_SERVO_ANGLE);
        }
        else {
            Serial.print("Received bad signal ");
            Serial.println((int)recvByte);


    // Require a long press to activate
    if (triggerButton.longPress()) {
        validateAck(sendByte(triggerVal));
    }
    else if (resetButton.pushed()) {
        validateAck(sendByte(resetVal));
    }
    else if (millis() - lastHeartbeat >= HEARTBEAT_THRESH_MILLIS) {
        // Re-use ack byte for heartbeat
        validateAck(sendByte(triggerVal));
    }

    digitalWrite(heartbeatLEDPin, isCommHealthy);
#else
    if (radio.available()) {
        byte recvByte;
