     }
   }
 
-
-
-  return ((maxx * 100800 / 360) / vel) * 1000;
-
-
-}
+  return (long)(((maxx * 100800 / 360) / vel) * 1000);
+}
+
+void checkButton() {
+  if ((digitalRead(SEL_A) == 0) && (digitalRead(SEL_B) == 1)) //A
+  {
+    if (digitalRead(BT_A) == 0)  //premuto
+    {
+      if (digitalRead(SEL_Gp)) //1 è piccolo
+      {
+        Serial.println("motore A orario");
+        muovi('p', vel_passetti, passetto, 0);
+      }
+      else
+      {
+        Serial.println("motore C orario");
+        muovi('g',3000, vel_passetti,0,0);
+      }
+      delay(1000);
+    }
+    else if (digitalRead(BT_B) == 1)  //premuto
+    {
+      if (digitalRead(SEL_Gp)) //1 è piccolo
+      {
+        Serial.println("motore A antiorario");
+        muovi('p', vel_passetti, -passetto, 0);
+      }
+      else
+      {
+        Serial.println("motore C antiorario");
+        muovi('g',vel_passetti,-passetto, 0, 0);
+      }
+      delay(1000);
+    }
+  }
+  else if ((digitalRead(SEL_A) == 1) && (digitalRead(SEL_B) == 1)) //B
+  {
+    if (digitalRead(BT_A) == 0)  //premuto
+    {
+      if (digitalRead(SEL_Gp)) //1 è piccolo
+      {
+        Serial.println("motore B orario");
+        muovi('p',vel_passetti,0, passetto);
+      }
+      else
+      {
+        Serial.println("motore D orario");
+        muovi('g',vel_passetti,0, passetto, 0);
+      }
+      delay(1000);
+    }
+    else if (digitalRead(BT_B) == 1)  //premuto
+    {
+      if (digitalRead(SEL_Gp)) //1 è piccolo
+      {
+        Serial.println("motore B antiorario");
+        muovi('p',vel_passetti,0, -passetto);
+      }
+      else
+      {
+        Serial.println("motore D antiorario");
+        muovi('g',vel_passetti,0, -passetto, 0);
+      }
+
+      delay(1000);
+    }
+  }
+  else if ((digitalRead(SEL_A) == 1) && (digitalRead(SEL_B) == 0)) //C
+  {
+    if (digitalRead(BT_A) == 0)  //premuto
+    {
+      if (digitalRead(SEL_Gp)) //1 è piccolo
+      {
+        Serial.println("motore inesistente");
+      }
+      else
+      {
+        Serial.println("motore E orario");
+        muovi('g',vel_passetti,0, 0, passetto);
+      }
+      delay(1000);
+    }
+    else if (digitalRead(BT_B) == 1)  //premuto
+    {
+      if (digitalRead(SEL_Gp)) //1 è piccolo
+      {
+        Serial.println("motore inesistente");
+      }
+      else
+      {
+        Serial.println("motore E antiorario");
+        muovi('g',vel_passetti,0, 0, -passetto);
+      }
+      delay(1000);
+    }
+  }
+}

  while (digitalRead(MAINSW)) //SHOW
  {
    if (act == 0) {
      t0= millis();
      Serial.println("ACT 0");
      inviatop = false;
      inviatoG = false;
      act++;
    }
    show_uno();
  }
  while (!digitalRead(MAINSW)) //TEST
  {
    act = 0;

    if (Serial.available() > 0) {
      Serial2.write(Serial.read());
    }

    if ((digitalRead(SEL_A) == 0) && (digitalRead(SEL_B) == 1)) //A
    {
      if (digitalRead(BT_A) == 0)  //premuto
      {
        if (digitalRead(SEL_Gp)) //1 è piccolo
        {
          Serial.println("motore A orario");
          ///////////////////////////
          Serial2.print("P 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("p 10 0");
          Serial2.print('\r');
        }
        else
        {
          Serial.println("motore C orario");
          Serial2.print("G 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("g 10 0 0");
          Serial2.print('\r');
          ////////////////////////////
        }
        delay(1000);
      }
      else if (digitalRead(BT_B) == 1)  //premuto
      {
        if (digitalRead(SEL_Gp)) //1 è piccolo
        {
          Serial.println("motore A antiorario");
          ///////////////////////////
          Serial2.print("P 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("p -10 0");
          Serial2.print('\r');
        }
        else
        {
          Serial.println("motore C antiorario");
          Serial2.print("G 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("g -10 0 0");
          Serial2.print('\r');
          ////////////////////////////
        }
        delay(1000);
      }
    }
    else if ((digitalRead(SEL_A) == 1) && (digitalRead(SEL_B) == 1)) //B
    {
      if (digitalRead(BT_A) == 0)  //premuto
      {
        if (digitalRead(SEL_Gp)) //1 è piccolo
        {
          Serial.println("motore B orario");
          ///////////////////////////
          Serial2.print("P 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("p 0 10");
          Serial2.print('\r');
        }
        else
        {
          Serial.println("motore D orario");
          Serial2.print("G 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("g 0 -10 0");
          Serial2.print('\r');
          ////////////////////////////
        }
        delay(1000);
      }
      else if (digitalRead(BT_B) == 1)  //premuto
      {
        if (digitalRead(SEL_Gp)) //1 è piccolo
        {
          Serial.println("motore B antiorario");
          ///////////////////////////
          Serial2.print("P 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("p 0 -10");
          Serial2.print('\r');
        }
        else
        {
          Serial.println("motore D antiorario");
          Serial2.print("G 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("g 0 10 0");
          Serial2.print('\r');
          ////////////////////////////
        }

        delay(1000);
      }
    }
    else if ((digitalRead(SEL_A) == 1) && (digitalRead(SEL_B) == 0)) //C
    {
      if (digitalRead(BT_A) == 0)  //premuto
      {
        if (digitalRead(SEL_Gp)) //1 è piccolo
        {
          Serial.println("motore inesistente");
        }
        else
        {
          Serial.println("motore E orario");
          Serial2.print("G 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("g 0 0 10");
          Serial2.print('\r');
          ////////////////////////////
        }
        delay(1000);
      }
      else if (digitalRead(BT_B) == 1)  //premuto
      {
        if (digitalRead(SEL_Gp)) //1 è piccolo
        {
          Serial.println("motore inesistente");
        }
        else
        {
          Serial.println("motore E antiorario");

          Serial2.print("G 3000");
          Serial2.print('\r');
          delay(100);
          Serial2.print("g 0 0 -10");
          Serial2.print('\r');
          ////////////////////////////
        }
        delay(1000);
      }
    }
  }
}

void attore(int scena,char let_G, int vel_G, int posG_a, int posG_b, int posG_c, char let_p, int vel_p, int posp_a, int posp_b, int pausa) {

  if (act == scena) {
    if (inviatoG == false) {
      att1 = muovi(let_G,vel_G,posG_a,posG_b,posG_c);
      digitalWrite(channels[act], HIGH);
      Serial.println("mando scena G");
      Serial.println(act);
      inviatoG = true;
      tdd = millis();
    }
    if ((inviatop == false) && ((long)(millis() - tdd) > dd)) {
      att2 = muovi(let_p,vel_p,posp_a,posp_b);
      Serial.println("mando scena p");
      Serial.println(act);
      inviatop = true;
    }
    if ((long)(millis() - t0) > (long)(magg(att1,att2) + pausa)) {
      inviatop = false;
      inviatoG = false;
      digitalWrite(channels[act], LOW);
      t0 = millis();

      act++;

#define BT_B A8 //1 premuto
#define SEL_Gp A5 //0 su G e 1 su p

#define passetto 10
#define vel_passetti 3000

#define NUM_CHANNELS 16

long muovi(char let, int vel, int posA, int posB, int posC = 0);
long t0 = 0;
long dd = 100;
long tdd = 0;

uint8_t channels[NUM_CHANNELS] = {53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38};

void setup() {
  pinMode(MAINSW, INPUT_PULLUP);
