Perancangan Line Follower
Lampiran program
$regfile = "m16def.dat"
$crystal = 16000000
Moka1 Alias Portc.0
Moka2 Alias Portc.1
Moki1 Alias Portd.6
Moki2 Alias Portd.7
Enka Alias Portd.5
Enki Alias Portd.4
Atas Alias Pinc.6
Bawah Alias Pinc.7
Step1 Alias Portc.2
Step2 Alias Portc.3
Step3 Alias Portc.4
Step4 Alias Portc.5
Tbl Alias Pind.3
Kiri_depan Alias Pinb.0
Kanan_depan Alias Pinb.1
Kiri_belakang Alias Pinb.2
Kanan_belakang Alias Pinb.3
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6
= Porta.4 , Db7 = Porta.5 , Rs = Porta.0 , E = Porta.1
Config Lcd = 16 * 2
Cursor Off
Cls
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm =
Clear Down , Compare B Pwm = Clear Down
Gosub Berhenti
Do
If Kanan_depan = 1 And Kiri_depan = 1 Then
Locate 1 , 1
Lcd "
Posisi Salah
"
Else
Locate 1 , 1
Lcd "
Posisi Benar
End If
Loop Until Tbl = 0
"
Locate 1 , 1
Lcd "
GO!!!!
"
Waitms 250
Do
If Kiri_depan = 0 And Kanan_depan = 1 Then
Gosub Kanan
End If
If Kiri_depan = 1 And Kanan_depan = 0 Then
Gosub Kiri
End If
If Kiri_depan = 1 And Kanan_depan = 1 Then
Gosub Berhenti
End If
If Kiri_depan = 0 And Kanan_depan = 0 Then
Gosub Maju
End If
Loop Until Kiri_depan = 1 And Kanan_depan = 1
Gosub Berhenti
Waitms 500
Do
If Kiri_belakang = 0 And Kanan_belakang = 1 Then
Gosub Kanan
End If
If Kiri_belakang = 1 And Kanan_belakang = 0 Then
Gosub Kiri
End If
If Kiri_belakang = 1 And Kanan_belakang = 1 Then
Gosub Berhenti
End If
If Kiri_belakang = 0 And Kanan_belakang = 0 Then
Gosub Mundur
End If
Loop Until Kiri_belakang = 1 And Kanan_belakang = 1
Gosub Berhenti
Waitms 500
Do
Gosub Mundur
Loop Until Kiri_depan = 1 And Kanan_depan = 1
Gosub Berhenti
Waitms 500
Do
Loop Until Tbl = 0
Waitms 50
Do
Loop Until Tbl = 1
Waitms 50
Locate 1 , 1
Lcd "
Ready!
Waitms 250
Loop
Maju:
Pwm1a = 178
Pwm1b = 178
Set Moka1
Reset Moka2
Set Moki1
Reset Moki2
Return
Mundur:
Pwm1a = 178
Pwm1b = 178
Reset Moka1
Set Moka2
Reset Moki1
Set Moki2
Return
"
Berhenti:
Reset Moka1
Reset Moka2
Reset Moki1
Reset Moki2
Waitms 250
Return
Kiri:
Pwm1a = 120
Pwm1b = 120
Reset Moka1
Set Moka2
Set Moki1
Reset Moki2
Return
Kanan:
Pwm1a = 120
Pwm1b = 120
Set Moka1
Reset Moka2
Reset Moki1
Set Moki2
Return
Turun:
If Bawah = 0 Then
Gosub Mati_step
Else
Do
Set Step1
Reset Step2
Reset Step3
Reset Step4
Waitms 10
Reset Step1
Set Step2
Reset Step3
Reset Step4
Waitms 10
Reset Step1
Reset Step2
Set Step3
Reset Step4
Waitms 10
Reset Step1
Reset Step2
Reset Step3
Set Step4
Waitms 10
Loop Until Bawah = 0
Gosub Mati_step
End If
Return
Angkat:
If Atas = 0 Then
Gosub Mati_step
Else
Do
Reset Step1
Reset Step2
Reset Step3
Set Step4
Waitms 10
Reset Step1
Reset Step2
Set Step3
Set Step4
Waitms 10
Reset Step1
Reset Step2
Set Step3
Reset Step4
Waitms 10
Reset Step1
Set Step2
Set Step3
Reset Step4
Waitms 10
Reset Step1
Set Step2
Reset Step3
Reset Step4
Waitms 10
Set Step1
Set Step2
Reset Step3
Reset Step4
Waitms 10
Set Step1
Reset Step2
Reset Step3
Reset Step4
Waitms 10
Set Step1
Reset Step2
Reset Step3
Set Step4
Waitms 10
Loop Until Atas = 0
Gosub Mati_step
End If
Return
Mati_step:
Reset Step1
Reset Step2
Reset Step3
Reset Step4
Return
$regfile = "m16def.dat"
$crystal = 16000000
Moka1 Alias Portc.0
Moka2 Alias Portc.1
Moki1 Alias Portd.6
Moki2 Alias Portd.7
Enka Alias Portd.5
Enki Alias Portd.4
Atas Alias Pinc.6
Bawah Alias Pinc.7
Step1 Alias Portc.2
Step2 Alias Portc.3
Step3 Alias Portc.4
Step4 Alias Portc.5
Tbl Alias Pind.3
Kiri_depan Alias Pinb.0
Kanan_depan Alias Pinb.1
Kiri_belakang Alias Pinb.2
Kanan_belakang Alias Pinb.3
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6
= Porta.4 , Db7 = Porta.5 , Rs = Porta.0 , E = Porta.1
Config Lcd = 16 * 2
Cursor Off
Cls
Config Timer1 = Pwm , Prescale = 64 , Compare A Pwm =
Clear Down , Compare B Pwm = Clear Down
Gosub Berhenti
Do
If Kanan_depan = 1 And Kiri_depan = 1 Then
Locate 1 , 1
Lcd "
Posisi Salah
"
Else
Locate 1 , 1
Lcd "
Posisi Benar
End If
Loop Until Tbl = 0
"
Locate 1 , 1
Lcd "
GO!!!!
"
Waitms 250
Do
If Kiri_depan = 0 And Kanan_depan = 1 Then
Gosub Kanan
End If
If Kiri_depan = 1 And Kanan_depan = 0 Then
Gosub Kiri
End If
If Kiri_depan = 1 And Kanan_depan = 1 Then
Gosub Berhenti
End If
If Kiri_depan = 0 And Kanan_depan = 0 Then
Gosub Maju
End If
Loop Until Kiri_depan = 1 And Kanan_depan = 1
Gosub Berhenti
Waitms 500
Do
If Kiri_belakang = 0 And Kanan_belakang = 1 Then
Gosub Kanan
End If
If Kiri_belakang = 1 And Kanan_belakang = 0 Then
Gosub Kiri
End If
If Kiri_belakang = 1 And Kanan_belakang = 1 Then
Gosub Berhenti
End If
If Kiri_belakang = 0 And Kanan_belakang = 0 Then
Gosub Mundur
End If
Loop Until Kiri_belakang = 1 And Kanan_belakang = 1
Gosub Berhenti
Waitms 500
Do
Gosub Mundur
Loop Until Kiri_depan = 1 And Kanan_depan = 1
Gosub Berhenti
Waitms 500
Do
Loop Until Tbl = 0
Waitms 50
Do
Loop Until Tbl = 1
Waitms 50
Locate 1 , 1
Lcd "
Ready!
Waitms 250
Loop
Maju:
Pwm1a = 178
Pwm1b = 178
Set Moka1
Reset Moka2
Set Moki1
Reset Moki2
Return
Mundur:
Pwm1a = 178
Pwm1b = 178
Reset Moka1
Set Moka2
Reset Moki1
Set Moki2
Return
"
Berhenti:
Reset Moka1
Reset Moka2
Reset Moki1
Reset Moki2
Waitms 250
Return
Kiri:
Pwm1a = 120
Pwm1b = 120
Reset Moka1
Set Moka2
Set Moki1
Reset Moki2
Return
Kanan:
Pwm1a = 120
Pwm1b = 120
Set Moka1
Reset Moka2
Reset Moki1
Set Moki2
Return
Turun:
If Bawah = 0 Then
Gosub Mati_step
Else
Do
Set Step1
Reset Step2
Reset Step3
Reset Step4
Waitms 10
Reset Step1
Set Step2
Reset Step3
Reset Step4
Waitms 10
Reset Step1
Reset Step2
Set Step3
Reset Step4
Waitms 10
Reset Step1
Reset Step2
Reset Step3
Set Step4
Waitms 10
Loop Until Bawah = 0
Gosub Mati_step
End If
Return
Angkat:
If Atas = 0 Then
Gosub Mati_step
Else
Do
Reset Step1
Reset Step2
Reset Step3
Set Step4
Waitms 10
Reset Step1
Reset Step2
Set Step3
Set Step4
Waitms 10
Reset Step1
Reset Step2
Set Step3
Reset Step4
Waitms 10
Reset Step1
Set Step2
Set Step3
Reset Step4
Waitms 10
Reset Step1
Set Step2
Reset Step3
Reset Step4
Waitms 10
Set Step1
Set Step2
Reset Step3
Reset Step4
Waitms 10
Set Step1
Reset Step2
Reset Step3
Reset Step4
Waitms 10
Set Step1
Reset Step2
Reset Step3
Set Step4
Waitms 10
Loop Until Atas = 0
Gosub Mati_step
End If
Return
Mati_step:
Reset Step1
Reset Step2
Reset Step3
Reset Step4
Return