Bool wert lässt sich nicht ändern und HC-05 buffer problem

Mein Problem ist etwas umfangreicher und ich bin mir nicht sicher ob es wirklich an dem buffer des HC-05.

Meine Schaltung besteht aus einem Arduino/Genuino Micro, einem HC-05 Modul und 40 LEDs die als 4x10 Matrix angesteuert werden. Das HC-05 Modul ist an Serial1 (Pin TX (0), RX (0), geschwindigkeit 115200 baud) des Arduino angeschlossen.

Ich schicke per Android Java App byte weise Audiobuffer Daten zur Visualisierung von live aufgenommener Musik. Das funktioniert auch ohne probleme, wenn ich jedoch einen Befehl (signed byte -10 - -14) zu wechseln auf eine andere Anzeige (z.B. ne Herz) sende reagiert der Arduino nicht und die Bool Variable die angibt das eine Funktion aufgerufen wird wird nicht gändert.
Außerdem liest mein Arduino dauernt den zu letzt gesendeten Befehl vom HC-05, auch Serial1.flush() bewirkt nichts.

int reihe[] = {3,4,5,6};                    //gnd LED-Matrix
int spalte[] = {7,8,9,10,A0,A1,A2,14,15,16}; //+5v

bool playHi, playHerz, playaudioviz, playEyes; //gibt an ob eine Funktion aktiv ist

int8_t input; // Befehl der ausgelesen wird, int8_t da Java nur mit signed bytes Arbeitet 


void setup() {

//initaliesieren und HIGH setzten der GND Pins der LED-Matrix

for(int i = 0; i<4;i++){
  pinMode(reihe[i], OUTPUT); 
  digitalWrite(reihe[i], HIGH);
}

//initaliesieren und LOW setzten der 5v Pins der LED-Matrix

for(int i = 0; i<10;i++){
  pinMode(spalte[i], OUTPUT); 
  digitalWrite(spalte[i], LOW);
}

//selbst erklärend

Serial1.begin(115200);
Serial1.setTimeout(10);
Serial.begin(9600);

}


void loop() {

/*Auslesen des Befehls zur angabe des welche Funktion aktiviert werden soll (soll nur dann benutzt werden wenn die AudioVisualisierung nicht läuft) | wechsel zwischen den allen funktionen außer der Audiovisualisierung funktioniert */
  
if(playaudioviz==false && Serial1.available()>0){

input = Serial1.read();

Serial1.flush(); //soll den buffer löschen damit der Befehl nur einmal gelsen wird (die java funktion schickt sicher  nur einmal)

if(input==-13){ playaudioviz=true;playHi=false;playHerz=false;playEyes=false;}

if(input==-10){ playHi=true;playHerz=false;playaudioviz=false;playEyes=false;}

if(input==-11){ playHerz=true;playHi=false;playaudioviz=false;playEyes=false;}

if(input==-12){ playEyes=true;playaudioviz=false;playHi=false;playHerz=false;}

}

//aktivieren der verschiedenen Funktionen

if(playHi){
   Hi();
}else if(playHerz){
  Herz();
}else if(playEyes){
  Eyes();
}else if(playaudioviz){
  audioVis();
}

// Test jeder einzelnen LED in der Matrix

//for(int i = 0; i<4; i++){
//for(int i2 = 0; i2 < 10;i2++){
//digitalWrite(spalte[i2], HIGH);
//digitalWrite(reihe[i], LOW);
//delay(1000);
//
//digitalWrite(spalte[i2], LOW);
//}
//digitalWrite(reihe[i], HIGH);
//}


}

//Die Audio Visualisierung funktioniert alleine problemlos

void audioVis(){

char buff2[10]; //char buffer da char signed byte entsprechen, je ein char pro LED Spalte

for(int i = 0;i<4;i++){ //4 durchgänge, bei jedem wird immer eine andere LED reihe bearbeitet (Multiplexing)

Serial1.readBytes(buff2, 10); //liest den buffer für die LEDs der 10 Spalten

Serial1.flush(); //soll den buffer leeren damit nur aktuelle Daten gelesen werden auch wenn der Arduino etwsa langsamer ist als das Handy und somit eventuell der buffer überläuft

signed char *buff = buff2; //um sicher zu gehen das char = signed char ist laut docu nicht notwendig aber sicher ist sicher

            //76543210  Direktes Steuern der Ports da schneller als digitalWrite
PORTB = B00000000;       
PORTD = B10010001;
PORTC = B01000000;
PORTE = B00000000;
PORTF = B00000000;

digitalWrite(reihe[i], LOW); // setzten LED reihe auf LOW die Leuchten soll

for(int i3 = 0; i3<10;i3++){ 

//  Serial.print((int)buff[i3]); ausgeben der gelesenen Daten für jede LED 
//  Serial.print(" | ");

  if(i3 == -13){

  return playaudioviz = false; //soll die funktion verlassen und die variable zum aktivieren der funktion auf false setzten, Hier liegt warscheinlich das Problem   

  }


  if(buff[i3]>10&&i==0){             //abfrage für jede spalte ob die lautsärke für schalten der LEDs erreicht ist
    digitalWrite(spalte[i3], HIGH);
  }else if(buff[i3]>50&&i==1){
    digitalWrite(spalte[i3], HIGH);
  }else if(buff[i3]>75&&i==2){
    digitalWrite(spalte[i3], HIGH);
  }else if(buff[i3]>120&&i==3){
    digitalWrite(spalte[i3], HIGH);
  }
}
// Serial.print("\n");
}

}

//methode zum anzeigen eines Herzes, bei dem problem bis jetzt unwichtig

void Herz(){

int i;

for(i = 0; i < 4; i++){

PORTB = B00000000;       
PORTD = B10010001;
PORTC = B01000000;
PORTE = B00000000;
PORTF = B00000000;

digitalWrite(reihe[i], HIGH);

  if(i == 0){
    digitalWrite(spalte[5], LOW);
    }else if(i == 1){
     digitalWrite(spalte[4], LOW);
     digitalWrite(spalte[5], LOW);
     digitalWrite(spalte[6], LOW);
    }else if(i == 2){
     digitalWrite(spalte[3], LOW);
     digitalWrite(spalte[4], LOW);
     digitalWrite(spalte[5], LOW);
     digitalWrite(spalte[6], LOW);
     digitalWrite(spalte[7], LOW);
    }else if(i == 3){
     digitalWrite(spalte[4], LOW);
     digitalWrite(spalte[6], LOW);
    }
  delay(1);
}


}

void Hi(){

int i;

for(i = 0; i < 4; i++){

PORTB = B00000000;       
PORTD = B10010001;
PORTC = B01000000;
PORTE = B00000000;
PORTF = B00000000;

digitalWrite(reihe[i], LOW);

  if(i == 0){
    digitalWrite(spalte[1], LOW);
    digitalWrite(spalte[4], LOW);

    digitalWrite(spalte[6], LOW);
    }else if(i == 1){
     digitalWrite(spalte[1], LOW);
     digitalWrite(spalte[2], LOW);
     digitalWrite(spalte[3], LOW);
     digitalWrite(spalte[4], LOW);

      digitalWrite(spalte[6], LOW);
    }else if(i == 2){
     digitalWrite(spalte[1], LOW);
     digitalWrite(spalte[4], LOW);

    
    }else if(i == 3){
     digitalWrite(spalte[1], LOW);
     digitalWrite(spalte[4], LOW);

     digitalWrite(spalte[6], LOW);
    }
  delay(1);
}

}

void Eyes(){

int i;

for(i = 0; i < 3; i++){

PORTB = B00000000;       
PORTD = B10010001;
PORTC = B01000000;
PORTE = B00000000;
PORTF = B00000000;

digitalWrite(reihe[i], LOW);

  if(i == 0){
    digitalWrite(spalte[0], HIGH);
    digitalWrite(spalte[4], HIGH);

    digitalWrite(spalte[5], HIGH);
    digitalWrite(spalte[9], HIGH);
    }else if(i == 1){
     digitalWrite(spalte[1], HIGH);
     digitalWrite(spalte[3], HIGH);
     
     digitalWrite(spalte[6], HIGH);
     digitalWrite(spalte[8], HIGH);
    }else if(i == 2){
     digitalWrite(spalte[2], HIGH);
     digitalWrite(spalte[7], HIGH);
    }
  delay(1);
}
  
}

Das ist mien erster eintrag hier im Forum und ich bedanke mich schonmal im voraus für eure Hilfe.

Wie wäre es mit einer Ausgabe der empfangenen Kommandos auf Serial?

Außerdem liest mein Arduino dauernt den zu letzt gesendeten Befehl vom HC-05, auch Serial1.flush() bewirkt nichts.

Serial1.flush() löscht den Eingangspuffer nicht (ich glaube, das war in vorsinflutlichen Version der IDE mal der Fall), sondern wartet bis der Ausgangspuffer vollständig gesendet ist.

Ich denke eher, die fehlende Zurücksetzung der Variablen bzw. ein abschliessendes 'else' sind der Grund, dass die Funktion mehrfach ausgeführt wird.