Velocità comunicazione tramite porta seriale

Buonasera a tutti. Sto lavorando ad un progetto che prevede la trasmissione di parecchi dati ad arduino tramite porta seriale. Quindi il mio setup sarebbe Arduino Pro Micro connesso tramite usb al computer. Sul computer ho scritto un programma in Java che si occupa di trasmettere informazioni ad Arduino. In particolare la funzione che mi interessa è quella che si occupa di trasmettere delle variabili long ad Arduino.
Il mio meccanismo è questo:

  1. Invia comando che "avverte" Arduino che stanno per arrivare dati più pesanti di un byte e attende OK da Arduino.
  2. Invia un byte con dimensione dei dati e attende OK.
  3. Ciclo for che invia un byte e attende OK.

Premetto che tutto funziona alla perfezione, ma la trasmissione è davvero troppo lenta per quello che mi serve. Ho provato ad aumentare il baud rate della porta seriale ma non cambia assolutamente nulla. Qualcuno sa dirmi se c'è un modo per velocizzare tale processo?
Intanto vi allego il codice delle funzioni implicate.

Funzione che legge i bytes lato Arduino:

byte *readInBytes(){
 	byte sizeIncoming = 0;
  	byte *temp;
  
        while(true){
        	if(Serial.available() > 0){
			  
            	sizeIncoming = Serial.read();
            	temp = malloc(sizeof(int) * (sizeIncoming + 1));
            	Serial.write((byte)OK);
      		Serial.readBytes(temp, sizeIncoming);
            	temp[sizeIncoming] = 255;
           	  	break;
          	}
        }
	return temp;
}

E questa è la funzione che trasmette i dati lato computer:

	public boolean sendCoordinates(byte[] x, byte[] y, int timeout, boolean print) {

		isHome = false;
		
		if(print) {
			sendCommand(COORDINATES_P, OK, 1000);
		}else {
			sendCommand(COORDINATES_DP, OK, 1000);
		}
		
		//Send X
		if(sendCommand((byte)x.length, OK, timeout)) {
			serial.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING|SerialPort.TIMEOUT_WRITE_BLOCKING, 1000, 1000);
			serial.writeBytes(x, x.length);
		}
			
		//Send Y
		if(sendCommand((byte)y.length, OK, timeout)) {

serial.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING|SerialPort.TIMEOUT_WRITE_BLOCKING, 1000, 1000);
			serial.writeBytes(y, y.length);
		}
			
		if(waitByte(COORDINATES_DONE, 10000)) {
			System.out.println("Coordinate raggiunte.");
			return true;
		}else {
			return false;
		}
	}

Questa invece è la funzione sendCommand(), spesso usata nella funzione precedente:

	public boolean sendCommand(byte command, byte returnValue, int timeout) {
		
		serial.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING|SerialPort.TIMEOUT_WRITE_BLOCKING, timeout, 1000);
		writeByte(command);
		
		byte[] readByte = new byte[1];
		serial.readBytes(readByte, 1);
		
		if(readByte[0] == returnValue) {
			System.out.println("Comando '" + command + "' inviato con successo.");
			return true;
		}else {
			System.out.println("Errore durante l'invio del comando '" + command + "'");
			return false;
		}
	}