TFT- Void para cambiar variables --SOLUCIONADO

Hola de nuevo:

Estoy un poco clavada con la forma de programar estas pantallas TFT.

Para programar las LCD, y no tener que poner siempre el desplazamiento del cursor y el texto a representar, en su día me recomendaron que hiciera un void de este tipo

void cursor_y_dato(byte x, byte y, int dato){
    lcd.setCursor(x,y);
    lcd.print(dato);
  }

Fué muy grato trabajar así, ya que cada vez que tenía que representar algo, con solo poner esto valía

cursor_y_dato(9,0,Alarma_1);

Pues llevo unos días trabajando sobre este hilo para poder hacer lo mismo, pero con las TFT
Los void que tengo son los mismos, simplemente vario la ubicación del cuadrado, posición del dato y dato a escribir.

Void alarma_1_Tanque1(){
	tft.fillRect(16,61,128,58, ILI9341_YELLOW); //borramos el recuadro
	tft.setTextColor(ILI9341_BLACK); tft.setTextSize(3);
	tft.setCursor(55,80); tft.print(porcentaje); tft.println("%");	
	delay(500);
	tft.fillRect(16,61,128,58, ILI9341_BLACK); //borramos el recuadro
	tft.setTextColor(ILI9341_WHITE); tft.setTextSize(3);
	tft.setCursor(55,80); tft.print(porcentaje1); tft.println("%");	
}

void alarma_2_Tanque1(){
	tft.fillRect(16,61,128,58, ILI9341_RED); //borramos el recuadro
	tft.setTextColor(ILI9341_BLACK); tft.setTextSize(3);
	tft.setCursor(55,80); tft.print(porcentaje); tft.println("%");	
	delay(500);
	tft.fillRect(16,61,128,58, ILI9341_BLACK); //borramos el recuadro
	tft.setTextColor(ILI9341_WHITE); tft.setTextSize(3);
	tft.setCursor(55,80); tft.print(porcentaje1); tft.println("%");	 
}


void alarma_1_Tanque2(){
	tft.fillRect(176,61,128,58, ILI9341_YELLOW); //borramos el recuadro
	tft.setTextColor(ILI9341_BLACK); tft.setTextSize(3);
	tft.setCursor(220,80); tft.print(porcentaje); tft.println("%");	 
	delay(500);
	tft.fillRect(176,61,128,58, ILI9341_BLACK); //borramos el recuadro
	tft.setTextColor(ILI9341_WHITE); tft.setTextSize(3);
	tft.setCursor(220,80); tft.print(porcentaje2); tft.println("%");	
}

void alarma_2_Tanque2(){
        tft.fillRect(176,61,128,58, ILI9341_RED); //borramos el recuadro
	tft.setTextColor(ILI9341_BLACK); tft.setTextSize(3);
	tft.setCursor(220,80); tft.print(porcentaje2); tft.println("%");	
	delay(500);
	tft.fillRect(176,61,128,58, ILI9341_BLACK); //borramos el recuadro
	tft.setTextColor(ILI9341_WHITE); tft.setTextSize(3);
	tft.setCursor(220,80); tft.print(porcentaje2); tft.println("%");	
}

He intentado darle una forma sencilla, haciendo un Void especifico y trabajando tan solo sobre las variables del fillRect, de esta forma:

void prueba(int16_t x, int16_t y, int16_t w, int16_t h, int16_t color){

  tft.fillRect(x,y,w,h,color); //borramos el recuadro    
}

y despues nombrar prueba(16,61,128,58,ILI9341_PINK);

Hasta ahí, y dependiendo del tipo de compilador que use, va todo correcto.
Los problemas vienen a la hora de introducir más variables, como la posición en la que quieres escribir y el dato a representar.

Saca un error diciendo que hay demasiadas variables en prueba()

No se si me explico bien, pero alguna vez, ¿habéis intentado simplificar el código de esta manera?

Bueno, después de pelear una tarde ya lo he resuelto.

dejo la solución para quien le interese

hice un void con variables

void alarma(int16_t x,	int16_t y,	int16_t w, int16_t h, int16_t color, int16_t z, int16_t t, int dato){
	tft.fillRect(x,y,w,h, color); //borramos el recuadro
	tft.setTextColor(ILI9341_BLACK); tft.setTextSize(3);
	tft.setCursor(z,t); tft.print(dato); tft.println("%");	
	delay(500);
	tft.fillRect(x,y,w,h, ILI9341_BLACK); //borramos el recuadro
	tft.setTextColor(ILI9341_WHITE); tft.setTextSize(3);
	tft.setCursor(z,t); tft.print(dato); tft.println("%");	
}

Como es de buen hacer, lo nombré antes de iniciar el stup

void alarma(int16_t x,	int16_t y,	int16_t w, int16_t h, int16_t color, int16_t z, int16_t t, int dato);

Luego en el loop, con nombrarlo así basta para que funcione

     	alarma(16,61,128,58,ILI9341_YELLOW,55,80,porcentaje);