Anda di halaman 1dari 42

BAB IV

PENGAPLIKASIAN TIMER DAN INTERUPSI


4.1. Tujuan
1 Praktikan dapat mengetahui jenis-jenis interupsi pada Arduino.
2 Praktikan dapat memahami dan mengimplementasikan timer pada board
Arduino Mega 2560.
3 Praktikan dapat memahami dan mengimplementasikan interupsi eksternal pada
board Arduino Mega 2560.
4 Praktikan dapat memahami jenis-jenis pembangkitan interupsi eksternal pada
Arduino.
5 Praktikan dapat membuat suatu rangkaian pengaplikasian interupsi dan
pewaktuan.
4.2. Alat dan Bahan
4.2.1. Laptop/PC

Gambar 4. 1 Laptop
Laptop adalah komputer bergerak (bisa dipindahkan dengan mudah) yang
berukuran relatif kecil dan ringan, beratnya berkisar dari 1-6 kg, tergantung ukuran,
bahan, dari spesifikasi laptop tersebut, laptop dapat digunakan dalam lingkungan yang
berbeda dari komputer. Mereka termasuk layar, keyboard, dan trackpad atau trackball,
yang berfungsi sebagai mouse. Laptop berfungsi sebagai media yang menjalankan
circuit simulator TinkerCad.
4.2.2. Proteus 8 Professional

Gambar 4. 2 Proteus
Software Proteus adalah sebuah software yang digunakan untuk mendesain PCB
yang juga dilengkapi dengan simulasi PSpice pada level skematik sebelum rangkaian
skematik di-upgrade ke PCB untuk memastikan PCB dapat berfungsi dengan
semestinya. Pada praktikum ini, proteus berfungsi sebagai simulator untuk mendesain
PCB rangkaian encoder rotary dalam praktikum ini.
4.2.3. Arduino IDE

Gambar 4. 3 Arduino IDE


IDE itu merupakan kependekan dari Integrated Developtment
Enviroenment, atau secara bahasa mudahnya merupakan lingkungan terintegrasi yang
digunakan untuk melakukan pengembangan. Disebut sebagai lingkungan karena melalui
software inilah Arduino dilakukan pemrograman untuk melakukan fungsi-fungsi yang
dibenamkan melalui sintaks pemrograman. Arduino menggunakan bahasa pemrograman
sendiri yang menyerupai bahasa C. Bahasa pemrograman Arduino (Sketch) sudah
dilakukan perubahan untuk memudahkan pemula dalam melakukan pemrograman dari
bahasa aslinya. Sebelum dijual ke pasaran, IC mikrokontroler Arduino telah ditanamkan
suatu program bernama Bootlader yang berfungsi sebagai penengah
antara compiler Arduino dengan mikrokontroler.
4.2.4. Board Arduino Mega 2560

Gambar 4. 4 Board Arduino


Arduino adalah Board berbasis mikrokontroler atau papan rangkaian elektronik
open source yang di dalamnya terdapat komponen utama yaitu sebuah chip
mikrokontroler dengan jenis AVR dari perusahaan Atmel. Mikrokontroler itu sendiri
adalah chip atau IC (integrated circuit) yang bisa diprogram menggunakan komputer.
Tujuan menanamkan program pada mikrokontroler adalah agar rangkaian elektronik
dapat membaca input, memproses input tersebut dan kemudian menghasilkan output
sesuai yang diinginkan. Jadi mikrokontroler bertugas sebagai otak yang mengendalikan
proses input, dan output sebuah rangkaian elektronik

4.2.5. Tinkercad 

Gambar 4. 5 TinkerCad
TinkerCad merupakan sebuah platform berbasis web penyedia sarana untuk
belajar secara online terkait desain 3D, rangkaian elektronika, dan codeblock. Pada
percobaan praktikum, TinkerCad berfungsi sebagai circuit cimulator yang digunakan
untuk menyusun rangkaian circuit dalam percobaan praktikum.

4.2.6. Breadboard

Gambar 4. 6 Breadboard
Breadboard adalah sebuah papan yang digunakan untuk membuat rangkaian
elektronik sementara dengan tujuan uji coba atau prototipe tanpa harus menyolder. Pada
percobaan praktikum, Breadboard berfungsi sebagai tempat merangkai circuit.
4.2.7. LED

Gambar 4. 7 Red LED


LED merupakan sebuah komponen elektromagnetik yang dapat memancarkan
cahaya monokromatik melalui tegangan maju. Dalam percobaan praktikum, LED
berfungsi sebagai indikasi nilai hasil output rangkaian. Bila hasil output bernilai 1 maka
LED akan menyala dan bila hasil output bernilai 0 maka LED akan mati.

4.2.8. Push Button

Gambar 4. 8 Push Button


Push Button adalah saklar yang berupa tombol dan berfungsi sebagai pemutus
atau penyambung arus listrik dari sumber arus ke beban listrik. Suatu sistem saklar
tekan push button terdiri dari saklar tekan start, stop reset dan saklar tekan untuk
emergency.

4.2.9. Resistor

Gambar 4. 9 Resistor
Resistor adalah komponen Elektronika Pasif yang memiliki nilai resistansi atau
hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam
suatu rangkaian Elektronika.
4.2.10. Virtual Terminal

Gambar 4. 10 Virtual Terminal


Resistor adalah komponen Elektronika Pasif yang memiliki nilai resistansi atau
hambatan tertentu yang berfungsi untuk membatasi dan mengatur arus listrik dalam
suatu rangkaian Elektronika.

4.2.11. Kabel Jumper

Gambar 4. 11 Kabel Jumper


Kabel Jumper berfungsi untuk menghubungkan arus listrik dalam rangkaian
percobaan praktikum.
4.3. Dasar Teori
4.3.1. Arduino ATMega 2560

Gambar 4. 12 Arduino ATMega 2560


Arduino adalah Board berbasis mikrokontroler atau papan rangkaian elektronik
open source yang di dalamnya terdapat komponen utama yaitu sebuah chip
mikrokontroler dengan jenis AVR dari perusahaan Atmel. Mikrokontroler itu sendiri
adalah chip atau IC (integrated circuit) yang bisa diprogram menggunakan computer.
Tujuan menanamkan program pada mikrokontroler adalah agar rangkaian elektronik
dapat membaca input, memproses input tersebut dan kemudian menghasilkan output
sesuai yang diinginkan. Jadi mikrokontroler bertugas sebagai otak yang mengendalikan
proses input, dan output sebuah rangkaian elektronik.
Jenis Arduino Mega type 2560, Arduino Mega 2560 adalah papan
pengembangan mikrokontroler yang berbasis Arduino dengan menggunakan chip
ATmega2560. Board ini memiliki pin I/O yang cukup banyak, sejumlah 54 buah digital
I/O pin (15 pin diantaranya adalah PWM), 16 pin analog input, 4 pin UART (serial port
hardware). Arduino Mega 2560 dilengkapi dengan sebuah oscillator 16 Mhz, sebuah
port USB, power jack DC, ICSP header, dan tombol reset. Board ini sudah sangat
lengkap, sudah memiliki segala sesuatu yang dibutuhkan untuk sebuah mikrokontroler.
(Sumber: http://eprints.polsri.ac.id/4615/3/FILE%20III.pdf)

4.3.2. Proteus 8 Professional

Gambar 4. 13 Proteus
Software Proteus 8 Professional merupakan salah satu software elektronik yang
digunakan untuk membantu para designer dalam merancang dan mensimulasikan suatu
rangkaian elektronik. Software ini memiliki dua fungsi sekaligus dalam satu paket,
yaitu  sebagai software untuk menggambar skematis dan digunakan sebagai merancang
gambar Printed Circuit Board (PCB).
Software Proteus 8 Profesional mempunyai banyak library dengan beberapa
komponen komponen-komponen pasif, Analog, Trasistor, SCR, FET, jenis
button/tombol, jenis saklar/relay, IC digital, IC penguat, IC programmable
(microcontroller) dan IC memory. Selain didukung dengan kelengkapan komponen,
juga didukung dengan kelengkapan alat ukur seperti Voltmeter, Ampere meter,
Oscilloscope, Signal Analyzers, serta pembangkit Frekuensi.
(Sumber: https://calesmart.com/artikel/Pengenalan-simulasi-elektronika-dengan-Software-Proteus-8-
Profesional_132.html)

4.3.3. Tinkercad
TinkerCad merupakan sebuah media berbasis web yang menyediakan sarana
untuk belajar Desain 3D, rangkaian elektronika, dan codeblock secara online.
TinkerCad adalah salah satu produk Autodesk yang sudah banyak memperkenalkan
software-software komputer untuk desain dan animasi. TinkerCad pertama didirikan
pada tahun 2011 dan masih dikembangkan sampai saat ini hingga menjadi salah satu
media yang direkomendasikan untuk digunakan sebagai media pembelajaran.

Gambar 4. 14 Logo TinkerCad


Dalam TinkerCad juga disediakan fitur Class dimana kita dapat membuat kelas
untuk melakukan pembelajaran antara guru dan siswa dalam pembelajaran di bidang
desain 3D, elektronik, dan codeblock. Serta terdapat fitur Educator untuk guru dan
Student untuk siswa.

Gambar 4. 15 Dashboard TinkerCad


(Sumber: https://www.teknodika.com/2020/04/mengenal-tinkercad-platform-belajar.html)

4.3.4. Interupsi
Interupsi sering juga disebut interrupt adalah suatu permintaan khusus pada
microprocessor untuk melakukan sesuatu. Interupsi pada dasarnya kalau dalam dunia
computer sering kita kenal dengan penghentian sementara proses program yang sedang
berjalan. Apabila terjadi yang namanya interupsi maka computer kita akan
menghentikan dahulu apa yang sedang dikerjakannya, terus setelah itu melakukan apa
yang di minta oleh yang menginterupsi, dan apabila sudah selesai maka proses program
akan kembali ke program sebelum terjadinya interupsi yang tadi.
Fungsi interupsi satu-satunya adalah sebuah mekanisme penghentian atau
pengalihan sementara pengolahan instruksi dalam CPU kepada routine interupsi yang
mana tujuan secara umumnya yaitu untuk manajemen pengeksekusian routine instruksi
agar efektif.
(sumber:https://www.kompasiana.com/iqbaldalimunthe/566999fc729773540bb70241/interupsi-
pada-komputer)

4.3.5. Timer
Timer interupsi memungkinkan untuk melakukan tugas pada interval waktu
yang sangat spesifik terlepas dari apa pun yang terjadi dalam kode. Dalam instruksi ini
akan menjelaskan cara mengatur dan menjalankan interupsi di Bersihkan Timer pada
Mode Bandingkan Pertandingan atau CTC.
Ketika menulis sketsa Arduino, Arduino melakukan semua perintah yang di-
enkapsulasi dalam fungsi loop () {} sesuai urutannya, namun, sulit untuk menentukan
waktu peristiwa dalam loop (). Beberapa perintah membutuhkan waktu lebih lama
daripada yang lain untuk dieksekusi, beberapa tergantung pada pernyataan kondisional
dan beberapa fungsi perpustakaan Arduino (seperti digitalWrite atau analogRead)
terdiri dari banyak perintah. Pengatur waktu Arduino memungkinkan untuk sejenak
menghentikan urutan normal dari peristiwa yang terjadi dalam fungsi loop () pada
interval waktu yang tepat,
(sumber:https://id.howtodogood.com/81656-Arduino-Timer-Interrupts-24)
4.4. Langkah Kerja
4.4.1. Percobaan 1 dan 2
1. Buka Proteus 8 Professional dengan cara run as administrator.

Gambar 4. 16 Buka Proteus dengan Run As Administrator

2. Buat new project lalu diberi nama mod3_kel12.

Gambar 4. 17 New Project pada Proteus


3. Pilih menu pick devices lalu cari komponen Board Arduino Mega 2560.
Gambar 4. 18 Pick Devices board Arduino Mega 2560 pada Proteus

4. Pilih menu pick devices lalu cari komponen LED Red.

Gambar 4. 19 Pick Devices LED Red pada Proteus

5. Pilih menu instruments lalu cari komponen Virtual Terminal.

Gambar 4. 20 Instruments Virtual Terminal pada Proteus


6. Pilih menu terminals lalu cari komponen Ground.
Gambar 4. 21 Terminal Ground pada Proteus

7. Pilih menu terminals lalu cari komponen Power.

Gambar 4. 22 Terminal Power pada Proteus

8. Letakkan semua komponen pada workspace.


Gambar 4. 23 Komponen – komponen percobaan

9. Rangkai LCD, virtual terminal, ground dan power dengan board Arduino Mega
2560 seperti berikut:
 Hubungkan semua kaki katoda LED ke GND.
 Hubungkan kaki anoda LED 1 ke pin 5 Arduino.
 Hubungkan kaki anoda LED 2 ke pin 6 Arduino.
 Hubungkan kaki anoda LED 3 ke pin 7 Arduino.
 Hubungkan kaki anoda LED 4 ke pin 8 Arduino.
 Hubungkan kaki anoda LED 5 ke pin 9Arduino.
 Hubungkan GND Arduino ke Ground dan VCC Arduino ke Power.
 Hubungkan pin RXD virtual terminal ke pin 1, dan pin TXD ke pin 0.

10. Setelah dirangkai komponen akan terlihat seperti ini.


Gambar 4. 24 Rangkaian Percobaan

11. Buka software Arduino IDE.

Gambar 4. 25 Buka Arduino IDE

12. Buat new file pada software Arduino IDE.


Gambar 4. 26 Buat new file

13. Masukan kode program percobaan 1 ke dalam software Arduino IDE.


Tabel 4. 1 Source code percobaan 1

#include <TimerOne.h>

int ms;
int led1 = 5;
int led2 = 6;
int led3 = 7;
int led4 = 8;
int led5 = 9;
int LED[5];

void setup() {
  // put your setup code here, to run once:
  //pinMode(10, OUTPUT);
  Timer1.initialize(500000);
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  Timer1.attachInterrupt(ledInterrupt);
}

void loop(){
 digitalWrite(led1,HIGH);
  delay(1000);
  digitalWrite(led1,LOW);
  delay(1000);
}
void ledInterrupt() {
  ms++;

  if(ms%2==0){
    LED[1]=!LED[1];
    digitalWrite(led2,LED[1]);
  }
  if(ms%2==0){
    LED[2]=!LED[2];
    digitalWrite(led3,LED[2]);
  }
  if(ms%2==0){
    LED[3]=!LED[3];
    digitalWrite(led4,LED[3]);
  }
  if(ms%2==0){
    LED[4]=!LED[4];
    digitalWrite(led5,LED[4]);
  }
}

14. Masukan kode program percobaan 2 ke dalam software Arduino IDE.


Tabel 4. 2 Sorce code percobaan 2

unsigned long mil0,mil1,mil2,mil3,mil4,i;


int state9=0;
int state8=0;
int state7=0;
int state6=0;
int state5=0;
unsigned long millisnow;

void modePin(){
  for(i=5;i<=9; i++){
    pinMode(i,OUTPUT);
  }
}

void setup() {
  // put your setup code here, to run once:
  modePin();
}

void loop() {
  // put your main code here, to run repeatedly:
  millisnow=millis();
  if(millisnow-mil0>=500){
    if (state9==0) {
      digitalWrite(9, HIGH);
      mil0=millisnow;
 state9=1;
    }
    else if(state9==1){
      digitalWrite(9, LOW);
      mil0=millisnow;
      state9=0;
    }
  }

  if(millisnow-mil1>=1000){
    if (state8==0) {
      digitalWrite(8, HIGH);
      mil1=millisnow;
      state8=1;
    }
    else if(state8==1){
      digitalWrite(8, LOW);
      mil1=millisnow;
      state8=0;
    }
  }

  if(millisnow-mil2>=2000){
    if (state7==0) {
      digitalWrite(7, HIGH);
      mil2=millisnow;
      state7=1;
    
    else if(state7==1){
      digitalWrite(7, LOW);
      mil2=millisnow;
      state7=0;
    }
  }
  
  if(millisnow-mil3>=3000){
    if (state6==0) {
      digitalWrite(6, HIGH);
      mil3=millisnow;
      state6=1;
    }
    else if(state6==1){
      digitalWrite(6, LOW);
      mil3=millisnow;
      state6=0;
    }
  }

  if(millisnow-mil4>=4000){
    if (state5==0) {
      digitalWrite(5, HIGH);
      mil4=millisnow;
      state5=1;
    }
    else if(state5==1){
      digitalWrite(5, LOW);}}
15. Verify kode program percobaan 1 dan percobaan 2 dengan menekan tombol tanda
checklist.

Gambar 4. 27 Verify kode program

16. Salin kode hex percobaan 1 dan percobaan 2 pada console.

Gambar 4. 28 Salin kode hex program

17. Buka Proteus kembali dan double click kiri pada board Arduino Mega 2560 dan
tempel kode hex percobaan 1 pada program file.

Gambar 4. 29 Memasukkan kode hex pada board Arduino Mega 2560

18. Buka Proteus kembali dan double click kiri pada board Arduino Mega 2560 dan
tempel kode hex percobaan 2 pada program file.
    else if(state7==1){
      digitalWrite(7, LOW);
      mil2=millisnow;
      state7=0;
    }
  }
Gambar 4. 30 Memasukkan kode hex pada board Arduino Mega 2560

19. Tekan tombol mulai pada Proteus

Gambar 4. 31 Memulai simulasi


4.4.2. Percobaan 3
1. Buka www.tinkercad.com lalu login.

Gambar 4. 32 Login akun TinkerCad

2. Pilih circuit dan create new circuit.


Gambar 4. 33 Membuat project baru

3. Rangkai perangkat yang dibutuhkan.


Gambar 4.26 Rangkaian percobaan

4. Masukkan kode program berikut pada TinkerCad.


Tabel 4. 3 Source code percobaan 3

//Kelompok 12
//nama nim

int count_pulse = 0;

void setup()
{
Serial.begin(9600);
for (int i=6; i<8; i++){
pinMode(i, OUTPUT);
}
attachInterrupt(digitalPinToInterrupt(2), subroutine, RISING);
}

void loop()
{
ledoff();
digitalWrite(7, HIGH);
ledoff();
digitalWrite(6, HIGH);
ledoff();
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
ledoff();

void ledoff(){
delay(1500);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}

void subroutine(){
Serial.print("Klik ke-");
Serial.println(count_pulse);
count_pulse++;
}
5. Pilih menu code dan ubah ke text dan memasukkan kode program diatas.

Gambar 4. 34 Kode program

6. Mulai simulasi dengan memilih start simulation.


Gambar 4. 35 Start simulation
4.5. Hasil percobaan dan Analisa
4.5.1. Percobaan 1
Tabel 4. 4 Source code percobaan 1

#include <TimerOne.h>

int ms;
int led1 = 5;
int led2 = 6;
int led3 = 7;
int led4 = 8;
int led5 = 9;
int LED[5];

void setup() {
// put your setup code here, to run once:
//pinMode(10, OUTPUT);
Timer1.initialize(500000);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
Timer1.attachInterrupt(ledInterrupt);
}

void loop(){
digitalWrite(led1,HIGH);
delay(1000);
digitalWrite(led1,LOW);
delay(1000);
}

void ledInterrupt() {
ms++;

if(ms%2==0){
LED[1]=!LED[1];
digitalWrite(led2,LED[1]);
}
if(ms%2==0){
LED[2]=!LED[2];
digitalWrite(led3,LED[2]);
}
if(ms%2==0){
LED[3]=!LED[3];
digitalWrite(led4,LED[3]);
}
if(ms%2==0){
LED[4]=!LED[4];
digitalWrite(led5,LED[4]);
}
}
#include <TimerOne.h> Merupakan pemanggilan Pustaka timer agar bisa
digunakan dalam percobaan, int ms; adalah untuk mendeklarasikan ms sebagai
pengaturan timer dan int led1 = 5; untuk mendeklarasikan dimana pin led tersebut
dipasang,
Kemudian ada void setup() { yg akan menjalankan sebuah program yang
hanya dijalankan sekali, seperti saat penyalaan pertama kali. Di dalamnya terdapat kode
yaitu Timer1.initialize(500000); yang digunakan untuk mengatur timer
penghitung untuk menghasilkan waktu interupsi setiap 500000 mikro detik, Untuk
mendeklarasikan dimana masukan dan keluaran menggunakan pinMode(2, OUTPUT);
untuk keluaran digital. Untuk menjalankan fungsi setiap kali periode pengatur waktu
selesai menggunakan sintaks ini Timer1.attachInterrupt(ledInterrupt);.
Lalu terdapat void loop() { yang akan menjalankan sebuah program yang
akan diulang ulang oleh mikrokontroler sampai mikrokontroler tersebut dimatikan. Di
dalamnya terdapat kode kode yaitu digitalWrite(led1,HIGH); yang digunakan untuk
menyalakan led 1 selama 1 detik karena menggunakan sintaks delay(1000); .
kemudian terdapat digitalWrite(led1,LOW); yang digunakan untuk mematikan
lampu led 1 selama 1 detik karena menggunakan sintaks delay(1000);.
Lalu terdapat void ledInterrupt() { yang merupakan kumpulan dari fungsi
yang akan dijalankan saat melakukan interupsi. Di dalamnya terdapat kode kode yaitu,
ms++; adalah digunakan untuk menambah nilainya secara incremental. Pada
pengkondisian di dalam kode diatas menggunakan kondisi if, if(ms%2==0){ digunakan
untuk pengkondisian jika variable ms memiliki sisa hasil bagi sama dengan 2 maka
sintaks di dalam pengkondisian tersebut akan berjalan. Tanda seru atau ! seperti di
LED[1]=!LED[1]; digunakan untuk membalik dari suatu variabel, pada kode diatas
untuk membalik kondisi pada led 1, dari menyala menjadi mati dan mati menjadi
menyala. digitalWrite(led2,LED[1]); digunakan untuk menyalakan atau
mematikan sesuai keadaan HIGH maupun LOW, karena menggunakan sintaks
LED[1]=!LED[1]; maka untuk menyalakan lampu, program memerlukan kondisi dari
led yang lain dan membaiknya sebelum menyalakan maupun mematikan led tersebut.
Alur dari led menyala adalah, diketahui terdapat 5 led, led 1 sampai led 5. Led 1
akan menyala selama 1 detik dan mati dalam satu detik, sementara untuk led 2 – 5
menyala dan mati dengan periode 0,5 detik dikarenakan adanya interrupt.

Gambar 4. 36 Rangkaian saat menjalankan program

Rangkaian percobaan 1 ini menggunakan Proteus. Di dalam proteus dibuatlah


rangkaian menggunakan Arduino Mega 2560. Disini pin vcc Arduino dihubungkan ke
power dan pin gnd ke ground. Kemudian pin 5 arduino dihubungkan ke led 1, pin 6
arduino dihubungkan ke led 2, pin 7 arduino dihubungkan ke led 3, pin 8 arduino
dihubungkan ke led 4, pin 9 arduino dihubungkan ke led 5. Lalu semua led
dihubungkan ke gnd. Selanjutnya pada pin 0 dihubungkan ke pin txd pada serial
monitor dan pin 1 arduino dihubungkan ke pin rxd pada serial monitor.
4.5.2. Percobaan 2
Tabel 4. 5 Source code percobaan 2
unsigned long mil0,mil1,mil2,mil3,mil4,i;
int state9=0;
int state8=0;
int state7=0;
int state6=0;
int state5=0;
unsigned long millisnow;
void modePin(){
for(i=5;i<=9; i++){
pinMode(i,OUTPUT);
}
}

void setup() {
// put your setup code here, to run once:
modePin();
}

void loop() {
// put your main code here, to run repeatedly:
millisnow=millis();
if(millisnow-mil0>=500){
if (state9==0) {
digitalWrite(9, HIGH);
mil0=millisnow;
state9=1;
}
else if(state9==1){
digitalWrite(9, LOW);
mil0=millisnow;
state9=0;
}
}

if(millisnow-mil1>=1000){
if (state8==0) {
digitalWrite(8, HIGH);
mil1=millisnow;
state8=1;
}
else if(state8==1){
digitalWrite(8, LOW);
mil1=millisnow;
state8=0;
}
}

if(millisnow-mil2>=2000){
if (state7==0) {
digitalWrite(7, HIGH);
mil2=millisnow;
state7=1;
}
else if(state7==1){
digitalWrite(7, LOW);
mil2=millisnow;
state7=0;
}
}

if(millisnow-mil3>=3000){
if (state6==0) {
digitalWrite(6, HIGH);
mil3=millisnow;
state6=1;
}
else if(state6==1){
digitalWrite(6, LOW);
mil3=millisnow;
state6=0;
}
}

if(millisnow-mil4>=4000){
if (state5==0) {
digitalWrite(5, HIGH);
mil4=millisnow;
state5=1;
}
else if(state5==1){
digitalWrite(5, LOW);
mil4=millisnow;
state5=0;
}
}
}

unsigned long mil0,mil1,mil2,mil3,mil4,i; adalah tipe data yang sama


dengan long, tetapi dihitung dari angka 0 atau mempunyai nilai berkisar 0 hingga
4.292.967.295. int state9 adalah deklarasi interger dari status awal pin 9.
void modePin(){ yaitu kata kunci (Keyword) atau kode yang digunakan hanya
untuk mendeklarasikan fungsi mode pin dalam program. Di dalamnya terdapat
for(i=5;i<=9; i++){ yang merupakan fungsi perulangan yang memuat fungsi jika i
sama dengan 5 dan kurang dari sama dengan 9 maka i akan bertambah secara
incremental, jika kondisi tersebut terpenuhi maka program akan menjalankan kode
pinMode(i,OUTPUT) yang berarti akan menjadikan pin I menjadi keluaran
Kemudian ada void setup() { yg akan menjalankan sebuah program yang
hanya dijalankan sekali, seperti saat penyalaan pertama kali. Di dalamnya terdapat
sintaks modePin(); yang berfungsi untuk menjalankan void modePin(){ diatas.
Lalu terdapat void loop() { yang akan menjalankan sebuah program yang
akan diulang ulang oleh mikrokontroler sampai mikrokontroler tersebut dimatikan. Di
dalamnya terdapat sintaks, yaitu millisnow=millis(); yang berarti variabel milisnow
merupakan milis. if(millisnow-mil0>=500){ digunakan untuk pengkondisian jika
variable milisnow dikurangi mil 0 kurang dari sama dengan 500 maka sintaks di dalam
pengkondisian tersebut akan berjalan, yaitu sintaks digitalWrite(9, HIGH);,

mil0=millisnow; dan state9=1;. digitalWrite(9, HIGH); menyatakan bahwa pin


9 akan menyala, mil0=millisnow; menyatakan bahwa mil0 sama dengan millisnow,
state9=1; dan menyatakan bahwa status dari pin 9 sama dengan 1 atau menyala. Jika
pengkondisian tidak sesuai, seperti pada sintaks state9==1, maka perintah di dalam
pengkondisian tersebut akan dijalankan.
Alur dari led menyala adalah, diketahui terdapat 5 led, led 1 sampai led 5.
Lampu led menyala dan mati secara periodic dengan led 1 menyala dan mati dengan
periode 0,5 detik, led 2 menyala dan mati dengan periode 1 detik, led 3 menyala dan
mati dengan periode 2 detik, led 4 menyala dan mati dengan periode 3 detik, led 5
menyala dan mati dengan periode 4 detik.

Gambar 4. 37 Rangkaian saat menjalankan program

Rangkaian percobaan 2 ini menggunakan Proteus. Di dalam proteus dibuatlah


rangkaian menggunakan Arduino Mega 2560. Disini pin vcc Arduino dihubungkan ke
power dan pin gnd ke ground. Kemudian pin 5 arduino dihubungkan ke led 1, pin 6
arduino dihubungkan ke led 2, pin 7 arduino dihubungkan ke led 3, pin 8 arduino
dihubungkan ke led 4, pin 9 arduino dihubungkan ke led 5. Lalu semua led
dihubungkan ke gnd. Selanjutnya pada pin 0 dihubungkan ke pin txd pada serial
monitor dan pin 1 arduino dihubungkan ke pin rxd pada serial monitor.
4.5.3. Percobaan 3
Tabel 4. 6 Source code percobaan 3

int count_pulse = 0;

void setup()
{
Serial.begin(9600);
for (int i=6; i<8; i++){ //beri penjelasan disini
pinMode(i, OUTPUT); //beri penjelasan disini
}
attachInterrupt(digitalPinToInterrupt(2), subroutine, RISING);
//untuk kode di atas beri penjelasan disini
}

void loop()
{
ledoff(); //beri penjelasan disini
digitalWrite(7, HIGH); //beri penjelasan disini
ledoff(); //beri penjelasan disini
digitalWrite(6, HIGH); //beri penjelasan disini
ledoff(); //beri penjelasan disini
digitalWrite(7, HIGH); //beri penjelasan disini
digitalWrite(6, HIGH); //beri penjelasan disini
ledoff(); //beri penjelasan disini
}

void ledoff(){
delay(1500); //beri penjelasan disini
digitalWrite(6, LOW); //beri penjelasan disini
digitalWrite(7, LOW); //beri penjelasan disini
}

void subroutine(){
Serial.print("Klik ke-"); //beri penjelasan disini
Serial.println(count_pulse); //beri penjelasan disini
count_pulse++; //beri penjelasan disini
}

int count_pulse = 0; adalah deklarasi interger dari penghitung pulsa.


Kemudian ada void setup() { yg akan menjalankan sebuah program yang hanya
dijalankan sekali, seperti saat penyalaan pertama kali. Di dalamnya terdapat sintaks
Serial.begin(9600); yang digunakan untuk menginisiasi koneksi serial di 9600 bit
per detik. for(i=6;i<8; i++){ yang merupakan fungsi perulangan yang memuat
fungsi jika i sama dengan 6 dan kurang dari 8 maka i akan bertambah secara
incremental, jika kondisi tersebut terpenuhi maka program akan menjalankan kode
pinMode(i,OUTPUT) yang berarti akan menjadikan pin I menjadi keluaran.
attachInterrupt(digitalPinToInterrupt(2), subroutine, RISING); digunakan
untuk menentukan dimana interrupt eksternal dipasang, dan bagaimana metode dari
interrupt yang ada.
Lalu terdapat void loop() { yang akan menjalankan sebuah program yang
akan diulang ulang oleh mikrokontroler sampai mikrokontroler tersebut dimatikan. Di
dalamnya terdapat sintaks, yaitu ledoff(); adalah suatu variabel. digitalWrite(7,
HIGH); digunakan untuk menyalakan lampu pada pin 7
void ledoff(){ yaitu kata kunci (Keyword) atau kode yang digunakan hanya
untuk mendeklarasikan fungsi ledoff dalam program. Di dalamnya terdapat
delay(1500); yang digunakan memberi semacam jeda sebesar 1,5 detik.
digitalWrite(6, LOW); digunakan untuk mematikan lampu pada pin 6
void subroutine(){ yaitu kata kunci (Keyword) atau kode yang digunakan
hanya untuk mendeklarasikan fungsi subroutine yang ada pada program. Di dalamnya
terdapat Serial.print("Klik ke-"); yang digunakan untuk menampilkan karakter
klik ke – pada serial monitor. Serial.println(count_pulse); akan menampilkan
berapa banyak interupsi yang dilakukan oleh pengguna. Dan count_pulse++;
digunakan untuk menginkrementasi interupsi dari pengguna agar dapat ditampilkan
pada interupsi selanjutnya.
Perilaku dari program ialah, saat tombol ditekan yaitu rising, program akan
memulai perhitungan dari count_pulse dan akan menampilkan klik ke- pada serial
monitor. Saat tombol dilepas yaitu falling, program akan memulai perhitungan dari
count_pulse dan akan menampilkan klik ke- pada serial monitor
Gambar 4. 38 Rangkaian saat menjalankan program

Rangkaian percobaan 3 ini menggunakan laman Tinkercad. Di dalam tinkercad


dibuatlah rangkaian menggunakan Arduino Uno. Disini pin 5v dihubungkan ke terminal
positif dan pin gnd dihubungkan ke terminal negative. Dari terminal negative
dihubungkan ke led 1 dan 2 melalui resistor, lalu led tersebut dihubungkan ke pin 7 dan
6 arduino. Kemudian pa tombol digunakan pull down resistor keluarannya dihubungkan
ke pin 2 arduino yang sudah di atur sebagai interrupt eksternal
4.6. Tugas
4.6.1. Tugas 1
Pada tugas 1 modul 3 kali ini diinginkan suatu program yang memiliki 4 buah
LED yang mempresentasikan 4 bit biner yang akan menyala 0000 sampai 1111 dengan
interval 1 detik tiap bilangan. Untuk membuat rangkaian ini digunakan platform proteus
dan arduino IDE. Rangkaian terdiri dari LCD sebagai parameter waktu, LED sebagai
keluaran bit bener yang berjumlah 4, dan Arduino Atmega 2560 sebagai mikrokomputer
yang dipakai.

Gambar 4. 39 Rangkaian Tugas 1 modul 3


Untuk dapat mendukung rangkaian tersebut dibuat sebuah program dengan source code
berikut:
Tabel 4. 7 Source code tugas 1 modul 3
#include <LiquidCrystal.h> //liblary LCD

int interval1=1000; //deklarasi interval


int interval2=2000;
int interval3=4000;
int interval4=8000;
unsigned long waktu1=0; // variabel counter untuk pewaktuan
unsigned long waktu2=0;
unsigned long waktu3=0;
unsigned long waktu4=0;
LiquidCrystal lcd(22,23,24,25,26,27);//inisialisasi pin lcd
void setup() {
pinMode(5, OUTPUT);//inisialisasi pin keluaran untuk bit 1
pinMode(6, OUTPUT);//inisialisasi pin keluaran untuk bit 2
pinMode(7, OUTPUT);//inisialisasi pin keluaran untuk bit 3
pinMode(8, OUTPUT);//inisialisasi pin keluaran untuk bit 4
lcd.begin(16, 2);//inisialisasi resolusi LCD
}

void loop() {

unsigned long waktu = millis(); //variabel penampung millis


lcd.setCursor(0,0);//set kursor print pada LCD
lcd.print("Waktu(S): ");//perintah print "Waktu(S): "
lcd.setCursor(10,0);
lcd.print(millis()/1000);//perintah print millis()/1000 untuk
parameter waktu pada LCD
if ((unsigned long)(waktu - waktu1) >= interval1) {//pengkodisian
untuk bit 1
digitalWrite(5, !digitalRead(5)); //pembalik pada kondisi LED
waktu1 = waktu;//variabel di berikan waktu agar pengkondisain
tetap sesuai dengan millis (sinkoronisasi)
}
if ((unsigned long)(waktu - waktu2) >= interval2) {
digitalWrite(6, !digitalRead(6));
waktu2 = waktu;
}
if ((unsigned long)(waktu - waktu3) >= interval3) {
digitalWrite(7, !digitalRead(7));
waktu3 = waktu;
}
if ((unsigned long)(waktu - waktu4) >= interval4) {
digitalWrite(8, !digitalRead(8));
waktu4 = waktu;
}

Pada program diatas digunakan liblary LiquidCrystal.h untuk LCD 16x2.


Lalu dideklarasikan sebuah variabel untuk menampung interval waktu dan counter
pewaktuan tiap interval yang digunakan tiap bit LED. Pada fungsi loop digunakan
pengkondisian if ((unsigned long)(waktu - waktu1) >= interval1) yang akan
menjalankan fungsi apabila nilai dari variabel waktu yang mana merupakan penampung
dari nilai millis, dikurangi dengan counter tiap interval yang apabila lebih besar dari
interval maka akan menjalankan fungsi di dalamnya. Dalam tiap penkondisian terdapat
perintah untuk membalik nilai dari LED dan sinkronisasi counter dari tiap interval. Pada
akhirnya tiap biner akan hidup mati sesai interval yang dinginkan. Untuk dapat
membuat nilai 0000-1111 yang memiliki interval tiap bilangan 1 detik digunakan
interval pada bit 1, 2 , 3, dan 4 berurutan 1 detik, 2 detik, 4 detik, dan 8 detik. LCD
diberikan perintah untuk mencetak nilai dari millis per 1000 atau nilai dari tiap detik
waktu.

Gambar 4. 40 Hasil keluaran saat waktu 4 detik


Dikarenakan waktu 4 detik membuat kondisi pada interval 1, 2, dan 3 terpenuhi
yang akan membuat LED pada interval 1 dan 2 dibalik nilai menjadi mati dari kondisi
nyala serta akan membalik LED pada interval 3 dari kondisi mati ke nyala.
Tabel 4. 8 pewaktuan
t (sekon) Biner LED 4 LED 3 LED 2 LED 1
0 0000 0 0 0 0
1 0001 0 0 0 1
2 0010 0 0 1 0
3 0011 0 0 1 1
4 0100 0 1 0 0
5 0101 0 1 0 1
6 0110 0 1 1 0
7 0111 0 1 1 1
8 1000 1 0 0 0
9 1001 1 0 0 1
10 1010 1 0 1 0
11 1011 1 0 1 1
12 1100 1 1 0 0
13 1101 1 1 0 1
14 1110 1 1 1 0
15 1111 1 1 1 1
4.6.2. Tugas 2
Pada tugas 2 modul 3 diinginkan suatu rangkaian mikrokontroler dengan
menggunakan Arduino Atmega 2560 yang memiliki keluaran berupa 3 buah LED yang
dihubungkan dengan pin digital 6, 7, dan 8 dengan 2 LED akan menyala bergantian lalu
akan menyala bersamaan dan mati bersamaan dan siklus ini akan berulang dari awal.
Pada LED 3 akan menyala dan mati apa bila push buttom ditekan dan dilepas yang
merupakan fungsi interupsi yang dihubungkan dengan pin 2 pada Arduino Atemega
2560.

Gambar 4. 41 Rangkaian tugas 2 modul 3


Untuk mendukung rangkaian tersebut agar keluaran dan fungsi masukan sesuai
dengan keanginan diberikan program dengan source code berikut ini:
Tabel 4. 9 Source code tugas 2 modul 3
void setup()
{
Serial.begin(9600);
for (int i=6; i<9; i++){ //perulangan untuk inisialisasi pin
keluaran
pinMode(i, OUTPUT);
}
attachInterrupt(digitalPinToInterrupt(2), lampu, CHANGE);
//inisisalisasi pin interupsi
}

void loop()
{
ledoff(); // memanggil fungsi led off
digitalWrite(7, HIGH); //menghidupkan led 7
ledoff();
digitalWrite(6, HIGH);// menghidupkan led 6
ledoff();
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
ledoff();
}

void ledoff(){
delay(1500);// menjeda program 1,5 detik
digitalWrite(6, LOW);// mematikan LED 6
digitalWrite(7, LOW);//mematikan LED 7
}
void lampu (){ //fungsi interupsi
digitalWrite(8, !digitalRead(8));} //membalik kondisi LED 8

Pada program diatas digunakan sebuah interupsi berjenis change yang akan
memanggil interupsi pada saat kondisi pin berubuh baik saat HIGH ke LOW atau
sebaliknya. Pada saat interupsi attachInterrupt(digitalPinToInterrupt(2),
lampu, CHANGE); akan memanggil fungsi “ lampu”, pada fungsi ini akan membalik
kondisi dari LED 8 dengan digitalWrite(8, !digitalRead(8));. Pada void loop
diberikan suatu perintah yang akan memanggil fungsi yang akan mematikan LED 6 dan
7 dilanjutkan menyalakan LED 6 dan & dengan diberikan jeda memanggil fungsi
mematikan kedua LED dilanjutkan menyalakan ke dua LED dan memanggil fungsi
untuk mematikan LED. Pada setiap fungsi diberikan delay 1,5 detik. Sehingga hasil
akhir akan sama dengan apa yang dinginkan.

Gambar 4. 42 Keluaran saat push buttom ditekan


Pada saat push buttom ditekan akan membuat interupsi dipanggil dan akan
memanggil fungsi lampu yang mana akan membalik kondisi LED dari mati ke menyala.
Gambar 4. 43 Keluaran saat push buttom dilepas
Pada saat push buttom dilepas akan membuat interupsi dipanggil dan akan
memanggil fungsi lampu yang mana akan membalik kondisi LED dari menyala ke mati.
Tabel 4. 10 Hasil keluaran tugas 2 modul 3
t (sekon) LED 1 LED 2 LED 3
0 0 0 Interupsi
1,5 1 0 Interupsi
3 0 1 Interupsi
4,5 1 1 Interupsi
6 0 0 Interupsi
4.7. Kesimpulan
1 Pada praktikum kali ini kita dapat mengetahui jenis dari external interrupt yakni
LOW, CHANGE, RISING, dan FALLING.
2 Dalam praktikum kali ini digunakan pewaktuan timer untuk menjalankan
perintah sesuai pada waktu yang disingkan dengan menggunakan
pengkondisian.
3 Pada praktikum kali ini gunakan 2 jenis external interrupt yakni RISING dan
FALLING pada percobaan 3 .
4 external interrupt dapat dibedakan jenisnya berdasarkan cara pembangkitannya
seperti LOW akan aktif apabila pin bernilai LOW, RISING akan aktif apabila
pin berubah dari LOW ke HIGH, FALLING akan aktif apabila pin berubah dari
HIGH ke LOW, dan CHANGE akan aktif apabila nilai dari pin berubah dari
LOW ke HIGH atau sebaliknya.
5 Pada praktikum kali ini diberikan tugas untuk membuat representasi biner dari 4
buah LED menggunakan pewaktuan sebagai pemrograman.

Anda mungkin juga menyukai