Il messaggio FTDI drivers è un warning, puoi anche per ora ignorarlo.
Per quanto riguarda l'errore, se usi la seriale di Arduino per comunicare, devi evitare di mandare byte che non siano messaggi MIDI, ad esempio elimina subito questa cosa:
Serial.println("Ciammaruga");
Poi qui tu imposti come velocità seriale 9600:
Serial.begin(9600);
Il MIDI è a 31250 baud, e ti consiglierei di usare sempre questo valore, ma in ogni caso devi impostare su Hairless la stessa velocità che imposti sulla seriale di Arduino: sicuro di averlo fatto?
Per finire, qualche consiglio "stilistico" sul codice.
Tu hai una lunga switch() con blocchi quasi identici, tipo questo:
leds[0] = CRGB::Red;
FastLED.show();
delay(lighttime);
leds[0] = CRGB::Black;
FastLED.show();
Serial.write(B10010000);
Serial.write(1);
Serial.write(100);
break;
Intanto io l'evento MIDI lo manderei subito, e non dopo il tempo di spegnimento/accensione del LED (cos'è più importante che sia "a tempo", l'evento MIDI o la luce del LED?). Poi perché imposti in binario il noteOn (che è semplicemente 0x90)? E comunque magari meglio definirlo come simbolo, insieme anche alla velocity così se ti serve puoi modificare il parametro senza problemi.
Ossia i blocchi "case" diventano:
...
#define NOTEON 0x90
#define VELOCITY 100
...
leds[0] = CRGB::Red;
FastLED.show();
Serial.write(NOTEON);
Serial.write(1);
Serial.write(VELOCITY);
delay(lighttime);
leds[0] = CRGB::Black;
FastLED.show();
break;
Poi i codici dei "case" sono tutti praticamente identici, nella mappatura tasto-LED immagino che tu abbia seguito un percorso a zig-zag, e per fare tutto questo ti basterebbe definire un array di 36 byte, col codice del led per ognuno dei tasti:
byte keyLed[] = { 0,1,2,3,4,5, 11,10,9,8,7,6, 12,13,14,15,16,17,
23,22,21,20,19,18, 24,25,26,27,28,29, 35,34,33,32,31,30 };
e quindi calcolare l'indice "n" del tasto dal carattere corrispondente (da '0' a '9' è il carattere meno il codice di '0' ossia 48, per quelli da 'A' in avanti, ossia da 10 in poi, va semplicemente sottratto il cvalore di 'A' e sommato 10.
A quel punto il tuo loop() al posto dell'interminabile sequenza di switch case, diventerebbe semplicemente:
void loop() {
char customKey = customKeypad.getKey();
if (customKey) {
byte n = customKey-'0';
if ( customKey >= 'A' )
n = customKey-'A'+10: // 'A' deve valere 10
leds[keyLed[n]] = CRGB::Red;
FastLED.show();
Serial.write(NOTEON);
Serial.write(n+1); // Nota
Serial.write(VELOCITY);
delay(lighttime);
leds[keyLed[n]] = CRGB::Black;
FastLED.show();
}
PS: ma fai solo noteON? Niente noteOFF?