Du kannst nicht schreiben:
void motor(int cV, int gV, int waituntil) {
while (millis() <= waituntil) {
Da millis() einen Wert gibt, der von 0 raufzählt.
Du mußt den Anfangswert von millis() lesen und dann die Zeit dazuzählen wie Du es bei movetime machst.
void motor(int cV, int gV, int waituntil) {
waituntil=Millis()+waituntil;
while (millis() <= waituntil) {
Außerdem kann analogrwrite Werte von 0 bis 255 entgegennehmen wobei 255 Höchstgeschwindigkeit ist.
Grüße Uwe