(RISOLTO) unire due programmi insieme

ciao a tutti, io attualmente ho un codice che lavora autonomamente, ma ogni tanto ho bisogno di calibrare un valore , e per fare ciò ricarico un codice ad HOC su arduino per scoprire il nuovo valore, poi vado a modificarlo nel codice originale e lo ricarico.
ora vorrei che alla pressione di un tasto "entro in modalità modifica", quindi eseguo il codice ad HOC, una volta scoperto il valore, premendo un altro tasto (o lo stesso, ma questo lo vedrò in futuro), mi salva il valore nella variabile e torna al loop standard.

io ci sto provando a banco con un codice facile, ma non fà quello che voglio.
praticamente così come ho fatto, quando premo il tasto "tastomod" mi entra nel loop taratura, ma se premo nuovamente il tasto mi fà un ciclo nel loop standard e poi torna nell loop taratura.
come faccio ad uscire "bene" dal loop taratura?

alla fine dello stesso ho messo la riga "taratura();" in modo che mi rimanga sempre lì altrimenti dopo un giro mi usciva subito.
potete aiutarmi per favore?
grazie

#define ledgiri  3 
#define ledfuori  2 
#define startsonoff  5 
#define tastomod  7 

int girifatti = 0;
int girimax = 5;

void setup() {
  pinMode(ledgiri, OUTPUT); 
  pinMode(ledfuori, OUTPUT); 
  pinMode(startsonoff, INPUT_PULLUP); 
  pinMode(tastomod, INPUT_PULLUP); 
  Serial.begin(9600); // inizializzo la comunicazione seriale
}

void loop() {
  if ((digitalRead(startsonoff) == LOW))
  {
    for (int girifatti = 0; girifatti < girimax; girifatti++) {
      digitalWrite(ledgiri, HIGH); //accensione led notifica
      //girifatti++;
      Serial.println(girifatti);
      delay (700);
      digitalWrite(ledgiri, LOW); //spegnimento led notifica
      delay (700);
    }
    digitalWrite(ledfuori, HIGH); //accensione led notifica
    delay (700);
    girifatti == 0;
    Serial.println("giri azzerati");
    digitalWrite(ledfuori, LOW); //spegnimento led notifica
    delay (700);
    digitalWrite(ledfuori, HIGH); //accensione led notifica
    delay (700);
    digitalWrite(ledfuori, LOW); //spegnimento led notifica
    delay (700);
  }

  if ((digitalRead(tastomod) == LOW)) {
    Serial.println("vado in modifica");
    delay (1000);
    taratura();
  }
  digitalWrite(ledfuori, HIGH); //accensione led notifica
  delay (100);
  Serial.println("fuori");
  digitalWrite(ledfuori, LOW); //spegnimento led notifica
  delay (1000);
}


/////////////////////////////


void taratura() {
  Serial.println("sono in modifica");
  if ((digitalRead(startsonoff) == LOW)) {
    girimax++;
    Serial.println(girimax);
    delay (500);
  }
  if ((digitalRead(tastomod) == LOW)) {
    Serial.println("torno standard");
    delay (500);
    loop();
  }
  delay (500);
  taratura();
}

Perché dentro taratura() alla fine richiami la funzione stessa?...

Datman:
Perché dentro taratura() alla fine richiami la funzione stessa?...

Ciao, perché se non lo faccio mi esce subito dopo un ciclo e torna nel loop standard

Non puoi fare così

La funzione taratura deve essere scritta in maniera di non uscire se non premi il tasto apposito
E deve ciclare in se stessa, non richiamarsi
E quando termina non deve richiamare la loop, deve fare un semplice return

Come fai tu adesso hai due funzioni che si richiamano ricorsivamente
E una che di richiama ricorsivamente da sola

Studia mo bene la ricorsione in C

Se durante la taratura non serve che continui a funzionare il resto, puoi mettere un
while (tastomod==HIGH) {}
altrimenti devi fare diversamente.

esatto, quando devo fare la taratura tutto il resto non mi interessa, quindi faccio delle prove col while, grazie