   delay(10);  
 }
 
+
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 /**
  * Command handlers for commands  that can be sent to this board via Serial, RF, or some other comm channel
  */
 
+
+/*
+ * Passes a byte from Serial "API" into the command handlers
+ */
+void cmd_handle_from_serial(byte commandByte ) {
+  switch(commandByte) {
+    case 'L': cmd_poof(0x01); break;
+    case 'R': cmd_poof(0x02); break;
+    case 'B': cmd_poof(0x03); break;
+    case 'A': cmd_save_current_seesaw_angle(); break;
+    default:
+      LOGN("Unsupported command from serial.");
+      break;
+  }
+}
+
 /*
  * Calibrates the trigger angles of the seesaw.
  */
+
 void cmd_save_current_seesaw_angle() {
   // NOTE: could call loop() here to update angle, but assuming its been updated recently as it is always called inside loop()
+  LOGN(F("Handling Command: Save SeeSaw Angle"));
   accelerometer->storeCurrentAngleForSide();
 }
 

 * 0x03 : Both Relays
 */
void cmd_poof(byte which) {
  if ( which & 0x01 ) {
    r0->setOnWithPattern(SINGLE_BUTTON_PRESS);    
  }
  if ( which & 0x02 ) {
    r1->setOnWithPattern(SINGLE_BUTTON_PRESS);    
  }
  r0->loop();
  r1->loop();
}

 */
void blinkLEDOnBootup() {
  pinMode(LED, OUTPUT);
  for ( int i = 0; i < 4; i++ ) {
    digitalWrite(LED, HIGH);
    delay(500);
    digitalWrite(LED, LOW);
