         //Log.Init(9600, gLogLevel);
         static const  char* levelStrings[]  = {"DISABLED","VERBOSE", "DEBUG", "INFO", "ERROR"};
         Serial.print("Log level is "); Serial.println(levelStrings[gLogLevel]);
+      case 'n':
+        SendMIDI(MIDICMD_NOTEON, 0x4a, 0x49);
+        break;
+      case 'm':
+        SendMIDI(MIDICMD_NOTEOFF, 0x4a, 0x49);
+        break;
       default:
         Log.Error("Ignorning unknown command: %c\n", c);
         

//int gLogLevel = LOG_LEVEL_VERBOSE;

int gAverageLightReading = 0;
const unsigned long gBaud = 250000;

// buf must be an array with length > segmentCount. This function can write to buf[segmentCount]
void drawMeter(int value, int maxValue, char * buf, char segmentSymbol = '=', size_t totalSegments = 80)

    buf[segmentCount] = 0;
}

void logMeter(Logging & Log, int value, int maxValue, int level = LOG_LEVEL_INFOS, char segmentSymbol = '=')
{
  char buf[81] = {0};
  drawMeter(value, maxValue, buf, segmentSymbol, sizeof(buf) - 1);
  switch (level)
  {
    case LOG_LEVEL_ERRORS:
      Log.Error("%s\n", buf);
      break;
    case LOG_LEVEL_INFOS:
      Log.Info("%s\n", buf);
      break;
    case LOG_LEVEL_DEBUG:
      Log.Debug("%s\n", buf);
      break;
    case LOG_LEVEL_VERBOSE:
      Log.Verbose("%s\n", buf);
      break;
    case LOG_LEVEL_NOOUTPUT:
    default:
      break;
  }
}

int sampleLight(int sampleCount, int interval=2)
