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
5. Resistor
b. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinsip Kerja
Pada Percobaan 2 kondisi 1 tersebut, Motor berputar ke kanan,LCD menampilkan counting dari 0 sampai 100, setiap kelipatan counting 10 maka akan menghidupkan 1 led dan interrupt membuat counting diulang dari 0, LED mati, dan motor DC berhenti. Pada rangkaian di atas dengan input dipswitch dengan output motor dc dan LCD 16X2, pada saat rangakaian di run motor dc akan berputar dan LCD menampilkan counting dari 0-100 dengan delay dan seterusnya jika saat di run tersebut kita tekan tombol pada dipswict memakai pull down dimana kondisi awal vo = 0. maka counting yang ditampilkan di lcd akan menampilkan kembali counting mulai dari 0 lagi atau kembali ke awal akibat adanya interrupt dari tombol dipswicth yang kita tekan.
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
Datasheet Arduino klik disini
Datasheet Dipswitch klik disini
Datasheet LCD 16x2 klik disini
Datasheet PCF8574 klik disini
Datasheet Motor DC klik disini
Datasheet Potensiometer klik disini
Datasheet Resistor klik disini
Tidak ada komentar:
Posting Komentar