En soit ton Arduino/programme ne va pas attendre, il va plutôt réagir à des évènements et des variables où tu auras stocké les informations de tes évènements.
En faite ce que tu veux faire c'est quand ton programme allume le feux vert, tu stockes l'heure qu'il est (fonction millis, stocké dans une variable t1), puis tu peux lire régulièrement, par exemple dans la fonction loop, l'état de ta cellule.
Lorsque ta cellule change d'état, tu peux alors reprendre l'heure(toujours millis, stocké dans une variable t2)
Du coup la différence entre tes deux variables peut être comparer à ton temps de référence(800ms) et en fonction du résultat allumer ton feux rouge pendant le temps voulu(2000ms).
Comme le dirait un certain J.M.L, c'est un projet qui se prête à l'utilisation d'une machine à état.