Azzerare la funzione millis()

Alla fine credo di avere risolto in questa maniera, anche se in realtà non so se il motorino riesce a percepire incrementi frazionari del tempo di ritardo tra un passo e l'altro o li avverte solo quando superano il millisecondo...

#include <LiquidCrystal.h>

#define SCENDI 2
#define SALI 3

LiquidCrystal lcd(12, 13, 7, 6, 5, 4);

int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;

int speedPinPot = 0;
int decelPinPot = 1;

int i = 0;
int down = 0;
int up = 0;
int stop = 0;
int downDelayTime = 1;
double upDelayTime;
double ritardo;
long previousMillis = 0;
long interval = 100;

void setup() {

pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);

pinMode(SCENDI, INPUT);
pinMode(SALI, INPUT);
pinMode(speedPinPot, INPUT);
pinMode(decelPinPot, INPUT);

lcd.begin(20, 2);
lcd.print("Vel.iniz.");
lcd.setCursor(16, 0);
lcd.print("mm/s");
lcd.setCursor(0, 1);
lcd.print("Deceler.");
lcd.setCursor(15, 1);
lcd.print("mm/s2");
}

void loop() {

int speedReadPin = analogRead(speedPinPot);
upDelayTime = (map(speedReadPin, 0, 1024, 10000, 100000)/1000.);
double velocita = (1000/upDelayTime) * 0.226;

int decelReadPin = analogRead(decelPinPot);
ritardo = (map(decelReadPin, 0, 1024, 0, 1000)/1000.);
double decelerazione = ( ( (1/upDelayTime) - (1/(upDelayTime + ritardo)) )/0.1 ) * 1000 * 0.226;

lcd.setCursor(10, 0);
if (velocita < 10)
lcd.print(" ");
lcd.print(velocita);

lcd.setCursor(10, 1);
if (decelerazione < 10)
lcd.print(" ");
lcd.print(decelerazione);

down = digitalRead(SCENDI);
up = digitalRead(SALI);
if (down == HIGH)
scendi();
if (up == HIGH)
sali();
}

void scendi() {

if(!stop) {

digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(downDelayTime);
i++;

digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(downDelayTime);
i++;

digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(downDelayTime);
i++;

digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(downDelayTime);
i++;

if (i > 164)
stop = 1;
}
}

void sali() {

stop = 0;

while(i>0){
unsigned long currentMillis = millis();

if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
upDelayTime += ritardo;
}
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(upDelayTime);
i--;

if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
upDelayTime += ritardo;
}
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(upDelayTime);
i--;

if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
upDelayTime += ritardo;
}
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay( upDelayTime );
i--;

if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
upDelayTime += ritardo;
}
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(upDelayTime);
i--;
}

}

Sapreste suggerirmi anche un metodo per visualizzare sul display l'apice del quadrato? Mi servirebbe per l'accelerazione da esprimere in mm/s^2.