Programa AVR-BASCON
Para la programación de el Microcontrolador
Digitación del Programa
Código del Programa
'*************************
'Carro Seguidor de Linea / Bigotes (Detector de Obstaculos)
'ATMEGA168
'CNY70
'Principios de Robotica
'Lucia, Rafael, Carmen y Ricardo
'*************************
'//Directivas
$regfile = "m168def.dat"
$crystal = 8000000
'//Configuraciones
Configurar los pines de entrada y salidas, asi como los manejos de las velocidades de los motores
'//Alias
Asignaciones de Varias
'Sensores Alias Pinc
Big_1 Alias Pind.0
Big_2 Alias Pind.1
Led_centro Alias Portd.2
Giro_izq Alias Pwm1a
Giro_der Alias Pwm1b
Buzzer Alias Portb.5
'//Dimensionamiento
Dimencionamientos de las variables a utilizar
'// Inicializaciones
Sensores = 0 : Portb.6 = 1
Waitms 200 : Portb.6 = 0
Sound Buzzer , 500 , 500
Portd.2 = 1
Waitms 500
Portd.2 = 0
Waitms 500
Portd.2 = 1
Waitms 500
Portd.2 = 0
Waitms 500
Portd.2 = 1
Waitms 500
Portb.6 = 1 : Portb.7 = 1 : Portd.5 = 1 : Portd.6 = 1
Waitms 200
Portb.6 = 1 : Portb.7 = 0 : Portd.5 = 1 : Portd.6 = 1
Waitms 200
Portb.6 = 1 : Portb.7 = 1 : Portd.5 = 0 : Portd.6 = 1
Waitms 200
Portb.6 = 0 : Portb.7 = 1 : Portd.5 = 1 : Portd.6 = 1
Waitms 200
Portb.6 = 0 : Portb.7 = 1 : Portd.5 = 1 : Portd.6 = 0
Waitms 200
Portb.6 = 1 : Portb.7 = 0 : Portd.5 = 0 : Portd.6 = 1
Waitms 200
'//Programa Principal
Inicio:
If Big_1 = 0 And Big_2 = 1 Then Gosub Obstaculo_d
If Big_1 = 1 And Big_2 = 0 Then Gosub Obstaculo_i
If Big_1 = 1 And Big_2 = 1 Then Gosub Obstaculo_frente
If Sen_2 = 0 And Sen_3 = 0 And Sen_4 = 0 And Sen_5 = 0 And Big_1 = 0 And Big_2 = 0 Then Goto Detenido
If Sen_2 = 1 And Sen_3 = 0 And Sen_4 = 0 And Sen_5 = 1 And Big_1 = 0 And Big_2 = 0 Then Goto Adelante
If Sen_2 = 1 And Sen_3 = 0 And Sen_4 = 1 And Sen_5 = 1 And Big_1 = 0 And Big_2 = 0 Then Goto Giro_i_v1
If Sen_2 = 0 And Sen_3 = 0 And Sen_4 = 1 And Sen_5 = 1 And Big_1 = 0 And Big_2 = 0 Then Goto Giro_i_v2
If Sen_2 = 0 And Sen_3 = 1 And Sen_4 = 1 And Sen_5 = 1 And Big_1 = 0 And Big_2 = 0 Then Goto Giro_i_v3
If Sen_2 = 1 And Sen_3 = 1 And Sen_4 = 0 And Sen_5 = 1 And Big_1 = 0 And Big_2 = 0 Then Goto Giro_d_v1
If Sen_2 = 1 And Sen_3 = 1 And Sen_4 = 0 And Sen_5 = 0 And Big_1 = 0 And Big_2 = 0 Then Goto Giro_d_v2
If Sen_2 = 1 And Sen_3 = 1 And Sen_4 = 1 And Sen_5 = 0 And Big_1 = 0 And Big_2 = 0 Then Goto Giro_d_v3
If Sen_2 = 1 And Sen_3 = 1 And Sen_4 = 1 And Sen_5 = 1 And Big_1 = 0 And Big_2 = 0 Then Goto Rutina
Goto Inicio
'//Subrutinas
Obstaculo_d:
Sound Buzzer , 125 , 200
Pwm1a = 0 : Portb.0 = 0 : Portd.7 = 0
Pwm1b = 0 : Portb.4 = 0 : Portb.3 = 0
Waitms 500
Pwm1a = 70 : Portb.0 = 0 : Portd.7 = 1
Pwm1b = 70 : Portb.4 = 0 : Portb.3 = 1
Waitms 750
Pwm1a = 75 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 75 : Portb.4 = 0 : Portb.3 = 1
Waitms 500
Goto Inicio
Obstaculo_i:
Sound Buzzer , 125 , 200
Pwm1a = 0 : Portb.0 = 0 : Portd.7 = 0
Pwm1b = 0 : Portb.4 = 0 : Portb.3 = 0
Waitms 500
Pwm1a = 70 : Portb.0 = 0 : Portd.7 = 1
Pwm1b = 70 : Portb.4 = 0 : Portb.3 = 1
Waitms 750
Pwm1a = 75 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 75 : Portb.4 = 0 : Portb.3 = 1
Waitms 250
Goto Inicio
Obstaculo_frente:
Sound Buzzer , 125 , 200
Pwm1a = 0 : Portb.0 = 0 : Portd.7 = 0
Pwm1b = 0 : Portb.4 = 0 : Portb.3 = 0
Waitms 500
Pwm1a = 70 : Portb.0 = 0 : Portd.7 = 1
Pwm1b = 70 : Portb.4 = 0 : Portb.3 = 1
Waitms 750
Pwm1a = 75 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 75 : Portb.4 = 0 : Portb.3 = 1
Waitms 250
Goto Inicio
Detenido:
Pwm1a = 0 : Portb.0 = 1 : Portd.7 = 1
Pwm1b = 0 : Portb.4 = 1 : Portb.3 = 1
Goto Inicio
Adelante:
Pwm1a = 65 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 65 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Atras:
Pwm1a = 65 : Portb.0 = 0 : Portd.7 = 1
Pwm1b = 65 : Portb.4 = 0 : Portb.3 = 1
Goto Inicio
'giro lentisimo
Giro_d_v1:
Pwm1a = 60 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 50 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_d_v2:
Pwm1a = 60 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 40 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_d_v3:
Pwm1a = 60 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 0 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_d_v4:
Pwm1a = 75 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 0 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_d_v5:
Pwm1a = 75 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 0 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_i_v1:
Pwm1a = 50 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 60 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_i_v2:
Pwm1a = 40 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 60 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_i_v3:
Pwm1a = 0 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 60 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_i_v4:
Pwm1a = 65 : Portb.0 = 1 : Portd.7 = 1
Pwm1b = 65 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Giro_i_v5:
Pwm1a = 65 : Portb.0 = 0 : Portd.7 = 1
Pwm1b = 65 : Portb.4 = 1 : Portb.3 = 0
Goto Inicio
Rutina:
Pwm1a = 60 : Portb.0 = 1 : Portd.7 = 0
Pwm1b = 60 : Portb.4 = 0 : Portb.3 = 1
Goto Inicio
End