Tujuan Praktik :
A.Mahasiswa mampu menganalisis rangkaian antarmuka dan program Arduino Uno yang menggunakan Inte
B.Mahasiswa mampu membuat sendiri aplikasi pengontrolan berbasis Arduino Uno yang menggunakan Inter
1
4. FALIING = interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari
HIGH ke LOW (dieksekusi 1 kali pas terjadi perubahan)
#define greenPin 13
#define redPin 12
#define buttonPin 2
2
Pada void setup() digunakan untuk inisialisasi yang hanya dijalankan sekali di
awal program. pinMode mendefinisikan pin yang digunakan sebagai
keluaran/masukan. Pin LED sebagai output dan pin button sebagai input. Fungsi
attachInterrupt() digunakan untuk menentukan jenis interrupt, ISR yang
dipanggil, dan mode operasi pulsa sinyal interrupt yang dideteksi. Cara
menuliskan statement berdasarkan sintaksnya yaitu:
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode). Dalam hal ini, mode yang
digunakan adalah RISING yang berarti interrupt akan dieksekusi jika terjadi
perubahan nilai pembacaan dari LOW ke HIGH (dieksekusi 1 kali pas terjadi
perubahan).
void setup()
{ pinMode(greenPin,
OUTPUT); pinMode(redPin,
OUTPUT);
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), toggleISR, RISING);
//attachInterrupt(0, toggleISR, RISING); //Interrupt pin D2
}
Pada void loop() digunakan untuk proses pengulangan program pada sebuah
masukan atau keluaran. greenPin akan dieksekusi LOW sehingga LED hijau tidak
menyala dengan delay 0,1 detik lalu greenPin dieksekusi HIGH sehingga LED
hijau menyala dengan delay 0,1 detik.
void loop()
{ digitalWrite(greenPin,
LOW); delay(100);
digitalWrite(greenPin, HIGH);
delay(100);
}
3
TP10-2. Counter Interrupt
A. Jelaskan mengapa pada program P10-2 digunakan mode interrupt “RISING”.
Mode interrupt RISING digunakan karena mode interrupt ini akan dieksekusi jika
terjadi perubahan nilai pembacaan dari LOW ke HIGH. Program ini membaca nilai
LOW ke HIGH dari push button switch.
B. Jelaskan mengapa pada program P10-2, switch menggunakan pin D2 dan D3.
Pada program P10-2, switch menggunakan pin D2 dan D3 karena Arduino UNO
memiliki 2 pin interrupt yaitu INT0 pada pin 2 digital dan INT1 pada pin 3 digital.
Program ini menggunakan 2 proses interrupt yang dilakukan (ISR) yaitu button2ISR
dan button3ISR.
Pada fungsi setup() akan digunakan untuk inisialisasi yang hanya dijalankan
sekali di awal program. Statement lcd.begin(16,2) digunakan untuk menentukan
kolom dan baris dari lcd yang akan digunakan yaitu kolom 16 dan baris 2.
4
lcd.setCursor(0,0) digunakan untuk meng-set posisi awal kursor di awali dengan
kolom 0 dan baris 0. Lalu, statement lcd.print("Program TP10-2"); digunakan
untuk menampilkan teks “Program TP10-2” pada LCD. Lalu, diatur posisi kolom 0
dan baris 1 dan menampilkan teks “CounterInterrupt”. Statement
pinMode(ledPin,OUTPUT); digunakan untuk mengatur pin led merah sebagai
output. Kemudian statement attachInterrupt(digitalPinToInterrupt(buttonPin2),
button2ISR, RISING); digunakan sebagai fungsi melakukan proses interrupt yang
terdiri dari deklarasi pin yang digunakan yaitu pin D2, nama ISR (Interrupt Service
Routine) yaitu button2ISR, dan jenis mode yang digunakan yaitu RISING.
Statement attachInterrupt(digitalPinToInterrupt(buttonPin3), button3ISR,
RISING); digunakan sebagai fungsi melakukan proses interrupt yang terdiri dari
deklarasi pin yang digunakan yaitu pin D3, nama ISR (Interrupt Service Routine)
yaitu button3ISR, dan jenis mode yang digunakan yaitu RISING.
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Program TP10-2");
lcd.setCursor(0,1);
lcd.print("CounterInterrupt");
delay(2000);
lcd.clear();
pinMode(ledPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin2), button2ISR, RISING);
attachInterrupt(digitalPinToInterrupt(buttonPin3), button3ISR, RISING);
}
Pada fungsi loop(), fungsi ini akan dijalankan setelah setup (fungsi void setup)
selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara
terus menerus sampai catu daya (power) dilepaskan. lcd.clear() digunakan untuk
hapus layar tampilan pada LCD. Lalu, LCD akan menampilkan teks “COUNTER : “
dan akan menampilkan nilai i sebagai angka counter up dan di delay 1 s. Statement
digitalWrite(ledPin, output); digunakan untuk mengatur pin led merah sebagai
output.
void loop()
{
lcd.clear();
lcd.print("COUNTER : ");
lcd.print(i);
i++;
delay(1000);
digitalWrite(ledPin, output);
}
5
Pada fungsi button2ISR() merupakan proses interrupt service routine saat
keadaan push button switch 1 ditekan maka pada LCD akan menampilkan teks
“Interrupt 1” pada kolom 0 dan baris 1.
void button2ISR()
{
output = LOW;
lcd.setCursor(0,1);
lcd.print("Interrupt 1");
}
6
Setelah program dijalankan, jika keadaan logic state sensor PIR “0” tidak akan
menampilkan apapun pada virtual terminal dan led merah tidak menyala
dikarenakan tidak ada proses interrupt, sedangkan jika logic state sensor PIR “1”
terjadi proses interrupt yaitu pada virtual terminal akan menampilkan teks
“Interrupt” dan led merah akan menyala.
Pada fungsi setup() akan digunakan untuk inisialisasi yang hanya dijalankan
sekali di awal program. Serial begin digunakan untuk mengatur kecepatan data
untuk komunikasi serial (bit/s). Statement pinMode(ledPin,OUTPUT); digunakan
untuk mengatur pin led merah sebagai output. Dan statement
attachInterrupt(digitalPinToInterrupt(pirPin), serialPrintISR, RISING); digunakan
sebagai fungsi melakukan proses interrupt yang terdiri dari deklarasi pin sensor
yang digunakan yaitu pin D2, nama ISR (Interrupt Service Routine) yaitu
serialPrintISR, dan jenis mode yang digunakan yaitu RISING.
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
attachInterrupt(digitalPinToInterrupt(pirPin), serialPrintISR, RISING);
}
Pada fungsi loop(), fungsi ini akan dijalankan setelah setup (fungsi void setup)
selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara
terus menerus sampai catu daya (power) dilepaskan. Jika keadaan sensor PIR itu
HIGH maka led merah akan menyala dan diberi delay 500 ms.
void loop()
{
if (motionState == HIGH)
{
digitalWrite(ledPin, HIGH);
delay(500);
}
}
7
Pada fungsi serialPrintISR() merupakan proses interrupt service routine saat
keadaan sensor PIR itu high maka pada virtual terminal akan menampilkan teks
“Interrupt”.
void serialPrintISR()
{
motionState = HIGH;
Serial.println("Interrupt");
}
8
Pada fungsi setup() akan digunakan untuk inisialisasi yang hanya dijalankan sekali
di awal program. Serial begin digunakan untuk mengatur kecepatan data untuk
komunikasi serial (bit/s). Pada fungsi for dibawah digunakan untuk inisialisa ke-
delapan LED yang digunakan sebagai outout. Dan statement
attachInterrupt(digitalPinToInterrupt(buttonPin), variationISR, RISING);
digunakan sebagai fungsi melakukan proses interrupt yang terdiri dari deklarasi
pin sensor yang digunakan yaitu pin D2, nama ISR (Interrupt Service Routine) yaitu
variationISR, dan jenis mode yang digunakan yaitu RISING.
void setup()
{
Serial.begin(9600);
for (int i=0; i<8; i++)
{
pinMode(ledPin[i], OUTPUT);
}
attachInterrupt(digitalPinToInterrupt(buttonPin), variationISR, RISING);
}
Pada fungsi loop(), fungsi ini akan dijalankan setelah setup (fungsi void setup)
selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara
terus menerus sampai catu daya (power) dilepaskan. Pada fungsi switch dibawah
untuk menyebutkan variasi-variasi yang digunakan dalam menyalakan ke-delapan
LED yang digunakan.
void loop()
{
switch(variationState)
{
case 0:
right2left();
break;
case 1:
left2right();
break;
case 2:
middleRightLeft();
break;
default:
break;
}
}
9
Pada fungsi variationISR() merupakan proses interrupt service routine, pertama-
tama diberi delay 100 ms kemudian variable variationState akan membaca nilai
bertambah ke atas yang nilainya akan ditampilkan pada virtual terminal dengan
teks awal “Variation State = “.
void variationISR()
{
delay(100);
variationState++;
Serial.print("Variation State = ");
Serial.println(variationState);
if(variationState > 2) variationState = 0;
}
Pada fungsi right2left() merupakan proses yang akan menyalakan led secara
bergatian dari kanan ke kiri menggunakan fungsi for, setiap LED diberi delay 50
ms dan akan menampilkan nilai variationState pada virtual terminal.
void right2left()
{
for (int i=0; i<8; i++)
{
digitalWrite(ledPin[i], HIGH);
delay(ledTime);
digitalWrite(ledPin[i], LOW);
delay(ledTime);
if(variationState != 0) break;
}
}
Pada fungsi left2right() merupakan proses yang akan menyalakan led secara
bergatian dari kiri ke kanan menggunakan fungsi for, setiap LED diberi delay 50
ms dan akan menampilkan nilai variationState pada virtual terminal.
void left2right()
{
for (int i=7; i>-1; i--)
{
digitalWrite(ledPin[i], HIGH);
delay(ledTime);
digitalWrite(ledPin[i], LOW);
delay(ledTime);
if(variationState != 1) break;
}
}
1
Pada fungsi middleRightLeft() merupakan proses yang akan menyalakan led
secara bergatian dari tengah lalu ke kanan dan kiri menggunakan fungsi for dan
juga menggunakan variable oddNumber = 1 dalam prosesnya, setiap LED diberi
delay 50 ms dan akan menampilkan nilai variationState pada virtual terminal.
void middleRightLeft()
{
int oddNumber = 1;
for (int i=3; i>-1; i--)
{
digitalWrite(ledPin[i], HIGH);
digitalWrite(ledPin[i + oddNumber],
HIGH); delay(ledTime);
digitalWrite(ledPin[i], LOW);
digitalWrite(ledPin[i + oddNumber], LOW);
delay(ledTime);
oddNumber += 2;
if(variationState != 2) break;
}
}
Kesimpulan
2. Pada program aplikasi Basic Interrupt merupakan program interrupt yang menggunakan push button switch
button2ISR dan button3ISR.
1
3. Pada program aplikasi Counter Interrupt merupakan program interrupt yang
menggunakan 2 buah push button switch, 3 buah resistor, 1 buah led merah, dan LCD
Karakter 16x2. Setelah program diajalnkan, pertama-tama pada LCD akan
menampilkan teks “Program TP10-2” dan “CounterInterrupt” selama 2 detik, setelah
itu LCD akan menampilkan proses counter up dan jika kita menekan push button
switch yang pertama maka pada LCD menampilkan proses counter up dan juga teks
“Interrupt 1”. Dan jika push button switch yang kedua ditekan, maka pada LCD
menampilkan proses counter up yang sedang berjalan, teks “Interrupt 2” dan led
merah akan menyala.
4. Pada program aplikasi Motion Interrupt merupakan program interrupt yang
menggunakan sensor PIR, resistor, led merah, dan virtual terminal. Setelah program
dijalankan, jika keadaan logic state sensor PIR “0” tidak akan menampilkan apapun
pada virtual terminal dan led merah tidak menyala dikarenakan tidak ada proses
interrupt, sedangkan jika logic state sensor PIR “1” terjadi proses interrupt yaitu pada
virtual terminal akan menampilkan teks “Interrupt” dan led merah akan menyala.
5. Program LED Variations merupakan aplikasi yang mengontrol arah nyala lampu
menggunakan button. Arah mati dan nyala lampu tersebut diatur oleh program
switch(case) berbasis program interrupt. Saat program di running, LED menyala dari
arah kanan lalu kekiri, tampilan pada serial monitor kosong. Ketika tombol button
ditekan, LED menyala dari arah kiri lalu kekanan, tampilan pada serial monitor
“Variation state = 1”. Ketika tombol button ditekan lagi, LED menyala dari tengah lalu
membagi 2 arah kekiri dan kekanan, tampilan pada serial monitor “Variation state =
2”. Jika tombol button ditekan lagi, LED menyala dari arah kanan lalu kekiri, tampilan
pada serial monitor “Variation state = 3”.