Lors de la rencontre de deux lignes en travers, les deux capteurs se
déclenchent simultanément. Or si au moins un de ces deux capteurs ne
détecte pas la ligne, il met à 0 un flag à 1 en début de boucle de
déplacement.
Donc dans le cas ou le flag est à 1 en fin de boucle, c'est que la
ligne barre la route, le robot pile donc de la même manière que
devant un obstacle, puis attend une pression du bouton pour revenir
en état initial.
movlw B'00000001' ; Valeur du flags
;(B0=0 => pas de ligne sur G ou D)
; Si B0=1 après les test alors les deux
;capteurs sont sur la ligne => arrêt
movwf rotled ; Affectation à rotled
;-----------------------------------------------------------------------
; ICI LES TEST DU PROGRAMME (OBSTACLE ET LIGNE)
;-----------------------------------------------------------------------
btfss rotled,0 ; Si pas de ligne détecté pendant les deux
goto move ; boucler
; Si on est ici, c'est qu'il y a une bande noire en travers de la route.
; On pile
bsf MOT_D_2 ;Allumer le moteur droit dans le sens2
bsf MOT_G_2 ;Allumer le moteur gauche dans le sens2
movlw 7 ; pour 20 boucles
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
;et on arrête tout
bcf FEUX_ST ;Allumer les feux stop
bcf DEL_1 ;Allumer la DEL_1
bcf MOT_D_1 ;Étteindre le moteur droit dans le sens1
bcf MOT_D_2 ;Étteindre le moteur droit dans le sens2
bcf MOT_G_1 ;Étteindre le moteur gauche dans le sens1
bcf MOT_G_2 ;Étteindre le moteur gauche dans le sens2
fin
btfss BP_STAR ; Si pas de bouton détecté
goto fin
;On boucle tant que le bouton n'est pas préssé une fois.
;sinon on retourne au loader.
movlw 99 ; pour 20 boucles
movwf nb_tempo ; Affectation à nombre de tempo
call tempo ; appeler la tempo
;Tempo pour éviter le rebond au début du programme
goto start