SKEMATIK RANGKAIAN 5V 4 U L N 0 0 3 8 15 13 5V NOR CLOSED NOR OPEN 1V Klakson IGNITION COIL Accu ISP CONNECTOR 5 4 3 1 PB0 PB1 A V R PA0 PA D B 9 M A L E 3 7 4 5 1uF 16 1 1uF 3 4 1uF 5 7 8 14 M A X 3 15 5V 6 10 9 1uF 47uF pf K 4 MHz MOSI MISO SCK RST 10 Vcc 14 15 1 13 A T M E G A 8 5 3 5 PA4 PA6 31 10uF 10uF 10uF 10uF 330 Ω 330 Ω 330 Ω 330 Ω pf PD6 Gnd Vcc On/Off Gnd Kontak Motor 7805 1V In Out 1 KΩ 100 Ω Gnd 5V
#include <mega8535.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h> #define enter putchar(13) #define mesin PORTB.0 #define klakson PORTB.1 //deklarasi standart input output //deklarasi delay //mendefinisi putchar dengan simbol enter //mendefinisi PORTB.0 dengan mesin //mendefinisi PORTB.1 dengan klakson // Declare your global variables here eeprom unsigned char combo[4]=1,,3,4; //menyimpan password di eeprom unsigned char A[4]; unsigned char temp = 0; unsigned int status = 0; //deklarasi variable status unsigned int mcblk = 0; //deklarasi variable misscal balik unsigned long timecount = 0; //deklarasi variable timer unsigned int pass_bnr = 0; //deklarasi variable password jika benar void miss_call() //fungsi misscall if (mcblk == 0) //jika misscall balik sama dengan nol if (getchar() == 'R') //meminta charakter dari ponsel mcblk = 1; //memberikan nilai miss call if (pass_bnr && mcblk) //validasi password dan misscall balik pass_bnr = 0; //memberikan nilai password dengan nol status = 0; //memberikan nilai status dengan nol mcblk = 0; //memberikan nilai misscal balik dengan nol mesin = 0; //mesin dapat dinyalakan
klakson = 0; TIMSK=0x00; //klakson berhenti berbunyi //mematikan timer void password() //fungsi password if(!(pina.0&&pina.&&pina.4&&pina.6)) if(!pina.0) //jika push button 1 ditekan A[temp]=1; if(!pina.) //jika push button ditekan A[temp]=; if(!pina.4) //jika push button 3 ditekan A[temp]=3; if(!pina.6) //jika push button 4 ditekan A[temp]=4; delay_ms(450); temp++; //menambahkan nilai temp if(temp == 4) //jika temp sudah bernilai 4
temp=0; if((a[0]==combo[0]) && (A[1]==combo[1]) && (A[]==combo[]) && (A[3]==combo[3])) //validasi jika password sama dengan eeprom/benar pass_bnr = 1; //memberikan nilai password if (timecount < 100) //jika kuarang dari 10 detik status = 0; //menset status jadi nol mcblk = 0; //menset miss call balik jadi nol timecount = 0; //menset timer jadi nol TIMSK = 0x00; //mematikan timer klakson = 1; //menyalakan klakson delay_ms(500); klakson = 0; //mematikan klakson Else //jika password salah klakson = 1; //menyalakan klakson delay_ms(500); klakson = 0; //mematikan klakson void telepon_mati() printf("ath"); enter; delay_ms(100); //fungsi mematikan telpon //menutup panggillan
void telepon_lagi() //fungsi telpon lagi printf("atd0856117954;"); //melakukan panggilan ke no pemilik enter; delay_ms(100); // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) //deklarasi interrupt 0 // Place your code here status = 1; //memberikan status apabila kontak dilakukan if (timecount == 0) //mencek apakah timer sudah jalan atau belum TIMSK=0x04; //menjalankan timer // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) //deklarasi timer 1 // Place your code here TCNT1 = 15535; //menset register timer timecount++; //mencounter timer password(); //memanggil fungsi password if(timecount == 100) //jika sudah detik ke 10 printf("atd0856117954;"); //mendial pemilik kendaraan enter;
delay_ms(100); mesin = 1; klakson = 1; //mematikan mesin motor //menyalakan klakson motor if(mcblk == 0) //mencek nilai apakah miss call balik sudah ada if( timecount == 400) //jika sudah detik ke 40 telepon_mati(); //memanggil fungsi menutup pangillan if( timecount == 600) //jika sudah detik ke 60 telepon_lagi(); //memanggil fungsi telpon if (timecount == 600) //jika sudah detik ke 60 timecount = 100; //mengembalikan ke detik 10 void main(void) //deklarasi program utama // Declare your local variables here // Inisialisasi Input/Output Ports // Inisialisasi Port A // Func0=In Func1=Out Func=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=P State1=0 State=P State3=T State4=P State5=T State6=P State7=T PORTA=0x55; DDRA=0x0; // Inisialisasi Port B // Func0=Out Func1=Out Func=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=0 State1=0 State=T State3=T State4=T State5=T State6=T State7=T PORTB=0x00; DDRB=0x03; // Port C initialization // Func0=In Func1=In Func=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State=T State3=T State4=T State5=T State6=T State7=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func0=In Func1=In Func=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State=T State3=T State4=T State5=T State6=T State7=T PORTD=0x00; DDRD=0x00; // 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;
// Inisialisasi Timer/Counter 1 // Clock source: System Clock // Clock value: 500.000 khz // Mode: Normal top=ffffh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x0; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter initialization // Clock source: System Clock // Clock value: Timer Stopped // Mode: Normal top=ffh // OC output: Disconnected ASSR=0x00; TCCR=0x00; TCNT=0x00; OCR=0x00; // Inisialisasi External Interrupt(s) // INT0: On // INT0 Mode: Rising Edge // INT1: Off
// INT: Off GICR =0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40; // Inisialisasi Timer(s)/Counter(s) Interrupt(s) TIMSK=0x00; // Inisialisasi USART // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei")
while (1) // Place your code here if(status == 1) //jika status sama dengan 1 if (timecount > 100) //jika timer dibawah 10 detik miss_call(); //untuk memanggil fungsi miss call ;