You are on page 1of 8

Lampiran Program Ropot Pemadam Api

#include <stdio.h>
#include <reg51.h>
#include <absacc.h>

#define Pcont 0x2003


#define PA 0x2000
#define PB 0x2001
#define PC 0x2002

int jar, bal, suka, suki, sute, suka1;


sbit ka = P1^0;
sbit te = P1^1;
sbit ki = P1^2;
sbit ired = P1^3;
sbit ftran = P1^4;

void INITPPI(){
XBYTE [Pcont] = 0x90; // PA sbg input, PB dan PC sbg Output
}

void DELAY (int DL) {


while (DL>0)
DL--;
}

void EXT0 () interrupt 0 using 2 {


EX0 = 0; //mematikan Interrupt INT0
jar = bal;
bal = 3500;
}

void maju () {
int I;
for(I=1;I<=13;I++){ // memutar motor stepper sebesar 93,6 drajat
XBYTE [PB] =0x18;
DELAY (2200);
XBYTE [PB] =0x24;
DELAY (2200);
XBYTE [PB] =0x42;
DELAY (2200);
XBYTE [PB] =0x81;
DELAY (2200);
}
}
void mundur() {
int I;
for(I=1;I<=13;I++){ // memutar motor stepper sebesar 93,6 drajat
XBYTE [PB] =0x81;
DELAY (2200);
XBYTE [PB] =0x42;
DELAY (2200);
XBYTE [PB] =0x24;
DELAY (2200);
XBYTE [PB] =0x18;
DELAY (2200);
}
}

void majubb () {
int I;
for(I=1;I<=336;I++){ // maju sejauh 1 meter
XBYTE [PB] =0x18;
DELAY (2200);
XBYTE [PB] =0x24;
DELAY (2200);
XBYTE [PB] =0x42;
DELAY (2200);
XBYTE [PB] =0x81;
DELAY (2200);
}
}

void kanan() {
int I;
for(I=1;I<=3;I++){ // memutar motor stepper sebesar 93,6 drajat
XBYTE [PB] =0x11;
DELAY (2200);
XBYTE [PB] =0x22;
DELAY (2200);
XBYTE [PB] =0x44;
DELAY (2200);
XBYTE [PB] =0x88;
DELAY (2200);
}
}

void kiri () {
int I;
for(I=1;I<=3;I++){ // memutar motor stepper sebesar 93,6 drajat
XBYTE [PB] =0x88;
DELAY (2200);
XBYTE [PB] =0x44;
DELAY (2200);
XBYTE [PB] =0x22;
DELAY (2200);
XBYTE [PB] =0x11;
DELAY (2200);
}
}

void putarka90() { // memutar robot sebesar 90 drajat


int I;
for(I=1;I<=61;I++){ // memutar motor stepper 61 siklus = 439,3 drajat
XBYTE [PB] =0x11;
DELAY (2200);
XBYTE [PB] =0x22;
DELAY (2200);
XBYTE [PB] =0x44;
DELAY (2200);
XBYTE [PB] =0x88;
DELAY (2200);
}
}

void putarki90() { // memutar robot sebesar 90 drajat


int I;
for(I=1;I<=61;I++){ // memutar motor stepper 61 siklus = 439,3 drajat
XBYTE [PB] =0x88;
DELAY (2200);
XBYTE [PB] =0x44;
DELAY (2200);
XBYTE [PB] =0x22;
DELAY (2200);
XBYTE [PB] =0x11;
DELAY (2200);
}
}

void putar180() { // memutar robot sebesar 180 drajat


int I;
for(I=1;I<=122;I++){ // memutar motor stepper 122 siklus = 878,4 drajat
XBYTE [PB] =0x11;
DELAY (2200);
XBYTE [PB] =0x22;
DELAY (2200);
XBYTE [PB] =0x44;
DELAY (2200);
XBYTE [PB] =0x88;
DELAY (2200);
}
}

void diam () {
for (;;){
}
}

void kamar (){


int h,I;
for (I=1;I<=40;I++){ // ulang sebanyak setengah put utk cari posisi api
kanan ();// belok kanan
DELAY (2000); // berhenti sejenak guna mendeteksi ada/tidaknya api
if (ftran == 0){ // jika fototransisitor mendeteksi adanya api
for (h = 1; h <= 5;h++){ // maju 5 kali
maju();
}
while (ftran == 0){
XBYTE [PC] = 0xFF;
}
XBYTE [PC] = 0x00;
for (h = 1; h <= 5;h++){ // mundur 5 x utk keposisi semula
mundur();
}
}
} // sebelum berputar 1 putaran masih mendeteksi adanya titik api
majubb();
}

void pulang (){


for (;;){
EX0 = 0; // menonaktifkan interrupt INT0
jar = 3500;
ki = 0; // mengaktifkan sensor ultrasonik kiri
DELAY (36); // membentuk minimal 12 periode sinyal
ki = 1; // menonaktifakan sensor ultrasonik kiri
EX0 = 1; // mengaktifkan interrupt INT0
bal = 1;
while (bal < 3500){ // pendetekasian jarak
bal ++;
}
EX0 = 0; // menonaktifkan interrupt INT0
suki = jar; // jarak didapat dari nilai jar, bila tjd interrup jar = bal
jar = 3500;
ka = 0; // mengaktifakan sensor ultrasonik kanan
DELAY (36); // membentuk minimal 12 periode sinyal
ka = 1; // menonaktifakan sensor ultrasonik kanan
EX0 = 1; // mengaktifkan interrupt INT0
bal = 1;
while (bal < 3500){ // pendetekasian jarak
bal ++;
}
EX0 = 0; // menonaktifkan interrupt INT0
suka = jar; // jarak didapat dari nilai jar, bila tjd interrup jar = bal
jar = 3500;
te = 0; // mengaktifakan sensor ultrasonik tengah
DELAY (36); // membentuk minimal 12 periode sinyal
te = 1; // menonaktifakan sensor ultrasonik tengah
EX0 = 1; // mengaktifkan interrupt INT0
bal = 1;
while (bal < 3500){ // pendetekasian jarak
bal ++;
}
EX0 = 0; // mengaktifkan interrupt INT0
sute = jar; // jarak didapat dari nilai jar, bila tjd interrup jar = bal
jar = 3500;

if (ired == 1){
if ( suka > suki ){ // untuk mendetekasi kamar sebelah kanan robot
putarka90();
majubb(); // maju 1 meter
kamar ();
putarka90();
}
else if ( suki > suka ){// utk mendetekasi kamar sebelah kiri robot
putarki90();
majubb(); // maju 1 meter
kamar ();
putarki90();
}
else if (sute <= 200){ // jika mendeteksi ujung ruang/gedung
putar180();
diam ();
}

else {
maju();
}
}

else if (ired == 0){


if (suka == suki && sute >= suki){
maju ();
}

else if (suka <= suki && sute >= suki){


kiri ();
}

else if (suki <= suka && sute >= suka){


kanan ();
}

else if (suka <= suki && sute <= suka ){


putarki90 ();
}

else if (suka >= suki && sute <= suki && sute <= 150 ){
putarka90 ();
}

else {
maju();
}
}
}
}

void main (){


INITPPI(); // pembacaan PPI
XBYTE [PC] = 0x00;
EX0 = 1; // mengaktifkan interrupt INT0
IE0 = 1; //Mengaktifkan slruh interrupt (kontrol interrupt)
EA = 1;

for (;;){ // pengulangan program utama


EX0 = 0; // menonaktifkan interrupt INT0
jar = 3500;
ki = 0; // mengaktifkan sensor ultrasonik kiri
DELAY (36); // membentuk minimal 12 periode sinyal
ki = 1; // menonaktifakan sensor ultrasonik kiri
EX0 = 1; // mengaktifkan interrupt INT0
bal = 1;
while (bal < 3500){ // pendetekasian jarak
bal ++;
}
EX0 = 0; // menonaktifkan interrupt INT0
suki = jar; // jarak didapat dari nilai jar, bila tjd interrup jar = bal
jar = 3500;
ka = 0; // mengaktifakan sensor ultrasonik kanan
DELAY (36); // membentuk minimal 12 periode sinyal
ka = 1; // menonaktifakan sensor ultrasonik kanan
EX0 = 1; // mengaktifkan interrupt INT0
bal = 1;
while (bal < 3500){ // pendetekasian jarak
bal ++;
}
EX0 = 0; // menonaktifkan interrupt INT0
suka = jar; // jarak didapat dari nilai jar, bila tjd interrup jar = bal
jar = 3500;
te = 0; // mengaktifakan sensor ultrasonik tengah
DELAY (36); // membentuk minimal 12 periode sinyal
te = 1; // menonaktifakan sensor ultrasonik tengah
EX0 = 1; // mengaktifkan interrupt INT0
bal = 1;
while (bal < 3500){ // pendetekasian jarak
bal ++;
}
EX0 = 0; // mengaktifkan interrupt INT0
sute = jar; // jarak didapat dari nilai jar, bila tjd interrup jar = bal
jar = 3500;

te = 0; // mengaktifakan sensor ultrasonik tengah


DELAY (36); // membentuk minimal 12 periode sinyal
te = 1; // menonaktifakan sensor ultrasonik tengah
EX0 = 1; // mengaktifkan interrupt INT0
bal = 1;
while (bal < 3500){ // pendetekasian jarak
bal ++;
}
EX0 = 0; // mengaktifkan interrupt INT0
suka1 = jar; // jarak didapat dari nilai jar, bila tjd interrup jar = bal
jar = 3500;

if (ired == 1){
if ( suka > suki ){ // untuk mendetekasi kamar sebelah kanan robot
putarka90();
majubb(); // maju 1 meter
kamar ();
putarka90();
}

else if ( suki > suka ){ // utk detekasi kamar sebelah kiri robot
putarki90();
majubb(); // maju 1 meter
kamar ();
putarki90();
}

else if (sute <= 200){ // jika mendeteksi ujung ruang/gedung


putar180();
pulang();
}

else {
maju();
}
}

else if (ired == 0){


if (suka == suki && sute >= suki){
maju ();
}

else if (suka <= suki && sute >= suki){


kiri ();
}

else if (suki <= suka && sute >= suka){


kanan ();
}

else if (suka <= suki && sute <= suka ){


putarki90 ();
}

else if (suka >= suki && sute <= suki && sute <= 150 ){
putarka90 ();
}

else {
maju();
}
}
}
}

You might also like