Professional Documents
Culture Documents
#include <TimerOne.h>
// This example uses the timer interrupt to blink an LED
// and also demonstrates how to share a variable between
// the interrupt and the main program.
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line
display
#include <HCSR04.h>
int jam,menit,detik,time_waktu;
int jam_set,menit_set,detik_set;
long nilai=0;
long first = 0;
long second = 0;
double total = 0;
int input;
boolean status_baca_sensor;
float mp=0.004702;
float cp=-0.98276;
float ml=0.006173;
float cl=0;
int sensor_p=A0, sensor_l=A1, nilai_p, nilai_l;
int PWM_Value = 0;
void nada(){
digitalWrite(buzz,HIGH);
delay(500);
digitalWrite(buzz,LOW);
delay(500);
digitalWrite(buzz,HIGH);
delay(500);
digitalWrite(buzz,LOW);
delay(500);
}
void lampu_on(){digitalWrite(lampu,HIGH);}
void lampu_off(){digitalWrite(lampu,LOW);}
void buka_p(){digitalWrite(m_buka_p,HIGH);}
void tutup_p(){digitalWrite(m_tutup_p,HIGH);}
void stop_p(){digitalWrite(m_buka_p,LOW);digitalWrite(m_tutup_p,LOW);}
void buka_l(){digitalWrite(m_buka_l,HIGH);}
void tutup_l(){digitalWrite(m_tutup_l,HIGH);}
void stop_l(){digitalWrite(m_buka_l,LOW);digitalWrite(m_tutup_l,LOW);}
void m_naik(){pwm_motor_naik=200;analogWrite(r1, pwm_motor_naik);}
void m_turun(){pwm_motor_turun=200;analogWrite(r2, pwm_motor_turun);}
void m_stop(){pwm_motor_naik=0;analogWrite(r1,
pwm_motor_naik);pwm_motor_turun=0;analogWrite(r2, pwm_motor_turun);}
void idel()
{
lcd.setCursor(0,0);
lcd.print("P: |L: |M= ");
lcd.setCursor(0,1);
lcd.print("H(Cm)= | ");
lcd.setCursor(0,2);
lcd.print("Time_Set= 00:00:00 ");
lcd.setCursor(0,3);
lcd.print("Time_Act= 00:00:00 ");
delay(1000);
}
void baca_sensor_posisi()
{
nilai_p=analogRead(sensor_p);
nilai_l=analogRead(sensor_l);
panjang=(mp*nilai_p)+cp;
lebar=(ml*nilai_l)+cl;
//lcd.setCursor(2,0);lcd.print(panjang);
//lcd.setCursor(12,0);lcd.print(lebar);
lcd.setCursor(2,0);lcd.print(nilai_p);
lcd.setCursor(12,0);lcd.print(nilai_l);
delay(10);
}
void baca_tinggi()
{
Serial.println(distanceSensor.measureDistanceCm());
tinggi=distanceSensor.measureDistanceCm();
tinggi=tinggi-cal_tinggi;
lcd.setCursor(6,1);
lcd.print(tinggi,1);
delay(150);
}
void set_jam()
{
char key = keypad.getKey();
lcd.setCursor(11, 2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(11,2);
while(key!='#')
{
char key = keypad.getKey();
switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(11,2);
case '#':
jam = first;
lcd.setCursor(11,2);
lcd.print(jam);
first = 0;
break;
case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(11,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(11,2);
break;
}
if(key=='#')
{
first = (total != 0 ? total : first);
jam = jam;
jam_set = jam;
lcd.setCursor(11,2);
lcd.print(jam);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}
}
}
void set_menit()
{
char key = keypad.getKey();
lcd.setCursor(14,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(14,2);
while(key!='#')
{
char key = keypad.getKey();
switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(14,2);
case '#':
menit = first;
lcd.setCursor(14,2);
lcd.print(menit);
first = 0;
break;
case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(14,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(14,2);
break;
}
if(key=='#')
{
first = (total != 0 ? total : first);
menit = menit;
menit_set = menit;
lcd.setCursor(14,2);
lcd.print(menit);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}
}
}
void set_detik()
{
char key = keypad.getKey();
lcd.setCursor(17,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(17,2);
while(key!='#')
{
char key = keypad.getKey();
switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(17,2);
case '#':
detik = first;
lcd.setCursor(17,2);
lcd.print(detik);
first = 0;
break;
case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(17,2);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(17,2);
break;
}
if(key=='#')
{
first = (total != 0 ? total : first);
detik = detik;
detik_set = detik;
lcd.setCursor(17,2);
lcd.print(detik);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}
}
}
void set_tinggi()
{
char key = keypad.getKey();
lcd.setCursor(15,1);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(15,1);
while(key!='#')
{
char key = keypad.getKey();
switch(key)
{
case '0' ... '9': // This keeps collecting the first value until a operator is pressed "#"
lcd.cursor();
lcd.blink();
lcd.setCursor(15,1);
case '#':
tinggi_set = first;
lcd.setCursor(15,1);
lcd.print(tinggi_set);
first = 0;
break;
case '*':
nilai = 0;
total = 0;
first = 0;
lcd.setCursor(15,1);
lcd.print(" ");
lcd.cursor();
lcd.blink();
lcd.setCursor(15,1);
break;
}
if(key=='#')
{
first = (total != 0 ? total : first);
tinggi_set=tinggi_set;
lcd.setCursor(15,1);
lcd.print(tinggi_set);
lcd.noCursor();
lcd.noBlink();
first = 0,// reset values back to zero for next use
delay(500);lcd.noCursor();lcd.noBlink();
break;
}
}
}
void koreksi_tinggi()
{
delay(100);
baca_tinggi();
tinggi_set_pembanding=tinggi-tinggi_set;
//lcd.setCursor(3,0);lcd.print(tinggi_set_pembanding);
delay(100);
if((tinggi_set_pembanding>=-3.4)&&(tinggi_set_pembanding<=3.4)){m_stop();count=0;
tanda=0;}
if((tinggi_set_pembanding<=-3.5)||(tinggi_set_pembanding>=3.5)){m_stop();count=25;
tanda=1;}
delay(500);
//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==1)
{
baca_tinggi();
count=count-1;
if(count<=0){tanda=0;m_stop();break;}
//lcd.setCursor(18,1);lcd.print(count);
if(tinggi>tinggi_set){m_turun();}//motor turun
if(tinggi<tinggi_set){m_naik();}//motor naik
if((tinggi==tinggi_set+0.2)&&(tinggi==tinggi_set-0.2)){tanda=0;m_stop();break;}
}
m_stop();count=0;tanda=0;tinggi_set_pembanding=0;
tinggi=tinggi_set;
lcd.setCursor(6,1);
lcd.print(tinggi,1);
nada();
delay(200);
}
void awal()
{
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Cek Motor...........");
delay(100);
baca_sensor_posisi();
tanda=0;
count=150;
//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p>0){tutup_p();}//tutup panjang
if(nilai_l>0){tutup_l();}//tutup lebar
if((nilai_p==0)&&(nilai_l==0)){tanda=1;stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;
tanda=0;
count=40;
//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
count=count-1;
delay(100);
lcd.setCursor(18,1);lcd.print(count);
tutup_p();//tutup panjang
tutup_l();//tutup lebar
if(count==0){tanda=1;stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;
nada();
delay(200);
}
//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<238){buka_p();}//buka panjang
if(nilai_l<45){buka_l();}//buka lebar
if(nilai_p>=238){stop_p();}
if(nilai_l>=45){stop_l();}
if((nilai_p>=238)&&(nilai_l>=45)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}
//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<238){buka_p();}//buka panjang
if(nilai_l<335){buka_l();}//buka lebar
if(nilai_p>=238){stop_p();}
if(nilai_l>=335){stop_l();}
if((nilai_p>=238)&&(nilai_l>=335)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}
//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<656){buka_p();}//buka panjang
if(nilai_l<229){buka_l();}//buka lebar
if(nilai_p>=656){stop_p();}
if(nilai_l>=229){stop_l();}
if((nilai_p>=656)&&(nilai_l>=229)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}
//while((nilai_sensor>507)||(nilai_sensor<505))
while(tanda==0)
{
baca_sensor_posisi();
count=count-1;
//lcd.setCursor(16,0);lcd.print(count);
if(nilai_p<685){buka_p();}//buka panjang
if(nilai_l<342){buka_l();}//buka lebar
if(nilai_p>=685){stop_p();}
if(nilai_l>=342){stop_l();}
if((nilai_p>=685)&&(nilai_l>=342)){tanda=1,stop_p();stop_l();break;}
}
stop_p();stop_l();count=0;tanda=0;
nada();
delay(200);
kolimator=1;
}
void setup(){
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pwm_motor_naik=0;
analogWrite(r1, pwm_motor_naik);
analogWrite(r1, 0);
pwm_motor_turun=0;
analogWrite(r2, pwm_motor_turun);
analogWrite(r2, 0);
Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
pinMode(nilai_A, INPUT);
pinMode(nilai_B, INPUT);
pinMode(nilai_C, INPUT);
pinMode(nilai_D, INPUT);
pinMode(buzz,OUTPUT);
pinMode(lampu,OUTPUT);
pinMode(m_buka_p,OUTPUT);
pinMode(m_tutup_p,OUTPUT);
pinMode(m_buka_l,OUTPUT);
pinMode(m_tutup_l,OUTPUT);
jam=1;menit=1;detik=1;//hold waktu
awal();
tampil_judul();
nada();
idel();
Timer1.initialize(1000000);// timer aktif to run every 1 seconds
//Timer1.initialize(1000000);// timer aktif to run every 1 seconds
Timer1.attachInterrupt(blinkLED);
}
void loop(){
char key = keypad.getKey();
button_nilai_A = digitalRead(nilai_A);
button_nilai_B = digitalRead(nilai_B);
button_nilai_C = digitalRead(nilai_C);
button_nilai_D = digitalRead(nilai_D);
//baca_tinggi();
//if
((button_nilai_A==1)&&(button_nilai_B==0)&&(button_nilai_C==0)&&(button_nilai_D=
=0)||(key=='1'))//posisi 1 remote angka 1
if
((button_nilai_C==1)&&(button_nilai_B==0)&&(button_nilai_A==0)&&(button_nilai_D=
=0)||(key=='1'))//posisi 1 remote angka 1
{
mode=1;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_1();
}
//if
((button_nilai_B==1)&&(button_nilai_C==0)&&(button_nilai_A==0)&&(button_nilai_D=
=0)||(key=='2'))//posisi 2 remote angka 2
if
((button_nilai_A==1)&&(button_nilai_B==0)&&(button_nilai_C==0)&&(button_nilai_D=
=0)||(key=='2'))//posisi 2 remote angka 2
{
mode=2;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_2();
}
if
((button_nilai_D==1)&&(button_nilai_A==1)&&(button_nilai_C==0)&&(button_nilai_B=
=1)||(key=='0'))//angka 0
{
mode=0;
lcd.setCursor(18,0);
lcd.print(mode);
//delay(100);
//koreksi_tinggi();
//delay(100);
//proses_mode_2();
}
if
((button_nilai_C==1)&&(button_nilai_B==0)&&(button_nilai_A==1)&&(button_nilai_D=
=0)||(key=='3'))//posisi 3 remote angka 3
{
mode=3;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_3();
}
//if
((button_nilai_D==0)&&(button_nilai_A==0)&&(button_nilai_C==0)&&(button_nilai_B=
=1)||(key=='4'))//anka 0
if
((button_nilai_D==1)&&(button_nilai_A==0)&&(button_nilai_C==0)&&(button_nilai_B=
=0)||(key=='4'))//posisi 4 remote angka 4
{
mode=4;
lcd.setCursor(18,0);
lcd.print(mode);
delay(100);
koreksi_tinggi();
delay(100);
proses_mode_4();
}
if (key=='0')//hidupkan lampu
{
lampu_on();
}
if (key=='9')//baca_sensor
{
status_baca_sensor=1;
}
if (key=='5')//buka panjang
{
buka_p();
delay(500);
stop_p();
}
if (key=='6')//tutup panjang
{
tutup_p();
delay(500);
stop_p();
}
if (key=='7')//buka lebar
{
buka_l();
delay(500);
stop_l();
}
if (key=='8')//tutup lebar
{
tutup_l();
delay(500);
stop_l();
}
if (key=='*')//stop sistem
{
stop_p();
stop_l();
lampu_off();
kolimator=0;status_baca_sensor=0;
idel();
delay(200);
lcd.setCursor(18, 0);lcd.print(" ");
jam=1;menit=1;detik=1;//hold waktu
unsigned long blinkCopy; // holds a copy of the blinkCount
noInterrupts();
blinkCopy = blinkCount;
interrupts();
nada();delay(100);
}
if (key=='A')//set waktu
{
delay(200);nada();
set_jam();
set_menit();
set_detik();
delay(100);
}else
if (key=='B')//set tinggi
{
delay(200);nada();
set_tinggi();
delay(100);
}else
if (key=='C')//motor naik
{
m_naik();
delay(500);
m_stop();
delay(500);
}
if (key=='D')//motor turun
{
m_turun();
delay(500);
m_stop();
delay(500);
}
if ((jam==0)&&(menit==0)&&(detik==0))//stop sistem
{
stop_p();
stop_l();
lampu_off();
kolimator=0;
//tanda_kembali=1;
jam=1;menit=1;detik=1;//hold waktu
unsigned long blinkCopy; // holds a copy of the blinkCount
noInterrupts();
blinkCopy = blinkCount;
interrupts();
//terapi=0;tanda_naik=0;tanda_turun=0;sudut_set=0;status_baca_sensor=0;
delay(200);
nada();
awal();
idel();
jam=jam_set;menit=menit_set;detik=detik_set;//hold waktu
tinggi_set=tinggi_set;
lcd.setCursor(17,2);lcd.print(detik);
lcd.setCursor(14,2);lcd.print(menit);
lcd.setCursor(11,2);lcd.print(jam);
lcd.setCursor(15,1);
lcd.print(tinggi_set);
}
if (kolimator==1)//baca timer
{
lcd.setCursor(17,3);lcd.print(detik);
lcd.setCursor(14,3);lcd.print(menit);
lcd.setCursor(11,3);lcd.print(jam);
if(detik<=9){lcd.setCursor(18,3);lcd.print(" ");}
if(menit<=9){lcd.setCursor(15,3);lcd.print(" ");}
if(jam<=9){lcd.setCursor(12,3);lcd.print(" ");}
}
void blinkLED(void)
{
if ((ledState == LOW)&&(kolimator==1))
{
//ledState = HIGH;blinkCount = blinkCount + 1;
{
if(detik!=0){detik--;}
else if (detik==0)
{
if(menit!=0){menit--;detik=59;}
else if (menit==0)
{
if(jam!=0){jam--;menit=59;detik=59;}
}
}
}
}else
{ledState = LOW;}
//digitalWrite(led, ledState);
}
void tampil_judul()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" SIMULATOR KOLIMATOR");
lcd.setCursor(0,1);
lcd.print(" RONTGEN OTOMATIS ");
lcd.setCursor(0,2);
lcd.print("MENGIKUTI KASET FILM");
lcd.setCursor(0,3);
lcd.print(" DENGAN ELEKTRIK ");
delay(1000);
lcd.setCursor(0,3);
lcd.print(" SECARA WIRELLES ");
delay(1000);
lcd.setCursor(0,0);
lcd.print(" SINGGIH ADIYANA ");
lcd.setCursor(0,1);
lcd.print(" Nim : 1804090 ");
lcd.setCursor(0,2);
lcd.print(" UNIV. WIDYA HUSADA ");
lcd.setCursor(0,3);
lcd.print("Teknik Elektromedik ");
delay(1000);
}
Lampiran 1 Datasheet Arduino Mega 2560
Lampiran 2 Datasheet LM78XX Series
Lampiran 3 Datasheet C945
Lampiran 5 Datasheet