start1 = millis();
while( digitalRead(buttonPin) != DELAY_END );
duration1 = start1 - millis();
This looks like a problem. Since millis() is going to return a value > start1 the 2nd time it is called, duration1 is going to be -ve, which I suspect is not what you want.
If you want to to calculate an interval using millis(), instead try:
start1 = millis();
while( digitalRead(buttonPin) != DELAY_END );
duration1 = millis() - start1;
Looks like this problem occurs in a few places.
Also, in this line:
vitesse = (217/(duration)*3.6);
what order of operator precedence do you intend?
Do you mean
vitesse = 217/(duration*3.6);
or
vitesse = (217/duration)*3.6;
?
Note that your parenthesis around (duration) doesn't actually do anything, so I suspect this is an area you need to pay a bit more attention to.
Btw, if you actually intend
vitesse = (217/duration)*3.6;
I would rewrite it as
vitesse = (217*3.6)/duration;
for increased accuracy when using integer arithmetic, or just simply
vitesse = 781/duration;
or for better accuracy still
vitesse = 7812/(duration*10);
Similarly, if you actually mean
vitesse = 217/(duration*3.6);
it is better to use
vitesse = 2170/(duration*36);
If using integer arithmetic, it is better not to use real values if it can be avoided, both for efficiency (faster to use just integers), and accuracy (unintended loss of precision can lead to unexpected results, like ending up with zero when expecting a non-zero result.)
Here's a study exercise:
int var1 = 5;
var1 = var1/10;
var1 = var1*10;
explain why var1 == 0, and not var1 == 5
Integer arithmetic != real arithmetic, and the difference is often very confusing for beginning programmers.
Bon chance!