Line Follower dengan Menggunakan ATMEGA16
21.30
Rangkaian Simulasi Line Follower pada ATMEGA16
1. Dasar Teori Line Follower [kembali]
Line follower Robot atau bisa disebut juga sebagai line tracer robot adalah robot yang dapat mengikuti garis atau jalur. Robot line follower didesain dengan posisi sensor di atas permukaan putih. Prinsip kerja
robot line follower berikut adalah
saat sistem sensor berada di atas permukaan putih, akan ada pantulan cahaya
dari LED yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR
berkurang maka arus akan bergerak melalui LDR. Kondisi tersebut
menyebabkan arus output sensor menuju IC komparator LM 393 menjadi minimum,
oleh IC LM 293D, arus di non-inverting sehingga output menuju pin mikrokontroler
menjadi LOW (0).
Sebaliknya, saat sistem sensor berada di atas garis hitam, tidak akan ada pantulan cahaya dari LED yang akan mengenai sensor cahaya LDR sehingga resistansi sensor LDR sangat besar sehingga arus tidak akan melalui LDR. Kondisi tersebut menyebabkan arus output sensor menuju IC komparator LM 293D menjadi maksimum, oleh IC LM 293D, arus di non-inverting sehingga output menuju pin mikrokontroler menjadi HIGH (1). Oleh mikrokontroler data logika pin tersebut kemudian diolah untuk mengerakan motor, motor akan bergerak jika kedua pin motor tersebut memiliki beda polaritas.
2. Rangkaian Line Follower [kembali]
Berikut screnshoot rangkaian Line Follower
Gambar 1. Screnshoot Rangkaian Line Follower
Komponen yang diperlukan dalam rangkaian protheus :
- Sensor cahaya LDR
- LED
- Non inverting amplifier
- ATMEGA16
- MOTOR DC
- LCD
- L293D
- Resistor
- Potensiometer
- Crystal dan Push button untuk sistem reset dan Xtal
- Kapasitor
3. Penjelasan Mikrokontroller Atmega16 [kembali]
1. Arsitektur RISC dengan throughput mencapai 16 MIPS pada frekuensi 16Mhz.
2. Memiliki kapasitas Flash memori 16Kbyte, EEPROM 512 Byte, dan SRAM 1Kbyte
3. Saluran I/O 32 buah, yaitu Port A, Port B, Port C, dan Port D.
4. CPU yang terdiri dari 32 buah register.
5. User interupsi internal dan eksternal
6. Port antarmuka SPI dan Port USART sebagai komunikasi serial
7. Fitur Peripheral
Berikut konfigurasi pin mikrokontroler AVR ATMega16:
Konfigurasi pin Mikrokontroler AVR ATMega16
Gambar 2. Konfigurasi pin ATMEGA16

Gambar 2. Konfigurasi pin ATMEGA16
Deskripsi Mikrokontroler ATMega16 :
a. VCC
- Sumber tegangan
b. GND (Ground)
- Sumber tegangan
b. GND (Ground)
- Ground
c. Port A (PA0 – PA7)
Merupakan pin input dan output dua arah dan pin masukan ADC
d. Port B (PB7 – PB0)
Merupakan pin input atau output dua arah dan pin masukan fungsi khusus, seperti dapat dlihat pada tabel berikut :
Port
|
Alternate Function
|
PB7
|
SCK (SPI
Bus Serial Clock)
|
PB6
|
MISO (SPI
Bus Master Input/Slave Output)
|
PB5
|
MOSI (SPI
Bus Master Output/Slave Input)
|
PB4
|
SS (SPI
Slave Select Input)
|
PB3
|
AIN1
(Analog Comparator Negative Input)
OCO (Timer/Counter0
Output Compare Match Output)
|
PB2
|
AIN0
(Analog Comparator Positive Input)
INT2
(External Interrupt 2 Input)
|
PB1
|
T1
(Timer/Counter1 External Counter Input)
|
PB0
|
T0
(Timer/Counter External Counter Input)
XCK (USART
External Clock Input/Output)
|
Tabel 1. Fungsi khusus port B
e. Port C (PC0 – PC7)
Merupakan pin input atau output dua arah
Port
|
Alternate
Function
|
PC7
|
TOSC2
(Timer Oscillator Pin 2)
|
PC6
|
TOSC1
(Timer Oscillator Pin 1)
|
PC5
|
TD1 (JTAG
Test Data In)
|
PC4
|
TD0 (JTAG
Test Data Out)
|
PC3
|
TMS (JTAG
Test Mode Select)
|
PC2
|
TCK (JTAG
Test Clock)
|
PC1
|
SDA
(Two-wire Serial Bus Data Input/Output Line)
|
PC0
|
SCL
(Two-wire Serial Bus Clock Line)
|
Tabel 2. Fungsi khusus port C
f.
Port D (PD0 – PD7)
Merupakan pin input/output dua arah dan pin fungsi khusus, selengkapnya dapat dilihat pada tabel dibawah :
Port
|
Alternate Function
|
PD7
|
OC2 (Timer / Counter2 Output
Compare Match Output)
|
PD6
|
ICP (Timer/Counter1 Input Capture
Pin)
|
PD5
|
OCIA (Timer/Counter1 Output
Compare A Match Output)
|
PD4
|
OCIB (Timer/Counter1 Output
Compare B Match Output)
|
PD3
|
INT1 (External Interrupt 1 Input)
|
PD2
|
INT0 (External Interrupt 0 Input)
|
PD1
|
TXD (USART Output Pin)
|
PD0
|
RXD (USART Input Pin)
|
Tabel 3. Fungsi khusus port D
g. RESET
Merupakan pin yang digunakan untuk me-reset mikrokontroler
h. XTAL1 dan XTAL2
Merupakan pin masukan clock eksternal
i. AVCC
Merupakan pin masukan untuk tegangan ADC
j. AREF
Merupakan pin masukan tegangan referensi ADC
Merupakan pin yang digunakan untuk me-reset mikrokontroler
h. XTAL1 dan XTAL2
Merupakan pin masukan clock eksternal
i. AVCC
Merupakan pin masukan untuk tegangan ADC
j. AREF
Merupakan pin masukan tegangan referensi ADC
4. Penjelasan Sistem Sensor [kembali]
Sensor yang digunakan terdiri dari photo dioda. Sensor ini nilai
resistansinya akan berkurang bila terkena cahaya dan bekerja pada
kondisi riverse bias. Untuk sensor cahayanya digunakan LED Superbright,
komponen ini mempunyai cahaya yang sangat terang, sehingga cukup untuk
mensuplai cahaya ke photo dioda.
Gambar 3. Skema Sensor
Gambar 4. Skema Sensor
Jika photo dioda tidak terkena cahaya, maka nilai resistansinya akan
besar atau dapat diasumsikan menjadi tak hingga. Sehingga arus yang
mengalir pada komparator sangat kecil atau dapat diasumsikan berlogika
0. Jika photo dioda terkena cahaya, maka photo dioda akan bersifat sebagai
sumber tegangan dan nilai resistansinya akan menjadi kecil, sehingga
akan ada arus yang mengalir ke komparator atau berlogika 1.
5. Penjelasan LS293D [kembali]
Digunakan untuk mengatur kecepatan dan arah putar sebuah motor DC
Gambar 5. Screnshoot LS293D
Pin EN1 merupakan
sebuah pin yang difungsikan untuk meng-enable-kan motor DC (ON/OFF motor
DC), oleh karena itu pin EN1 dapat dihubungkan dengan output PWM dari
mikrokontroler. Sedangkan pin IN1 dan IN2 digunakan sebagai input logika
untuk mengatur putaran motor DC dan dapat juga digunakan untuk
memberhentikan motor DC secara cepat (fast motor stop). Jika diinginkan motor berputar searah
jarum jam, maka pin mikrokontroler PD6 (IN1) diberi logika low dan PD7
(IN2) diberi logika high. Sedangkan EN1 dihubungkan dengan output PWM
mikrokontroler (PD4).
Dari gambar diatas, untuk pengaturan arah
dan kecepatan 2 buah motor DC maka hanya tinggal menambahkan sebuah
motor pada output3 dan output4. Pin EN2 merupakan sebuah pin yang
difungsikan untuk meng-enable-kan motor DC 2 (ON/OFF motor DC), oleh
karena itu pin EN2 dapat dihubungkan dengan output PWM dari
mikrokontroler. Sedangkan pin IN3 dan IN4 digunakan sebagai input logika
untuk mengatur putaran motor DC 2 dan dapat juga digunakan untuk
memberhentikan motor DC 2 secara cepat (fast motor stop)
6. Penjelasan LCD [kembali]
LCD (Liquid Cristal Display) berfungsi sebagai penampil data baik dalam bentuk karakter, huruf, angka ataupun grafik.
Gambar 6. Screnshoot LCD
Fitur LCD 16 x 2
Adapun fitur yang disajikan dalam LCD ini adalah :
- Terdiri dari 16 karakter dan 2 baris.
- Mempunyai 192 karakter tersimpan.
- Terdapat karakter generator terprogram.
- Dapat dialamati dengan mode 4-bit dan 8-bit.
- Dilengkapi dengan back light.
Spesifikasi Kaki LCD 16 x 2
Pin
|
Deskripsi
|
1
|
Ground
|
2
|
VCC
|
3
|
Pengatur Kontras
|
4
|
RS/Register Select
|
5
|
R/W, Read/Write LCD Registers
|
6
|
EN/Enable
|
7-14
|
Data I/O Pins
|
15
|
VCC
|
16
|
Ground
|
Register control yang terdapat dalam suatu LCD diantaranya adalah.
- Register perintah yaitu register yang berisi perintah-perintah dari mikrokontroler ke panel LCD (Liquid Cristal Display) pada saat proses penulisan data atau tempat status dari panel LCD (Liquid Cristal Display) dapat dibaca pada saat pembacaan data.
- Register data yaitu register untuk menuliskan atau membaca data dari atau keDDRAM. Penulisan data pada register akan menempatkan data tersebut keDDRAM sesuai dengan alamat yang telah diatur sebelumnya.
Pin, kaki atau jalur input dan kontrol dalam suatu LCD (Liquid Cristal Display) diantaranya adalah :
- Pin data adalah jalur untuk memberikan data karakter yang ingin ditampilkan menggunakan LCD (Liquid Cristal Display) dapat dihubungkan dengan bus data dari rangkaian lain seperti mikrokontroler dengan lebar data 8 bit.
- Pin RS (Register Select) berfungsi sebagai indikator atau yang menentukan jenis data yang masuk, apakah data atau perintah. Logika low menunjukan yang masuk adalah perintah, sedangkan logika high menunjukan data.
- Pin R/W (Read Write) berfungsi sebagai instruksi pada modul jika low tulis data, sedangkan high baca data.
- Pin E (Enable) digunakan untuk memegang data baik masuk atau keluar.
- Pin VLCD berfungsi mengatur kecerahan tampilan (kontras) dimana pin ini dihubungkan dengan trimpot 5 Kohm, jika tidak digunakan dihubungkan ke ground, sedangkan tegangan catu daya ke LCD sebesar 5 Volt.
7. Listing Program [kembali]
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Microprocessor ATMEGA16
Version :
Date : 15/07/2017
Author : Hafiz
Company :
Comments:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h> // library atmega 16
#include <delay.h> // Fungsi waktu
// Alphanumeric LCD Module functions
#include <alcd.h> //library alphanumeric lcd
// Declare your global variables here
void main(void) //menu utama
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00; //Diberikan nilai 00, atau logika low, tidak aktif
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00; // Diberikan nilai 00, atau logika low, tidak aktif
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00; // Diberikan nilai 00, atau logiak low, tidak aktif
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00; // PortD tidak aktif
DDRD=0x30; // Diberikan nilai 00110000 pada PortD
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00; // Timer/Counter 0 tidak aktif
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11,719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1; // inisialisasi Timer/Counter 1
TCCR1B=0x0D; // Inisialisasi timer/Counter 2
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16); // Inisialisasi lcd, 16 karakter
//Input output
DDRB.0=0; //input sensor kiri
DDRB.1=0; //input sensor kanan
DDRD.0=1; //output motor kiri
DDRD.1=1; //output motor kiri
DDRD.2=1; //output motor kanan
DDRD.3=1; //output motor kanan
// Kecepatan motor PWM
OCR1A=200; // Kecepatan motor 1
OCR1B=200; //Kecepatan motor 2
while (1)
{
// Place your code here
if(PINB.0==1 & PINB.1==0) //Sensor kiri hitam, kanan putih, robot belok kiri
{
PORTD.0=1; // Berarti untuk Port D.0 diberikan nilai 1, pada motor kiri
PORTD.1=0; // PortD.1 diberikan nilai 0, pada motor kiri
PORTD.2=0; //PORTD.2 diberikan nilai 0, pada motor kanan
PORTD.3=1; //PORTD.3 diberikan nilai 1 pada motor kanan
lcd_clear(); //perintah untuk meng-clearkan layar lcd
lcd_gotoxy(0,0); //inisialisasi kolom 0 baris 0
lcd_putsf("B0=1 & B1=0"); //Pada LCD, akan dimunculkan B0=1 & B1=0
lcd_gotoxy(0,1); //inisialisasi kolom o, baris 1
lcd_putsf("BELOK KIRI"); //Pada LCD, akan dimunculkan belok kiri
delay_ms(100); // delay selama 100 mili sekon
}
else if (PINB.0==0 & PINB.1==1) // Sensor kanan hitam, kiri putih, robot belok kanan
{
PORTD.0=0; // Port D.0 diberikan nilai 0 atau low, motor kiri
PORTD.1=1; // PortD.1 diberikan nilai 1 atau high, motor kiri
PORTD.2=1; // PortD.2 diberikan nilai 1 atau high, motor kanan
PORTD.3=0; // PortD.3 diberikan nilai 0 atau low, motor kanan
lcd_clear(); // menclear kan LCD
lcd_gotoxy(0,0);// inisialisasi kolom o baris 0
lcd_putsf("B0=0 & B1=1"); // Pada Lcd, akan dimnculkan B0=0 & B1=1
lcd_gotoxy(0,1); // inisialisasi kolom 0 baris 1
lcd_putsf("BELOK KANAN"); // Pada Lcd, akan dimunculkan Belok kanan
delay_ms(100); // delay atau waktu tunda selama 100 mili sekon
}
else if (PINB.0==1 & PINB.1==1) // Jika kedua sensor sama sama membaca hitam, maka robot akan mati
{
PORTD.0=0; // Pada PortD.0 diberikan logika low. motor kiri
PORTD.1=0; // Pada PortD.1 diberikan logika high, motor kiri
PORTD.2=0; // Pada PortD.2 diberikan logika low , motor kanan
PORTD.3=0; // Pada PortD.3 diberikan logika low, motor kanan
lcd_clear(); // Perintah untuk mengclearkan lcd
lcd_gotoxy(0,0); // Inisialisasi kolom 0 baris 0
lcd_putsf("B0=1 & B1=1"); // Pada LCD, akan ditampilkan B0=1 & B1=1
lcd_gotoxy(0,1); // Inisialisasi kolom 0 baris 1
lcd_putsf("Berhenti"); // Pada Lcd, akan ditampilkan kata-kata berhenti
delay_ms(100); // Waktu tunda selama 100 ms
}
else //Jika Sensor sama sama mebaca warna putih, maka bergerak maju
{
PORTD.0=0; // Pada PortD.0 diberikan logika low, motor kiri
PORTD.1=1; // Pada PortD.1 diberikan logika high, motor kiri
PORTD.2=0; // Pada PortD.2 diberikan logika low, motor kanan
PORTD.3=1; // Pada PortD.3 diberikan logika high, motor kanan
lcd_clear(); // Perintah untuk mengclearkan LCD
lcd_gotoxy(0,0); // Inisialisasi kolom 0 baris 0 pada Lcd
lcd_putsf("B0=0 & B1=0"); // Pada Lcd, akan ditampilkan B0=0 & B1=0
lcd_gotoxy(0,1); // Inisialisasi kolom 0 baris 1 pada Lcd
lcd_putsf("MAJU"); // Pada LCD, akan dtampilkan Maju
delay_ms(100); // Waktu tunda selama 100 ms
}
}
}
8. Video [kembali]
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Microprocessor ATMEGA16
Version :
Date : 15/07/2017
Author : Hafiz
Company :
Comments:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h> // library atmega 16
#include <delay.h> // Fungsi waktu
// Alphanumeric LCD Module functions
#include <alcd.h> //library alphanumeric lcd
// Declare your global variables here
void main(void) //menu utama
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00; //Diberikan nilai 00, atau logika low, tidak aktif
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00; // Diberikan nilai 00, atau logika low, tidak aktif
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00; // Diberikan nilai 00, atau logiak low, tidak aktif
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00; // PortD tidak aktif
DDRD=0x30; // Diberikan nilai 00110000 pada PortD
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00; // Timer/Counter 0 tidak aktif
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11,719 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1; // inisialisasi Timer/Counter 1
TCCR1B=0x0D; // Inisialisasi timer/Counter 2
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16); // Inisialisasi lcd, 16 karakter
//Input output
DDRB.0=0; //input sensor kiri
DDRB.1=0; //input sensor kanan
DDRD.0=1; //output motor kiri
DDRD.1=1; //output motor kiri
DDRD.2=1; //output motor kanan
DDRD.3=1; //output motor kanan
// Kecepatan motor PWM
OCR1A=200; // Kecepatan motor 1
OCR1B=200; //Kecepatan motor 2
while (1)
{
// Place your code here
if(PINB.0==1 & PINB.1==0) //Sensor kiri hitam, kanan putih, robot belok kiri
{
PORTD.0=1; // Berarti untuk Port D.0 diberikan nilai 1, pada motor kiri
PORTD.1=0; // PortD.1 diberikan nilai 0, pada motor kiri
PORTD.2=0; //PORTD.2 diberikan nilai 0, pada motor kanan
PORTD.3=1; //PORTD.3 diberikan nilai 1 pada motor kanan
lcd_clear(); //perintah untuk meng-clearkan layar lcd
lcd_gotoxy(0,0); //inisialisasi kolom 0 baris 0
lcd_putsf("B0=1 & B1=0"); //Pada LCD, akan dimunculkan B0=1 & B1=0
lcd_gotoxy(0,1); //inisialisasi kolom o, baris 1
lcd_putsf("BELOK KIRI"); //Pada LCD, akan dimunculkan belok kiri
delay_ms(100); // delay selama 100 mili sekon
}
else if (PINB.0==0 & PINB.1==1) // Sensor kanan hitam, kiri putih, robot belok kanan
{
PORTD.0=0; // Port D.0 diberikan nilai 0 atau low, motor kiri
PORTD.1=1; // PortD.1 diberikan nilai 1 atau high, motor kiri
PORTD.2=1; // PortD.2 diberikan nilai 1 atau high, motor kanan
PORTD.3=0; // PortD.3 diberikan nilai 0 atau low, motor kanan
lcd_clear(); // menclear kan LCD
lcd_gotoxy(0,0);// inisialisasi kolom o baris 0
lcd_putsf("B0=0 & B1=1"); // Pada Lcd, akan dimnculkan B0=0 & B1=1
lcd_gotoxy(0,1); // inisialisasi kolom 0 baris 1
lcd_putsf("BELOK KANAN"); // Pada Lcd, akan dimunculkan Belok kanan
delay_ms(100); // delay atau waktu tunda selama 100 mili sekon
}
else if (PINB.0==1 & PINB.1==1) // Jika kedua sensor sama sama membaca hitam, maka robot akan mati
{
PORTD.0=0; // Pada PortD.0 diberikan logika low. motor kiri
PORTD.1=0; // Pada PortD.1 diberikan logika high, motor kiri
PORTD.2=0; // Pada PortD.2 diberikan logika low , motor kanan
PORTD.3=0; // Pada PortD.3 diberikan logika low, motor kanan
lcd_clear(); // Perintah untuk mengclearkan lcd
lcd_gotoxy(0,0); // Inisialisasi kolom 0 baris 0
lcd_putsf("B0=1 & B1=1"); // Pada LCD, akan ditampilkan B0=1 & B1=1
lcd_gotoxy(0,1); // Inisialisasi kolom 0 baris 1
lcd_putsf("Berhenti"); // Pada Lcd, akan ditampilkan kata-kata berhenti
delay_ms(100); // Waktu tunda selama 100 ms
}
else //Jika Sensor sama sama mebaca warna putih, maka bergerak maju
{
PORTD.0=0; // Pada PortD.0 diberikan logika low, motor kiri
PORTD.1=1; // Pada PortD.1 diberikan logika high, motor kiri
PORTD.2=0; // Pada PortD.2 diberikan logika low, motor kanan
PORTD.3=1; // Pada PortD.3 diberikan logika high, motor kanan
lcd_clear(); // Perintah untuk mengclearkan LCD
lcd_gotoxy(0,0); // Inisialisasi kolom 0 baris 0 pada Lcd
lcd_putsf("B0=0 & B1=0"); // Pada Lcd, akan ditampilkan B0=0 & B1=0
lcd_gotoxy(0,1); // Inisialisasi kolom 0 baris 1 pada Lcd
lcd_putsf("MAJU"); // Pada LCD, akan dtampilkan Maju
delay_ms(100); // Waktu tunda selama 100 ms
}
}
}
8. Video [kembali]