7. Uji juga perintah untuk mengunci locker, menutup lampu dan
sebagainya.
Setelah pengujian dilakukan ,hasil menunjukkan bahwa sistem telah bekerja dgn baik walau kadang-kadang terjadi kesalahan akibat jaringan
komunikasi kurang baik atau kesalahan verifikasi kode perintah sehingga harus dilakukan sms ulang. Jika jaringan gsm kurang baik sms akan tertunda hingga
beberapa jam.
4.8 Pengujian Program Keseluruhan
include mega8535.h include delay.h
include stdio.h define ADC_VREF_TYPE 0x00
Read the AD conversion result unsigned int read_adcunsigned char adc_input
{ ADMUX=adc_input | ADC_VREF_TYPE 0xff;
Delay needed for the stabilization of the ADC input voltage delay_us10;
Start the AD conversion ADCSRA|=0x40;
Wait for the AD conversion to complete while ADCSRA 0x10==0;
Universitas Sumatera Utara
ADCSRA|=0x10; return ADCW;
}
Program di atas merupakan perintah untuk membaca input analog dan mengkonversikannya ke data digital.
unsigned int c,x,t,LDR1,LDR2,LDR3; unsigned char Data,A;
Merupakan perintah untuk mendeklarasikan variabel yang digunakan. void reply_message
{ printfAT+CMGS=085765862168;
delay_ms1000; Merupakan perintah mengirim kode AT Command yaitu AT + CMGS =
085765862168 ke modem GSM untuk proses mengirim sms.
printfc,0x0D; delay_ms2000;
if A== 1 {LDR1 = read_adc0;
Universitas Sumatera Utara
if LDR1 100{printfLampu Ruang tamu telah Aktif;} else {printfLampu Ruang tamu tidak Aktif;}
goto LD; }
Merupakan perintah untuk membaca sensor ldr dan di bandingkan dengan kode 1 untuk lampu 1. Jika LDR bernilai data lebih kecil dari 400 maka program
akan mengirim pesan lampu ruang tamu telah aktif, sedangkan jika tidak maka pesan yang dikirim adalah lampu ruang tamu tidak aktif.
if A== 2 {LDR2 = read_adc1;
if LDR2 100{printfLampu Kamar telah Aktif;} else {printfLampu Kamar tidak Aktif;}
goto LD; }
Merupakan perintah untuk membaca sensor ldr dan di bandingkan dengan kode 2 untuk lampu 2. Jika LDR bernilai data lebih kecil dari 400 maka program
akan mengirim pesan lampu kamar telah aktif, jika tidak maka pesan yang dikirim adalah lampu ruang tamu tidak aktif.
Universitas Sumatera Utara
if A== 4 {LDR1 = read_adc0;
if LDR1 100{printfLampu Ruang tamu belum padam;} else {printfLampu Ruang tamu telah dipadamkan;}
goto LD; }
if A== 5 {LDR2 = read_adc1;
if LDR2 100{printfLampu Kamar belum padam;} else {printfLampu Kamar telah dipadamkan;}
goto LD; }
if A== O {
if PIND.7 == 1{printfLocker telah dibuka;} else {printfLocker belum terbuka;}
goto LD; }
Merupakan perintah untuk mendeteksi apakah pintu telah dibuka atau tidak. Jika pada PIND.7 = 1 berarti locker telah dibuka sedangkan jika berlogika 0
locker belum terbuka.
Universitas Sumatera Utara
if A== C {
if PIND.7 == 1{printfLocker belum terkunci;} else {printfLocker telah terkunci;}
goto LD; Perintah mendeteksi apakah pintu telah terkunci atau tidak yaitu jika
PIND.7 =0 artinya locker tidak terkuncisedangkan jika PIND.7 berlogika 1 berarti locker telah terkunci.
printfMaaf, kode perintah anda salah. Silahkan ulangi; LD:
delay_ms1000; printfc,0x1A;
delay_ms1000; }
void DeleteMessagevoid {
printfAT+CMGD=1,3; putchar0x0D;
Universitas Sumatera Utara
whilegetchar=0x0A{} whilegetchar=0x0A{};
printfATD0811653010;; delay_ms1000;
printfc,0x0D; delay_ms2000;
} Merupakan perintah untuk menghapus sms pada kotak masuk
void ReadMessagevoid {
printfAT+CMGR=1; delay_ms1000;
printfc,0x0D; whilegetchar=0x0A{}
whilegetchar=0x0A{} forc=0;c10;c++{Data = getchar; if Data == {goto keluar;}}
keluar: Data = getchar;
Universitas Sumatera Utara
forx=0;x3;x++ {PORTC.3 = 1; delay_ms500;PORTC.3 = 0;delay_ms500;} printfAT+CMGD=1,3;
putchar0x0D; whilegetchar=0x0A{}
whilegetchar=0x0A{}; }
Merupakan perintah untuk membaca sms masuk, setelah dibaca, sms tersebut dihapus, untuk mengalokasikan sms baru.
void Step_Closevoid{ x = 0;
while x20 { x++;
PORTB.3 = 1 ;delay_mst; PORTB.2 = 1 ;delay_mst;PORTB.3 = 0 ;
PORTB.2 = 1 ;delay_mst; PORTB.1 = 1 ;delay_mst;PORTB.2 = 0 ;
PORTB.1 = 1 ;delay_mst; PORTB.0 = 1 ;delay_mst;PORTB.1 = 0 ;
PORTB.0 = 1 ;delay_mst; PORTB.3 = 1 ;delay_mst;PORTB.0 = 0 ;
}
Universitas Sumatera Utara
Merupakan perintah untuk mrnjalankan motor stepper untuk mengunci locker.
} void Step_Openvoid{
x = 0; while x20 {
x++; PORTB.0 = 1 ; delay_mst;
PORTB.1 = 1 ; delay_mst;PORTB.0 = 0 ; PORTB.1 = 1 ; delay_mst;
PORTB.2 = 1 ; delay_mst;PORTB.1 = 0 ; PORTB.2 = 1 ; delay_mst;
PORTB.3 = 1 ; delay_mst;PORTB.2 = 0 ; PORTB.3 = 1 ; delay_mst;
PORTB.0 = 1 ; delay_mst;PORTB.3 = 0 ;PORTB.0 = 0 ; }
Perintah untuk membuka locker dengan menjalankan motor stepper. }
void mainvoid {
InputOutput Ports initialization Port A initialization
PORTA=0x0F; Perintah mengeluarkan output pada Port A dengan data 0F
Universitas Sumatera Utara
DDRA=0x00; Perintah untuk menginisialisasi Port A, dalam hal ini 00 adalah sebagai input.
Port B initialization PORTB=0x00;
DDRB=0x0F; Port C initialization
PORTC=0x00; DDRC=0xFF;
Port D initialization PORTD=0xF0;
DDRD=0x00; USART initialization
UCSRA=0x02; UCSRB=0x18;
UCSRC=0x86; UBRRH=0x00;
UBRRL=0x0C; Perintah di atas merupakan perintah untuk menginisialisasi port serial yaitu
menentukan baud rate 19200 Bps 8 bit data dan 1 bit stop. ADC initialization
ADMUX=ADC_VREF_TYPE 0xff; ADCSRA=0x84;
Universitas Sumatera Utara
SFIOR=0xEF; Perintah di atas untuk menginisialisai ADC yaitu tipe tegangan referensi
adalah 5 v dan adc yang digunakan adalah 10 bit
t = 2; A = 1;
Perintah mengisi nilai awal dari t dan A reply_message;
PORTC.3 = 1; delay_ms1000;
Perintah untuk menunda waktu selama 1 detik . PORTC.3 = 0;
while 1 {
ifData==1{PORTC.0=1;A=1;delay_ms2000;reply_message;A=0;Data= 0;}
Perintah verifikasi data pada variabel data apakah sama dengan 1, jika sama dengan 1 maka 1 lampu akan di hidupkan kemudian menunda waktu selama 2
detik dan dilanjutkan dengan mengirim sms sebagai feedback bahwa lampu tersebut telah dihidupkan atau belum.
ifData==2{PORTC.1=1;A=2;delay_ms2000;reply_message;A=0;Data = 0;}
if Data == 4{PORTC.0 = 0;A = 4; delay_ms2000;reply_message;A=0;Data = 0;}
Universitas Sumatera Utara
if Data == 5{PORTC.1 = 0;A = 5; delay_ms2000;reply_message;A=0;Data = 0;}
if Data == O{Step_Open;A = O; delay_ms2000;reply_message;A=0;Data = 0;}
if Data == C{Step_Close;A = C; delay_ms2000;reply_message;A=0;Data = 0;}
if PIND.7 == 0{PORTC=0x07;delay_ms1000;DeleteMessage;PORTC=0x00;}
if PIND.6 == 0{PORTC.3 = 1;delay_ms1000;ReadMessage;} Merupakan perintah untuk menghapus sms secara manual dengan
mendeteksi tombol. delay_ms1000;
PORTC.3 = 0; Perintah untuk menghidupkan lampu indikator }
}
Universitas Sumatera Utara
BAB V KESIMPULAN DAN SARAN
5.1 Kesimpulan