Contournement de l'obstacle

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é.

Logigramme

Organigramme

Code source

;---------------------------------------------------------------------
; 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