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