TP 1



Percobaan 2 Kondisi1

Interrupt Arduino

1. Prosedur
[Kembali]
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
 
1. Arduino Uno
 
2. Dipswitch

3. LCD 16X2
Jual Cuci Gudang Lcd Display 1602 + I2c 16x2 16 2 16*2 Biru Blue Di Seller  Algorista - Sanan Wetan, Kota Blitar | Blibli
4. PCF8574
Jual Modul Ekspansi IO 8 Bit PCF8574 Via Port I2C utk Arduino/Raspberry pi  - Kab. Bandung - Diggyshop | Tokopedia
4. Motor DC
Mengenal Motor DC - Enfys
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..


 
4. Flowcharth dan Listing Program [Kembali]
a. Flowcharth

b. Listing Program
#include <LiquidCrystal_I2C.h>

#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]
 






7. Download File [Kembali]