 ////////////////////////////////////////////////////////////////////////////////
 
 void sendError(const char *message) {
+    writeRGBColor(ORANGE);    
+    
     OSCMessage m("/exo/tt/error");
     m.add(message);
 
     sendOSC(m);
+    
+    writeRGBColor(RED);        
 }
 
 void sendInfo(const char *message) {
+    writeRGBColor(BLUE);        
+
     OSCMessage m("/exo/tt/info");
     m.add(message);
 
     sendOSC(m);
+    
+    writeRGBColor(CYAN);        
 }
 
 void sendKeyEvent(const char *keys) {
     OSCMessage m("/exo/tt/keys");
     m.add(keys);
 
-    sendOSC(m);  
+    sendOSC(m);
 }
 
 void sendLightLevel() {

////////////////////////////////////////////////////////////////////////////////

void receiveMorseMessage(class OSCMessage &m) {
  sendInfo("received morse message");
    if (m.isString(0)) {
        int length = m.getDataLength(0);
        char buffer[length+1];
        m.getString(0, buffer, length+1);   
        
        unsigned long lastColor = currentRGBColor;
        writeRGBColor(YELLOW);
        playMorseString(buffer, morseStopTest); 
        writeRGBColor(lastColor);
    } else {
        sendError("expected string argument to Morse code control");
    }  
}

void receivePhotoGetMessage(class OSCMessage &m) {
    sampler_photoresistor.reset();
    sampler_photoresistor.beginSample();
    sampler_photoresistor.measure();

}

void sendPingReply() {
    writeRGBColor(YELLOW);        

    OSCMessage m("/exo/tt/ping/reply");
    m.add((int32_t) micros());
    
    sendOSC(m);
    
    writeRGBColor(GREEN);        
}


////////////////////////////////////////////////////////////////////////////////
  
void loop() {    
#ifdef USE_BLUETOOTH
    int done = SLIPSerial.endofPacket();
    
    int size;
    OSCMessage messageIn;
    while ((size = SLIPSerial.available()) > 0) {
        writeRGBColor(GRAY);

        while (size--) {
            int c = SLIPSerial.read();
            messageIn.fill(c);
            //sprintf(errstr, "received a byte: %d. bytes: %d, size: %d, hasError: %d", c, messageIn2.bytes(), messageIn2.size(), messageIn2.hasError());
            //sendInfo(errstr);
        }
    }
    done = done || SLIPSerial.endofPacket();
    if (done) {
        if (messageIn.hasError()) {
            sendOSCMessageError(messageIn);
        } else {
            receiveOSCMessage(messageIn);       
        }
        
        messageIn.empty();
    }
#endif
    writeRGBColor(BLACK);
    
    readKeys();
    
    if (keyState != lastKeyState) {
        colorDebug();
        
        // bells and whistles
        if (keys[4] == HIGH) {
