#include <delay.h>
#include <stdio.h>
#define ADC_VREF_TYPE 0x20
int i;
int mj,md;// data buat maju (mj) dan mundur (md)
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void maju()
{
PORTC=0x77;
delay_ms(70);
PORTC=0xFF;
delay_ms(100);
}
void mundur()
{
PORTC=0xDD;
delay_ms(70);
PORTC=0xFF;
delay_ms(100);
}
void blkkiristgh()
{
PORTC=0xF7;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0;
}
void blkkananstgh()
{
PORTC=0x7F;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0;
}
// Declare your global variables here
void main(void)
{
unsigned int ADCIN1, ADCIN3, ADCIN5, ADCIN7,S4,S3,S2,S1;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
UCSRB=0x48;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D; */
DDRC=0xFF;
DDRB=0xFF;
while (1)
{
ADCIN1=read_adc(1);
ADCIN3=read_adc(3);
ADCIN5=read_adc(5);
ADCIN7=read_adc(7);
ADCIN1=ADCIN1+2; // 2 adalah penyamaan nilai
S4=ADCIN7*20; // 20 adalah penguatan nilai
S3=ADCIN5*20;
S2=ADCIN3*20;
S1=ADCIN1*20;
//==========KONDISI BELOK KANAN=========================
if (S1 > 135 && S2 < 135 && S3 < 135 && S4 < 135)
{ PORTC=0x7D;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0; // belok kanan full
}
else if (S1 > 135 && S2 > 135 && S3 < 135 && S4 < 135)
blkkananstgh();
else if (S1 > 135 && S2 > 135 && S3 > 135 && S4 < 135)
blkkananstgh();
//=================KONDISI BELOK KIRI=====================
else if (S1 < 135 && S2 < 135 && S3 < 135 && S4 > 135)
{
PORTC=0xD7;
delay_ms(50);
PORTC=0xFF;
delay_ms(100);
i=0; // belok kiri full
}
else if (S1 < 135 && S2 < 135 && S3 > 135 && S4 > 135)
blkkiristgh();
else if (S1 < 135 && S2 > 135 && S3 > 135 && S4 > 135)
blkkiristgh();
//==================KONDISI MAJU===========================
else if (S2 >135 && S3 > 135 && S1 < 135 && S4 < 135)
{
maju();
mj=mj+1;
}
else if (S2 >135 && S3 < 135 && S1 < 135 && S4 < 135)
{
maju();
mj=mj+1;
}
else if (S2 < 135 && S3 > 135 && S1 < 135 && S4 < 135)
{
maju();
mj=mj+1;
}
else if (S2 > 135 && S3 > 135 && S1 > 135 && S4 > 135)
{
maju();
mj=mj+1;
}
//================KONDISI MUNDUR=======================
else if (S2 < 135 && S3 < 135 && S1 < 135 && S4 < 135)
{
mundur();
md=md+2;
}
else if (S2 < 135 && S3 < 135 && S1 > 135 && S4 > 135)
{
mundur();
md=md+2;
}
else
PORTC=0x77;
if (md>mj)
{
mj=0;
md=0;
for(i=1;i>1000;i++) // perintah mundur jika menemukan jalan buntu beberapa kali
{
PORTC=0xDD;
}
}
//==================KOMUNIKASI TO HYPERTERMINAL=============
/*
printf("S4 = %u ",S4);
printf("S3 = %u ",S3);
printf("S2 = %u ",S2);
printf("S1 = %u ",S1);
printf("mj = %u ",mj);
printf("md = %u \r ",md); */
};
}
Keterangan Flow Chart
< 135 : sensor medeteksi warna putih
> 135 : sensor medeteksi warna hitam
Robot maju : motor kanan berputar searah jarum jam,
motor kiri berputar searah jarum jam (dilihat pada satu sisi)
Robot belok kiri :
motor kanan berputar searah jarum jam, motor kiri berputar berlawanan jarum jam
(dilihat pada satu sisi)
Robot belok kanan :
motor kanan berputar berlawanan jarum jam, motor kiri berputar searah jarum jam
(dilihat pada satu sisi)
Robot mundur :
motor kanan berputar berlawanan jarum jam, motor kiri berputar berlawanan jarum jam
(dilihat pada satu sisi)
Cara Kerja Robot
- Pada saat sensor S2 dan S3 mendeteksi warna hitam
serta S1 dan S4 mendeteksi warna putih maka robot akan bergerak maju sebab S2
dan S3 bernilai > 135 dan S1, S4 < 135
-
Ada tiga kondisi untuk robot
agar belok ke kiri yaitu pada saat S1
> 135, atau S1 dan S2 > dari 135, atau S1, S2, dan S3 > 135
-
Dan ada tiga kondisi juga
untuk robot agar belok ke kanan yaitu pada saat
S4 > 135, atau S4 dan S3 > dari 135, atau S4, S3, dan S2 > 135
-
Untuk perintah mundur akan
dieksekusi pada saat sensor membaca S1, S2, S3, S4 < 135 atau S1, S4 >
135 dan S2, S3 > 135.
Tabel 2.2 Input Output dari
robot
Input
|
Output
|
|||
Sensor
|
Port A
|
Pin
Driver
|
Port C
|
Putaran
Motor
|
S1
|
Pin 1
|
1A
|
Pin 1
|
M Kanan CW
|
S2
|
Pin 3
|
2A
|
Pin 3
|
M Kanan CCW
|
S3
|
Pin 5
|
3A
|
Pin 5
|
M Kiri CCW
|
S4
|
Pin 7
|
4A
|
Pin 7
|
M Kiri CW
|