/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : Line Follower
Version : 1.0
Date : 11/24/2011
Author : http//:www.gunture.blogspot.com
Company : Microware
Comments: Settingan Pin, Arah motor, dan sensor sesuai dengan Elektronik Robot Anda
Chip type : ATmega8
Program type : Application
Clock frequency : 11,059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include //panggil library Atmega8
#include //panggil Library Delay
#define maju_kanan PORTC.1
#define mundur_kanan PORTC.0
#define maju_kiri PORTC.2
#define mundur_kiri PORTC.3
#define kec_kiri OCR1A //PIN PWM ATMEGA8
#define kec_kanan OCR1B //PIN PWM ATMEGA8
// Declare your global variables here
int posisi;
//Fungsi Robot Berjalan Maju
void maju(int lpwm, int rpwm){
maju_kiri = 1; maju_kanan = 1;
mundur_kiri = 0; mundur_kanan = 0;
lpwm=kec_kiri; rpwm=kec_kanan;
}
//Fungsi Robot Berjalan Pivot Kanan
void pivot_kanan(int lpwm, int rpwm){
maju_kiri = 1; maju_kanan = 0;
mundur_kiri = 0; mundur_kanan = 1;
lpwm=kec_kiri; rpwm=kec_kanan;
}
//Fungsi Robot Berjalan Pivot Kiri
void pivot_kiri(int lpwm, int rpwm){
maju_kiri = 0; maju_kanan = 1;
mundur_kiri = 1; mundur_kanan = 0;
lpwm=kec_kiri; rpwm=kec_kanan;
}
//Fungsi pembacaan sensor, sensor dihubungkan ke PORTD sebagai input
int baca_sensor(){
switch(PIND){
case 0b01111111 : posisi=9; break;
case 0b00111111 : posisi=9; break;
case 0b00011111 : posisi=9; break;
case 0b00001111 : posisi=9; break;
case 0b00000111 : posisi=9; break;
case 0b00000001 : posisi=7; break;
case 0b00000011 : posisi=6; break;
case 0b00000010 : posisi=5; break;
case 0b00000110 : posisi=4; break;
case 0b00000100 : posisi=3; break;
case 0b00001100 : posisi=2; break;
case 0b00001000 : posisi=1; break;
case 0b00011000 : posisi=0; break; //posisi tengah
case 0b00010000 : posisi=-1; break;
case 0b00110000 : posisi=-2; break;
case 0b00100000 : posisi=-3; break;
case 0b01100000 : posisi=-4; break;
case 0b01000000 : posisi=-5; break;
case 0b11000000 : posisi=-6; break;
case 0b10000000 : posisi=-7; break;
case 0b11100000 : posisi=-9; break;
case 0b11110000 : posisi=-9; break;
case 0b11111000 : posisi=-9; break;
case 0b11111100 : posisi=-9; break;
case 0b11111110 : posisi=-9; break;
case 0b00000000: if (posisi < 0)posisi = -9;else if (posisi > 0)posisi = 9;break; //robot kehilangan garis
}
return posisi;
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0x7F;
// Port D 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
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 10,800 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
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: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=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;
while (1)
{
// Place your code here
//Program Utama
switch(baca_sensor()){
case -9: pivot_kiri(150,150);break;
case -7: pivot_kiri(175,10);break;
case -6: maju(200,0);break;
case -5: maju(255,30);break;
case -4: maju(255,75);break;
case -3: maju(255,100);break;
case -2: maju(255,170);break;
case -1: maju(255,230);break;
case 0: maju(255,255);break;
case 1: maju(230,255);break;
case 2: maju(170,255);break;
case 3: maju(100,255);break;
case 4: maju(75,255);break;
case 5: maju(30,255);break;
case 6: maju(0,200);break;
case 7: pivot_kanan(10,200);break;
case 9: pivot_kanan(150,150);break;
}
};
}
Menu atas
- Beranda
- Galeri
- Tentang saya
- Jam Digital dengan DS1307 dan Animasi 60 buah LED dengan ATMega32
- Program running text dengan 7 segment menggunakan BASCOM-AVR
- Membuat Jam Digital Menggunakan Bahasa C++
- Jam digital dengan P16F84A MCU
- Jam Digital dengan Mikrokontroler ATmega
- Digital Clock using pic18f8680, counters, external clocks
- Robot Pemadam Api (KRCI) dengan KRCI.BS2
- Robot Pemadam Api (KRCI) dengan UVTRON.OSC
- Robot line follower Dengan Fuzzy Logic
- Robot Line follower dengan Assembler
- Robot line follower menggunakan Bascom AVR
- Robot Line Follower menggunakan CodeVisionAVR
- Robot Line Follower Dengan Fuzzy Logic
Tidak ada komentar:
Posting Komentar