Interrupt Arduino
1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Transfer program yang telah dibuat ke Arduino yang ada di Proteus.
4. Uji coba program di simulasi sesuai dengan kondisi yang diinginkan.
5. Proses selesai setelah uji coba berhasil dilakukan.
2. Hardware dan Diagram Blok
[Kembali]
a. Hardware
b. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinsip Kerja
Dalam Percobaan 2 dengan kondisi 1 yang disebutkan, rangkaian diatur sedemikian rupa sehingga ketika dijalankan, motor akan mulai berputar ke arah kanan. Layar LCD yang terpasang akan menampilkan serangkaian angka yang mulai dari 0 hingga mencapai 100. Setiap kali angka mencapai kelipatan 10, sebuah lampu LED yang terhubung ke rangkaian akan menyala, memberikan indikasi visual tambahan.
Namun, apa yang menarik adalah saat tombol pada dipswitch ditekan. Dipswitch dipasang dengan konfigurasi pull-down, sehingga ketika tidak ada input, tegangan outputnya adalah 0. Ketika tombol pada dipswitch ditekan, terjadi perubahan dalam tegangan yang dihasilkan oleh dipswitch tersebut. Perubahan ini, atau interupsi, memicu respons di dalam rangkaian.
Respons tersebut mencakup pengulangan penghitungan pada layar LCD. Angka yang ditampilkan kembali ke 0, dan proses penghitungan dimulai dari awal lagi. Di saat yang sama, lampu LED yang sebelumnya menyala dimatikan, menunjukkan adanya perubahan kondisi atau peristiwa yang ditanggapi oleh rangkaian. Yang lebih menarik lagi, motor DC yang sebelumnya berputar juga dihentikan.
Jadi, dengan setiap kali tombol dipswitch ditekan, rangkaian memberikan respons yang terkoordinasi: memulai ulang penghitungan di LCD, mematikan lampu LED, dan menghentikan putaran motor DC. Respons ini menunjukkan kecerdasan dan adaptabilitas dalam rangkaian, menjadikannya responsif terhadap input yang diberikan dan memastikan bahwa pengguna dapat dengan jelas melihat efek dari interaksi mereka dengan rangkaian..
a. Flowcharth
b. Listing Program
#define LED1 13
#define LED2 12
#define LED3 11
#define LED4 10
#define motorPin1 9
#define interruptPin 2
volatile bool buttonPressed = false; // Flag untuk menandakan bahwa tombol telah ditekan
int count = 0; // Variabel untuk menyimpan nilai count
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C, jumlah kolom, jumlah baris LCD
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(motorPin1, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), interruptServiceRoutine, FALLING);
lcd.init();
lcd.backlight();
}
void loop()
{
count++;
// Menampilkan nilai count pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Count: ");
lcd.print(count);
// Memeriksa apakah count adalah kelipatan 10 dan menyalakan LED sesuai
if (count % 10 == 0)
{
switch (count / 10)
{
case 1:
digitalWrite(LED1, HIGH);
break;
case 2:
digitalWrite(LED2, HIGH);
break;
case 3:
digitalWrite(LED3, HIGH);
break;
case 4:
digitalWrite(LED4, HIGH);
break;
}
}
// Memutar motor ke kanan
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
delay(100);
// Mematikan motor
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
// Menunggu 100ms sebelum iterasi berikutnya
delay(100);
// Memeriksa apakah count sudah mencapai 100
if (count >= 100)
{
// Mematikan program
while (true)
{
// Do nothing, program berhenti di sini
}
}
}
// Fungsi untuk menangani interrupt
void interruptServiceRoutine()
{
count = 0; // Mengulang count menjadi 0
// Mematikan semua LED
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
}
5. Kondisi
[Kembali]
Percobaan 2 Kondisi 1
Motor ke kanan,LCD menampilkan counting dari 0 sampai 100, setiap counting kelipatan 10 maka hidup 1 LED,ketika diberi interrupt maka counting diulang dari 0 dan 1 led mati
5. Video Simulasi [Kembali]
HTML klik disini
Simulasi klik disini
Gambar Simulasi klik disini
Video Simulasi klik disini
Listing Program klik disini