L'obstacle est contourné par une trajectoire rectangulaire par la droite.
Le robot recule, puis tourne à droite, avance, tourne à gauche, avance deux
fois plus, tourne à gauche et entre ensuite en mode recherche de la ligne.
Le temps de rotation est estimé car aucun paramètre de recopie ne permet
de déterminer quelle est l'angle déjà effectué.
;---------------------------------------------------------------------
; Sous-routines de virage.
;---------------------------------------------------------------------
tourne_droit_90
;Un virage à 90° sur la droite
bsf MOT_G_1 ;Allumer le moteur gauche dans le sens1
bsf MOT_D_2 ;Allumer le moteur droit dans le sens2
movlw 0x53 ; pour 1 boucle
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
bcf MOT_D_2 ;Étteindre le moteur droit dans le sens2
bcf MOT_G_1 ;Étteindre le moteur gauche dans le sens1
return
tourne_gauche_90
;Un virage à 90° sur la gauche
bsf MOT_D_1 ;Allumer le moteur droit dans le sens1
bsf MOT_G_2 ;Allumer le moteur gauche dans le sens2
movlw 0x43 ; pour 1 boucle
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
bcf MOT_D_1 ;Étteindre le moteur droit dans le sens1
bcf MOT_G_2 ;Étteindre le moteur gauche dans le sens2
return
;---------------------------------------------------------------------
; Sous-routine d'avance.
;---------------------------------------------------------------------
avance
bsf MOT_D_1 ;Allumer le moteur droit dans le sens1
bsf MOT_G_1 ;Allumer le moteur gauche dans le sens1
movlw 0xA0 ; pour 1 boucle
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
bcf MOT_D_1 ;Étteindre le moteur droit dans le sens1
bcf MOT_G_1 ;Étteindre le moteur gauche dans le sens1
return
evitement
;Une petite marche arrière....
bcf FEUX_ST ;Allumer les feux stop
bsf MOT_D_2 ;Allumer le moteur droit dans le sens2
bsf MOT_G_2 ;Allumer le moteur gauche dans le sens2
movlw 15 ; pour 1 boucle
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
bcf MOT_G_1 ;Étteindre le moteur gauche dans le sens1
bcf MOT_G_2 ;Étteindre le moteur gauche dans le sens2
bcf MOT_D_1 ;Étteindre le moteur droit dans le sens1
bcf MOT_D_2 ;Étteindre le moteur droit dans le sens2
bsf FEUX_ST ;Étteindre les feux stop
;Une petite pause
call tourne_droit_90
;Une petite pause
movlw 40 ; pour 20 boucles
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
call avance
;Une petite pause
movlw 40 ; pour 20 boucles
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
call tourne_gauche_90
;Une petite pause
movlw 40 ; pour 20 boucles
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
call avance
call avance ;On double
;Une petite pause
movlw 40 ; pour 20 boucles
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
call tourne_gauche_90
;Chercher la ligne
goto seek0 ; Reboucler sur la recherche de ligne
;théoriquement inutil
goto fin_evitement