Misura della tau di un circuito RC

Salve a tutti, per un progetto di laboratorio all'università sto cercando di fare uno script, che riceva dal serialmonitor un indicazione sulla presunta costante di tempo RC di un circuito, e successivamente imposti la frequenza di campionamento adatta per ricavare quella reale.
Vi illustro il circuito

In pratica alimento con un pin digitale (5V) Il condensatore, che si caricherà... poi spengo il pin Digitale, in modo da iniziare a far scaricare il condensatore e leggere l'evoluzione della scarica.

digitalWrite(12, HIGH);   // carico il condensatore
    unsigned long startTime = micros();
    while (analogRead(A0) < 935) {};
    unsigned long elapsedTime = micros() - startTime;
    digitalWrite(12, LOW);    // scarico il condensatore
    for (int i = 0; i < 20; i++) {
      //save the time
      unsigned long runningTime = micros();
      //campute the difference with previous meas
      unsigned long delta = runningTime - startTime;
      //update the start time for next cycle
      startTime = runningTime;
      int sensorValue = analogRead(A0);
      Serial.print(i);
      Serial.print("V: ");
      Serial.println(sensorValue);
    }

L'obiettivo dell'esperienza di laboratorio è quella di costruire tramite una regressione lineare, la retta tangente a partire dalle misure, quindi mi servono le misure ad una frequenza consona a quella inserita dall'utente. Come faccio a leggere le misure, e salvarmi anche gli istanti? Graficando il classico esponenziale di scarica l'analog read mi da il valore Y, il valore degli istanti X come lo trovo?

Ho spulciato datasheet e siti, ed ho trovato questo template per cambiare la frequenza di campionamento dell'ADC, ma dai risultati del serial monitor non cambia tanto...sbaglio io, perchè il serialmonitor è più lento delle misure che faccio?

ADCSRA &= ~(bit (ADPS0) | bit (ADPS1) | bit (ADPS2)); // clear prescaler bits
  //ADCSRA |= bit (ADPS0);                               //   2 _ 8MHz
  //ADCSRA |= bit (ADPS1);                               //   4 _ 4MHz
  //ADCSRA |= bit (ADPS0) | bit (ADPS1);                 //   8 _ 2MHz
  //ADCSRA |= bit (ADPS2);                               //  16 _ 1MHz
  //ADCSRA |= bit (ADPS0) | bit (ADPS2);                 //  32 _ 500KHz
  //ADCSRA |= bit (ADPS1) | bit (ADPS2);                 //  64 _ 250KHz
  //ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2);   // 128 _ 125KHz

Grazie a chiunque voglia aiutarmi!!!

La frequenza di campionamento di default è circa 9000 Hz, ma ovviamente diminuisce parecchio se usi la serial.print.

Ti conviene salvare i dati (tensione e tempo) su due array uno di tipo unsigned int (tensione) e l'altro unsigned long (tempo), senza fare calcoli intermedi e processare i dati alla fine del ciclo.

Supponendo che il ciclo sia per 300 letture, le dimensioni dei due array sono 2300 = 600 byte e 4300 = 1200 byte per un totale di 1800 byte (memoria RAM quasi piena).

Potresti anche ridurre della metà l'occupazione del secondo vettore considerando solo i primi 2 byte meno significativi di micros (max 65535 μs) ed usando un array unsigned int.