Barra grafica contagiri su display TFT 7

No, non devo aver capito, non riesco a fare quello che dici, perchè la prima barretta, quella bianca, ha altre coordinate, non è lineare in orizzontale, ma sale anche, vedi le vecchie foto del display, quindi mi rimane sempre un IF per sapere se fare quel gruppo o meno, ho fatto questo, vedi il codice, l'unica cosa se accendendo il display il valore è già al massimo, non esegue i primi colori... Stessa cosa se scendono velocemente, non cancella le barre + alte, perchè l'IF superiore non viene eseguito. Preciso che magari in realtà non accadrà cmq mai, per un motore è impossibile variare così rapidamente i giri...

//********************* verifica se deve cancellare i rettangoli ************
  if (giri < giriprec) {                      // verifico se i giri sono minori dei prec
    if (giri < 18) {                          // if che fa solo barrette di colore bianco
      myGLCD.setColor(0, 0, 0);               // colore dei rettangoli neri, cancello le barrette bianche
      for (int i = giriprec; i >= giri; i--)  // cancella i rettangoli
      {
        xpos = x[i];                          //defnisce lo spostamento orizzontale
        ypos = y[i];                          //posizione partenza da vert
        x2 = xpos + 7;                        //larghezza dei rettangoli
        y2 = ypos + 25;                       //altezza dei rettangoli
        myGLCD.fillRect(xpos, ypos, x2, y2);
      }
      giriprec = giri;
    }
    if (giri > 17) {
      myGLCD.setColor(0, 0, 0);               // colore dei rettangoli neri, cancello le barrette bianche e rosse
      for (int i = giriprec; i >= giri; i--)  //cancella i rettangoli
      {
        xpos = x[i];                          //defnisce lo spostamento orizzontale
        y1 = (3);                             //posizione partenza da vert
        x2 = xpos + 7;                        //larghezza dei rettangoli
        y2 = y1 + 25;                         //altezza dei rettangoli
        myGLCD.fillRect(xpos, y1, x2, y2);
      }
      giriprec = giri;
    }
  }
  //**************************** fine verifica cancellazione rettangoli ***

  //*************************** verifica se deve costruire dei rettangoli ***
  if (giri > giriprec) {                      // verifico se i giri sono maggiori dei prec
    if (giri < 18) {                          // if che fa solo barrette di colore bianco
      myGLCD.setColor(255, 255, 255);         //da il colore dei rettangolini
      for (int i = giriprec; i < giri; i++)   // crea i primi rettangoli bianchi
      {
        xpos = x[i];                          //defnisce lo spostamento orizzontale
        ypos = y[i];                          //posizione partenza da vert
        x2 = xpos + 7;                        //larghezza dei rettangoli
        y2 = ypos + 25;                       //altezza dei rettangoli
        myGLCD.fillRect(xpos, ypos, x2, y2);
      }
      giriprec = giri;
    }
    if (giri > 17) {                          // if che fa barrette di colore bianco e rosso
      for (int i = giriprec; i < giri; i++)   // disegna i rettangoli
      {
        if (giri > 17 && giri < 51) {
          myGLCD.setColor(0, 255, 0);         //da il colore dei rettangolini verde
        }
        if (giri > 50) {
          myGLCD.setColor(255, 0, 0);         //da il colore dei rettangolini rosso
        }
        xpos = x[i];                          //defnisce lo spostamento orizzontale
        y1 = (3);                             //posizione partenza da vert
        x2 = xpos + 7;                        //larghezza dei rettangoli
        y2 = y1 + 25;                         //altezza dei rettangoli
        myGLCD.fillRect(xpos, y1, x2, y2);
      }
      giriprec = giri;
    }
  }
//******************************** fine costruzione rettangoli