Line

Published on January 2017 | Categories: Documents | Downloads: 54 | Comments: 0 | Views: 372
of 19
Download PDF   Embed   Report

Comments

Content

/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced
Automatic Program Generator
© Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 12/7/2012
Author : NeVaDa
Company : FT-ROBOTIKA
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
#include
#include
#include

<mega16.h>
<stdarg.h>
<stdio.h>
<delay.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#define
#define
#define
#define

enter PINC.4
back PINC.5
kanan PINC.6
kiri PINC.7

#define lampu PORTB.3
#define
#define
#define
#define

PWM_ka
PWM_ki
dir_ka
dir_ki

OCR1B
OCR1A
PORTD.3
PORTD.6

#define sel1 PORTA.0
#define sel2 PORTA.1
#define sel3 PORTA.2

//tombol-tombol

//0=>LCD nyala; 1=>Lcd mati
//PD5 untuk driver
//PD4

//Untuk selektor mux sensor

#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
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;
}
unsigned char adc_masuk[18],min_adc[18], max_adc[18], batas_adc[18],sensor[18],i
,ka,ki,kp,kd,kaa,kii; //variabel untuk PID biasa tok
unsigned char menu,set,star;
unsigned int front_sensor;
//variabel untuk menu
unsigned char front1,counter=0,pertigaan_ka=0,pertigaan_ki=0,tigaan_ka=0,tigaan_
ki=0,perempatan=0,r=0,l=0,itung_kanan,itung_kiri; //variabel untuk kondisi
int speed_ka,speed_ki,error_before,mv,error,speed;
eeprom int ee_batas[18],ee_kp,ee_kd,ee_speed;
// Declare your global variables here
void tampil_lcd(unsigned char baris, unsigned char kolom, char flash *fmtstr,...
)
{
//fungsi dapet bikinnya mas Hers
on, kalo mau pake harus selipkan #include <stdarg.h>
char lcd[17];
va_list ap;
va_start(ap, fmtstr);
vsprintf(lcd, fmtstr, ap);
va_end(ap);
lcd_gotoxy(kolom, baris);
lcd_puts(lcd);
}
void baca_adc()
{
sel1=0;sel2=0;sel3=0;adc_masuk[1]=read_adc(4);
sel1=0;sel2=0;sel3=1;adc_masuk[2]=read_adc(4);
sel1=0;sel2=1;sel3=0;adc_masuk[3]=read_adc(4);
sel1=0;sel2=1;sel3=1;adc_masuk[0]=read_adc(4);
sel1=1;sel2=0;sel3=0;adc_masuk[4]=read_adc(4);
sel1=1;sel2=0;sel3=1;adc_masuk[7]=read_adc(4);
sel1=1;sel2=1;sel3=0;adc_masuk[5]=read_adc(4);
sel1=1;sel2=1;sel3=1;adc_masuk[6]=read_adc(4);
sel1=0;sel2=0;sel3=0;adc_masuk[9]=read_adc(3);
sel1=0;sel2=0;sel3=1;adc_masuk[10]=read_adc(3);
sel1=0;sel2=1;sel3=0;adc_masuk[11]=read_adc(3);
sel1=0;sel2=1;sel3=1;adc_masuk[8]=read_adc(3);
sel1=1;sel2=0;sel3=0;adc_masuk[12]=read_adc(3);
sel1=1;sel2=0;sel3=1;adc_masuk[15]=read_adc(3);
sel1=1;sel2=1;sel3=0;adc_masuk[13]=read_adc(3);
sel1=1;sel2=1;sel3=1;adc_masuk[14]=read_adc(3);
adc_masuk[16]=read_adc(1);
adc_masuk[17]=read_adc(0);
}
void init_RAM()
{
kp=ee_kp;

kd=ee_kd;
speed=ee_speed;
for(i=0;i<18;i++)
{
batas_adc[i]=ee_batas[i];
};
}
void tampil_bit()
{
while(1)
{
baca_adc();
front_sensor=0;
for(i=0;i<16;i++)
{
if(adc_masuk[i]>batas_adc[i])
//lebih dari batas ditampil
0, karena sensorku terbalik cooy..putih ko malah 255.. hhehe..
{
front_sensor=front_sensor|0<<15-i;
lcd_gotoxy(i,0);
lcd_putsf("0");
}
else
{
front_sensor=front_sensor|1<<15-i;
lcd_gotoxy(i,0);
lcd_putsf("1");
};
}
if (adc_masuk[16]>batas_adc[16])
{
lcd_gotoxy(0,1);
lcd_putsf("0");
ki=0;
}
else
{
lcd_gotoxy(0,1);
lcd_putsf("1");
ki=1;
}
if (adc_masuk[17]>batas_adc[17])
{
lcd_gotoxy(15,1);
lcd_putsf("0");
ka=0;
}
else
{
lcd_gotoxy(15,1);
lcd_putsf("1");
ka=1;
}
if(back==0)
{
delay_ms(200);
lcd_clear();

break;
}
};
}
void tampil_analog()
{
while(1)
{
baca_adc();
tampil_lcd(0,0, "%3d %3d %3d %3d", adc_masuk[0],adc_masuk[1],adc_masuk[2],ad
c_masuk[3]);
tampil_lcd(1,0, "%3d %3d %3d %3d", adc_masuk[4],adc_masuk[5],adc_masuk[6],ad
c_masuk[7]);
if (kanan==0)
{
lcd_clear();
while(1)
{
// delay_ms(200);
baca_adc();
tampil_lcd(0,0, "%3d %3d %3d %3d", adc_masuk[8],adc_masuk[9],adc_mas
uk[10],adc_masuk[11]);
tampil_lcd(1,0, "%3d %3d %3d %3d", adc_masuk[12],adc_masuk[13],adc_m
asuk[14],adc_masuk[15]);
if(kanan==0){
lcd_clear();
while(1){
// delay_ms(200);
baca_adc();
tampil_lcd(0,0, " %3d<-- -->%3d ", adc_masuk[16],adc_masuk[1
7]);
if (kiri==0)
{
delay_ms(200);
lcd_clear();
break;
}
}
}
if (kiri==0)
{
delay_ms(200);
lcd_clear();
break;
}
};
}
if(back==0)
{
delay_ms(200);
lcd_clear();
break;
}
};
}
void auto_set()
{
for (i=0;i<19;i++)

{
min_adc[i]=0;
max_adc[i]=255;
};
while(1)
{
baca_adc();
for (i=0;i<19;i++)
{
if (adc_masuk[i]>min_adc[i]){min_adc[i]=adc_masuk[i];};
if (adc_masuk[i]<max_adc[i]){max_adc[i]=adc_masuk[i];};
batas_adc[i]=min_adc[i]+(max_adc[i]-min_adc[i])/2;
ee_batas[i]=batas_adc[i];
};
if (back==0)
{
delay_ms(200);
lcd_clear();
break;
}
};
}
void variabel_sensor()
{
baca_adc();
front_sensor=0;
for(i=0;i<16;i++)
{
if(adc_masuk[i]>batas_adc[i]){front_sensor=front_sensor|0<<15-i;}
else {front_sensor=front_sensor|1<<15-i;};
}
if (adc_masuk[16]>batas_adc[16]){ki=0;} else{ki=1;}
if (adc_masuk[17]>batas_adc[17]){ka=0;} else{ka=1;}
for(i=0;i<17;i++)
{
if(adc_masuk[i]>batas_adc[i]){sensor[i]=0;}
else {sensor[i]=1;};
}
};
void PID()
{
mv=(kp*error)+(kd*(error-error_before));
speed_ka=speed-mv;
speed_ki=speed+mv ;
error_before=error;
if(speed_ka>250) {speed_ka=250;};
if(speed_ki>250) {speed_ki=250;};
if(speed_ka<-250){speed_ka=-250;};
if(speed_ki<-250){speed_ki=-250;};
tampil_lcd(1,0,"%3d
}

%3d

%3d",speed_ki,error,speed_ka);

void PWM_out()
{
if(speed_ka>0)
{
PWM_ka=(unsigned char)speed_ka;
dir_ka=0;
}
else
{
speed_ka=(unsigned char)255+speed_ka;
PWM_ka=speed_ka;
dir_ka=1;
}
if(speed_ki>0)
{
PWM_ki=(unsigned char)speed_ki;
dir_ki=0;
}
else
{
speed_ki=(unsigned char)255+speed_ki;
PWM_ki=speed_ki;
dir_ki=1;
}
}
void set_kp()
{
lcd_clear();
while(1)
{
tampil_lcd(0,0,"--> Set KP <--");
tampil_lcd(1,0,"KP = %3d" ,kp);
if(kanan==0){delay_ms(200);kp++;};
if(kiri==0){delay_ms(200);kp--;};
if(kp>30) {kp=0;};
if(back==0){delay_ms(200);lcd_clear();break;};
ee_kp=kp;
};
}
void set_kd()
{
lcd_clear();
while(1)
{
tampil_lcd(0,0,"--> Set KD <--");
tampil_lcd(1,0,"KD = %3d" ,kd);
if(kanan==0){delay_ms(130);kd++;};
if(kiri==0){delay_ms(130);kd--;};
if(kd>99) {kd=0;};
if(back==0){delay_ms(200);lcd_clear();break;};
ee_kd=kd;
};
}
void set_speed()
{
lcd_clear();
while(1)
{

//maju

//mundur

tampil_lcd(0,0,"-> Set Speed <-");
tampil_lcd(1,0,"Speed = %3d" ,speed);
if(kanan==0){delay_ms(70);speed++;};
if(kiri==0){delay_ms(70);speed--;};
if(speed>250) {speed=0;};
if(speed<0) {speed=255;};
if(back==0){delay_ms(200);lcd_clear();break;};
ee_speed=speed;
};
}
void look_setting()
{
while(1)
{
lcd_clear();
tampil_lcd(0,0, " Kp Speed Kd ");
tampil_lcd(1,0, "%3d %3d %3d",ee_kp,ee_speed,ee_kd);
if (back==0){delay_ms(200);lcd_clear();break;};
} }
void cek_motor()
{
while(1)
{
speed_ki=speed_ka=50;
PWM_out();
delay_ms(1000);
speed_ki=speed_ka=-90;
PWM_out();
delay_ms(1000);
speed_ki=90;
speed_ka=-90;
PWM_out();
delay_ms(1000);
speed_ki=-90;
speed_ka=90;
PWM_out();
delay_ms(1000);
speed_ki=speed_ka=0;
PWM_out();
break;
}
}
void track(){
variabel_sensor();
if(front_sensor==0b0111111111111111)error=-20;
else if(front_sensor==0b0011111111111111)error=-20;
else if(front_sensor==0b0001111111111111)error=-20;
else if(front_sensor==0b0000111111111111)error=-20;
else if(front_sensor==0b1000111111111111)error=-15;
else if(front_sensor==0b1000011111111111)error=-15;
else if(front_sensor==0b1100011111111111)error=-15;
else if(front_sensor==0b1100001111111111)error=-10;
else if(front_sensor==0b1110001111111111)error=-10;
else if(front_sensor==0b1110000111111111)error=-9;
else if(front_sensor==0b1111000111111111)error=-9;
else if(front_sensor==0b1111000011111111)error=-5;
else if(front_sensor==0b1111100011111111)error=-5;
else if(front_sensor==0b1111100001111111)error=-3;

else
else
else
else
else
else
else
else
else
else
else
else
else
else
else
else
else

if(front_sensor==0b1111110001111111)error=-3;
if(front_sensor==0b1111110000111111)error=0;
if(front_sensor==0b1111111000111111)error=3;
if(front_sensor==0b1111111000011111)error=3;
if(front_sensor==0b1111111100011111)error=5;
if(front_sensor==0b1111111100001111)error=5;
if(front_sensor==0b1111111110001111)error=9;
if(front_sensor==0b1111111110000111)error=9;
if(front_sensor==0b1111111111000111)error=10;
if(front_sensor==0b1111111111000011)error=10;
if(front_sensor==0b1111111111100011)error=15;
if(front_sensor==0b1111111111100001)error=15;
if(front_sensor==0b1111111111110001)error=15;
if(front_sensor==0b1111111111110000)error=20;
if(front_sensor==0b1111111111111000)error=20;
if(front_sensor==0b1111111111111100)error=20;
if(front_sensor==0b1111111111111110)error=20;

}
void track2(){
variabel_sensor();
if(front_sensor==0b0001111111111111)error=-35;
else if(front_sensor==0b0000111111111111)error=-35;
else if(front_sensor==0b0111111111111111)error=-35;
else if(front_sensor==0b0011111111111111)error=-35;
else if(front_sensor==0b1011111111111111)error=-20;
else if(front_sensor==0b1001111111111111)error=-12;
else if(front_sensor==0b1101111111111111)error=-12;
else if(front_sensor==0b1100111111111111)error=-12;
else if(front_sensor==0b1110111111111111)error=-12;
else if(front_sensor==0b1110011111111111)error=-9;
else if(front_sensor==0b1111011111111111)error=-9;
else if(front_sensor==0b1111001111111111)error=-7;
else if(front_sensor==0b1111101111111111)error=-7;
else if(front_sensor==0b1111100111111111)error=-3;
else if(front_sensor==0b1111110111111111)error=-3;
else if(front_sensor==0b1111110011111111)error=-1;
else if(front_sensor==0b1111111011111111)error=-1;
else if(front_sensor==0b1111111001111111)error=0;
else if(front_sensor==0b1111111101111111)error=1;
else if(front_sensor==0b1111111100111111)error=1;
else if(front_sensor==0b1111111110111111)error=3;
else if(front_sensor==0b1111111110011111)error=3;
else if(front_sensor==0b1111111111011111)error=7;
else if(front_sensor==0b1111111111001111)error=7;
else if(front_sensor==0b1111111111101111)error=9;
else if(front_sensor==0b1111111111100111)error=9;
else if(front_sensor==0b1111111111110111)error=12;
else if(front_sensor==0b1111111111110011)error=12;
else if(front_sensor==0b1111111111111011)error=12;
else if(front_sensor==0b1111111111111001)error=20;
else if(front_sensor==0b1111111111111101)error=20;
else if(front_sensor==0b1111111111111100)error=20;
else if(front_sensor==0b1111111111111110)error=35;
else if(front_sensor==0b1111111111111000)error=35;
else if(front_sensor==0b1111111111110000)error=35;
// else if(front_sensor==0b1111111111111111){
// if(error>0){error=25;}
// else {error=-25;}
// }

}
void track_1(){
if(front_sensor==0b0000001111111111)error=-23;
else if(front_sensor==0b0000000111111111)error=-23;
else if(front_sensor==0b0000000011111111)error=-23;
else if(front_sensor==0b0000000001111111)error=-23;
else if(front_sensor==0b0000000000111111)error=-23;
else if(front_sensor==0b0000000000011111)error=-23;
else if(front_sensor==0b0000000000001111)error=-23;
else if(front_sensor==0b0000000000000111)error=-23;
else
else
else
else
else
else
else
else
else

if(front_sensor==0b1111111111100000)error=23;
if(front_sensor==0b1111111111000000)error=23;
if(front_sensor==0b1111111110000000)error=23;
if(front_sensor==0b1111111100000000)error=23;
if(front_sensor==0b1111111000000000)error=23;
if(front_sensor==0b1111110000000000)error=23;
if(front_sensor==0b1111100000000000)error=23;
if(front_sensor==0b1111000000000000)error=23;
if(front_sensor==0b1110000000000000)error=23;

}
void analog(){
variabel_sensor();
if(front_sensor==0b1111111111111111){speed_ka=150;speed_ki=-150;PWM_out();}
else if(front_sensor==0b0111111111111111){speed_ka=100;speed_ki=40;PWM_out()
;}
else if(front_sensor==0b0011111111111111){speed_ka=100;speed_ki=50;PWM_out()
;}
else if(front_sensor==0b0001111111111111){speed_ka=100;speed_ki=60;PWM_out()
;}
else if(front_sensor==0b0000111111111111){speed_ka=100;speed_ki=70;PWM_out()
;}
else if(front_sensor==0b0000011111111111){speed_ka=100;speed_ki=80;PWM_out()
;}
else if(front_sensor==0b1100011111111111){speed_ka=100;speed_ki=100;PWM_out(
);}
else if(front_sensor==0b1110011111111111){speed_ka=100;speed_ki=100;PWM_out(
);}
else {speed_ka=-150;speed_ki=150;PWM_out();}
}
void cakram_b(){
while(1){
variabel_sensor();
if(ka==0 || ki==0){
speed_ki=speed_ka=0;
PWM_out();
speed_ki=speed_ka=-180;
PWM_out();delay_ms(30);
speed_ki=speed_ka=0;
PWM_out();delay_ms(20);goto end;
}
else {speed_ka=speed_ki=60;PWM_out();}
}

end:
}
void cakram(){
speed_ki=speed_ka=0;
PWM_out();
speed_ki=speed_ka=-120;
PWM_out();delay_ms(5);
speed_ki=speed_ka=0;
PWM_out();delay_ms(5);
}
void belokR(){
speed_ki=-170;
speed_ka=90;
PWM_out();delay_ms(70);
speed_ki=speed_ka=0;PWM_out();
jo:
speed_ki=-220;
speed_ka=110;
PWM_out();
variabel_sensor();
if(sensor[3]!=0){goto jo;}
speed_ki=120;
speed_ka=-90;
PWM_out();delay_ms(15);
speed_ki=speed_ka=0;
PWM_out();
}
void belokL(){
speed_ki=90;
speed_ka=-170;
PWM_out();delay_ms(70);
speed_ki=speed_ka=0;PWM_out();
ji:
speed_ki=110;
speed_ka=-220;
PWM_out();
variabel_sensor();
if(sensor[12]!=0){goto ji;}
speed_ki=-90;
speed_ka=120;
PWM_out();delay_ms(15);
speed_ki=speed_ka=0;
PWM_out();
}
void jalan(){
//while(1){
variabel_sensor();
// track_1();
track2();
PID();
PWM_out();
//}

}
void jalan2(){
//
while(1){
variabel_sensor();
track2();
PID();
PWM_out();
//
}
}
unsigned int rrr;
unsigned int start2(unsigned int hhh){
speed=90;kp=4;kd=11;
for(rrr=0;rrr<hhh;rrr++){
jalan2();
delay_ms(1);
}
speed_ka=speed_ki=0;PWM_out();delay_ms(10);
}
unsigned char xx;
unsigned char itung_siku(unsigned char hh){
xx=0;
while(xx<=hh){
jalan();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0){cakram();belokL();xx++;}
if(sensor[0]==0 && sensor[1]==0){cakram();belokR();xx++;}
}
xx=0;hh=0;
}
void start_ki(){
speed_ki=speed_ka=100;PWM_out();delay_ms(150);
speed_ki=speed_ka=0;PWM_out();delay_ms(10);
speed=95;kp=4;kd=11;
while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[2]==0)break;
}
cakram();belokR();
while(1){
speed_ki=speed_ka=90;
PWM_out();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokL();
speed=95;
itung_siku(4);
}
void check_1_ki(){
speed=75;
while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[12]==0)break;
}
cakram();belokL();

speed_ki=90;
speed_ka=-190;
PWM_out();delay_ms(50);
speed_ki=speed_ka=0;
PWM_out();delay_ms(20);
while(1){
speed_ki=speed_ka=80;
PWM_out();
variabel_sensor();
if(sensor[1]==0 && sensor[2]==0)break;
}
cakram();belokR();
speed=65;
while(1){
jalan();
variabel_sensor();
if(sensor[1]==0 && sensor[2]==0)break;
}
cakram();belokR();
while(1){
speed_ki=speed_ka=80;
PWM_out();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokL();
speed=75;
while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[12]==0)break;
}
cakram();belokL();
speed_ki=90;
speed_ka=-190;
PWM_out();delay_ms(60);
speed_ki=speed_ka=0;
PWM_out();delay_ms(20);
speed=75;
while(1){
speed_ki=speed_ka=90;
PWM_out();
variabel_sensor();
if(sensor[1]==0 && sensor[0]==0)break;
}
speed_ki=speed_ka=100;PWM_out();delay_ms(30);
cakram();belokR();
while(1){
jalan();
variabel_sensor();
if(sensor[1]==0 && sensor[0]==0)break;
}
cakram();belokR();
while(1){
speed_ki=speed_ka=90;
PWM_out();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;

}
cakram();belokL();
}
void check_2_ki(){
speed=110;
kp=3;kd=11;
while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[12]==0)break;
}
cakram();
start2(220);
/*
while(1){
jalan();
variabel_sensor();
if(front_sensor==0b1111111111111111)break;
}
cakram();belokR();
*/
while(1){
jalan();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokL();
while(1){
jalan();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokL();
itung_siku(2);
delay_ms(10000);
}
void start_ka(){
speed_ki=speed_ka=100;PWM_out();delay_ms(150);
speed_ki=speed_ka=0;PWM_out();delay_ms(10);
speed=95;kp=4;kd=11;
while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[2]==0)break;
}
cakram();belokR();
while(1){
speed_ki=speed_ka=90;
PWM_out();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokL();
speed=95;
itung_siku(4);
}
void check_1_ka(){
speed=75;

while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[12]==0)break;
}
cakram();belokL();
speed_ki=90;
speed_ka=-190;
PWM_out();delay_ms(50);
speed_ki=speed_ka=0;
PWM_out();delay_ms(20);
while(1){
speed_ki=speed_ka=80;
PWM_out();
variabel_sensor();
if(sensor[1]==0 && sensor[2]==0)break;
}
cakram();belokR();
speed=65;
while(1){
jalan();
variabel_sensor();
if(sensor[1]==0 && sensor[2]==0)break;
}
cakram();belokR();
while(1){
speed_ki=speed_ka=80;
PWM_out();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokL();
speed=75;
while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[12]==0)break;
}
cakram();belokL();
speed_ki=90;
speed_ka=-190;
PWM_out();delay_ms(60);
speed_ki=speed_ka=0;
PWM_out();delay_ms(20);
speed=75;
while(1){
speed_ki=speed_ka=90;
PWM_out();
variabel_sensor();
if(sensor[1]==0 && sensor[0]==0)break;
}
speed_ki=speed_ka=100;PWM_out();delay_ms(30);
cakram();belokR();
while(1){
jalan();
variabel_sensor();
if(sensor[1]==0 && sensor[0]==0)break;
}

cakram();belokR();
while(1){
speed_ki=speed_ka=90;
PWM_out();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokL();
}
void check_2_ka(){
speed=110;
kp=3;kd=11;
while(1){
jalan();
variabel_sensor();
if(sensor[3]==0 && sensor[12]==0)break;
}
cakram();
start2(220);
/* while(1){
jalan();
variabel_sensor();
if(front_sensor==0b1111111111111111)break;
}
cakram();belokL();
*/
while(1){
jalan();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokR();
while(1){
jalan();
variabel_sensor();
if(sensor[14]==0 && sensor[15]==0)break;
}
cakram();belokR();
itung_siku(2);
delay_ms(10000);
}
void setting()
{
lcd_clear();
set=1;
while(1){
if(kanan==0) {delay_ms(200);set++;};
if(kiri==0){delay_ms(200);set--;};
if(back==0) {delay_ms(200);lcd_clear();break;};
if(set<1) {set=5;}
else if(set>5) {set=1;};
lcd_gotoxy(0,0);lcd_putsf("Mode Pengesetan");
lcd_gotoxy(0,1);
switch(set){
case 1 : lcd_putsf("1. Set KP ");if(enter==0){delay_ms(200);set_kp();};b
reak;
case 2 : lcd_putsf("2. Set KD ");if(enter==0){delay_ms(200);set_kd();;};
break;

case 3 : lcd_putsf("3. Set Speed ");if(enter==0){delay_ms(200);set_speed();
};break;
case 4 : lcd_putsf("4.Look Setting");if(enter==0){delay_ms(200);look_setting
();};break;
};
};
}
void pilih_ki(void)
{
menu=1;
lcd_clear();
while(1){
if(kanan==0) {delay_ms(100);menu++;};
if(kiri==0){delay_ms(100);menu--;};
if(back==0) {delay_ms(100);lcd_clear();break;};
if(menu<1) {menu=3;}
else if(menu>3) {menu=1;};
PORTD.2=1;PORTD.1=0;
delay_ms(50);
PORTD.2=0;PORTD.1=1;
delay_ms(50);
PORTD.2=PORTD.1=1;
delay_ms(50);
lcd_gotoxy(3,0);lcd_putsf("pilih ki");
lcd_gotoxy(0,1);
switch(menu){
case 1 : lcd_putsf("1. START ");if(enter==0){delay_ms(100);lcd_clear();PORT
D.2=PORTD.1=0;delay_ms(100);start_ki();check_1_ki();check_2_ki();};break;
case 2 : lcd_putsf("2. Check 1");if(enter==0){delay_ms(200);lcd_clear();PORT
D.2=PORTD.1=0;delay_ms(100);check_1_ki();check_2_ki();};break;
case 3 : lcd_putsf("3. Check 2 ");if(enter==0){delay_ms(200);lcd_clear();PO
RTD.2=PORTD.1=0;delay_ms(100);check_2_ki();};break;
};
};
}
void pilih_ka(void)
{
menu=1;
lcd_clear();
while(1){
if(kanan==0) {delay_ms(100);menu++;};
if(kiri==0){delay_ms(100);menu--;};
if(back==0) {delay_ms(100);lcd_clear();break;};
if(menu<1) {menu=3;}
else if(menu>3) {menu=1;};
PORTD.2=1;PORTD.1=0;
delay_ms(50);
PORTD.2=0;PORTD.1=1;
delay_ms(50);
PORTD.2=PORTD.1=1;
delay_ms(50);
lcd_gotoxy(3,0);lcd_putsf("pilih ka");
lcd_gotoxy(0,1);
switch(menu){

case 1 : lcd_putsf("1. START ");if(enter==0){delay_ms(100);lcd_clear();PORT
D.2=PORTD.1=0;delay_ms(100);start_ka();check_1_ka();check_2_ka();};break;
case 2 : lcd_putsf("2. Check 1");if(enter==0){delay_ms(200);lcd_clear();PORT
D.2=PORTD.1=0;delay_ms(100);check_1_ka();check_2_ka();};break;
case 3 : lcd_putsf("3. Check 2 ");if(enter==0){delay_ms(200);lcd_clear();PO
RTD.2=PORTD.1=0;delay_ms(100);check_2_ka();};break;
};
};
}
void main_menu(void)
{
menu=1;
lcd_clear();
while(1){
if(kanan==0) {delay_ms(100);menu++;};
if(kiri==0){delay_ms(100);menu--;};
if(back==0) {delay_ms(100);lcd_clear();break;};
if(menu<1) {menu=6;}
else if(menu>6) {menu=1;};
PORTD.2=1;PORTD.1=0;
delay_ms(50);
PORTD.2=0;PORTD.1=1;
delay_ms(50);
PORTD.2=PORTD.1=1;
delay_ms(50);
lcd_gotoxy(3,0);lcd_putsf("JOSSSSSS");
lcd_gotoxy(0,1);
switch(menu){
case 1 : lcd_putsf("1. START KI ");if(enter==0){delay_ms(100);lcd_clear();P
ORTD.2=PORTD.1=0;delay_ms(100);pilih_ki();};break;
case 2 : lcd_putsf("2. START KA ");if(enter==0){delay_ms(200);lcd_clear();P
ORTD.2=PORTD.1=0;delay_ms(100);pilih_ka();};break;
case 3 : lcd_putsf("3.Tampil Analog");if(enter==0){delay_ms(200);lcd_clear()
;PORTD.2=PORTD.1=0;delay_ms(100);tampil_analog();};break;
case 4 : lcd_putsf("3. Tampil Bit ");if(enter==0){delay_ms(200);lcd_clear()
;PORTD.2=PORTD.1=0;delay_ms(100);tampil_bit();};break;
case 5 : lcd_putsf("4. Set Sensor ");if(enter==0){delay_ms(200);lcd_clear()
;PORTD.2=PORTD.1=0;delay_ms(100);auto_set();};break;
case 6 : lcd_putsf("6. setting ");if(enter==0){delay_ms(200);lcd_clear();s
etting();};break;
};
};
}
// Declare your global variables here
void main(void)
{
// 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;

DDRA=0x07;
// 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;
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=0xF0;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=Out Func0=Out
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=0 State0=0
PORTD=0x00;
DDRD=0x7E;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 46.875 kHz
// Mode: Ph. correct PWM top=00FFh
// 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;
TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;

OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// LCD module initialization
lcd_init(16);
init_RAM();
while (1)
{
// Place your code here
main_menu();
// speed_ki=speed_ka=-50;
// PWM_out();
// delay_ms(1000);
// baca_adc();
//baca_adc();
//tampil_lcd(0,0, "%3d %3d %3d %3d", adc_masuk[8],adc_masuk[9],adc_masuk[10],ad
c_masuk[11]);
//tampil_lcd(1,0, "%3d %3d %3d %3d", adc_masuk[12],adc_masuk[13],adc_masuk[14],
adc_masuk[15]);
};
}

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close