guarda che stai aspettando 40mS e non 40 secondi.. dovrebbe essere
if (millis() - girauova_time >= 40000UL)
UL per forzare i numero ad essere UNSIGNED LONG (fino a 2 miliardi mi pare), non è necessario ma ti evita di smadonnare poi. Se non usi UL 40.000 è > 36536 (max valore sigend int) e quindi il codice impazzisce. potresti forzare l'unsigned int (max 65536) ma se poi tocchi il codice e nopn ci fai caso ti freghi da solo.
quindi magari quei 40ms sono troppo pochi, anche se in realtà sono 7secondi per fare un 180 che dovrebbe essere ok per il servo.. bho. prova ad alzare a 40.000, o anche solo a 1.000 e vediamo.