Tugas Pendahuluan 2

MODUL 2 PERCOBAAN 2 KONDISI 4

      [KEMBALI KE MENU SEBELUMNYA]  




Percobaan 2

Interrup Arduino

1. Prosedur  [back]

  • Rangkailah seperti rangkaian berikut
  • Buka Arduino IDE dan masukan listing program
  • Upload program ke arduino

2. Foto Hardware dan diagram blok [back]


        1. Arduino Uno

        2. DIP SWITCH 





        3. LCD



        4. Resistor

        5. Power Supply


         6. Ground
       



7. Motor

8. IC I2C

 


9. Potensiometer


  • Diagram Blok:



3. Rangkaian Simulasi dan Prinsip Kerja  [back]


                                                    Gambar 1. Rangkaian Simulasi.

Prinsip Kerja:

   Rangkaian ini bekerja dengan mengendalikan motor DC dan menampilkan informasi pada LCD 16x2

Motor DC:

  • Berputar ke kanan 
  • Mati selama 3 detik.
  • Berputar ke kiri selama 5 detik.
  • Mati selama 7 detik.

LCD 16x2:

  • Menampilkan hitungan mundur dari 0 sampai 50.
  • Setiap bilangan prima membuat LED runing

Dipswitch:

  • Digunakan untuk memberikan interupsi pada hitungan mundur.
  • Ketika tombol dipswitch ditekan, hitungan dimulai dari 0

Cara kerja:

  1. Ketika rangkaian dihidupkan, motor DC akan berputar 
  2. LCD 16x2 akan menampilkan hitungan dari 0 sampai 50.
  3. Ketika hitungan mundur menanmpilkan bilangan prima, maka Led akan running dari Led 1 sampai Led 6 selama 4 detik
  4. Ketika dip switch di tekan (memberikan interrup) maka semua Led akan menyala selama 3 detik dan kemudian mati, serta LCD akan menampilkan Counter dari 0 lagi.
  5. Siklus ini akan terus diulang.

Interrupt:

  • Ketika tombol dipswitch ditekan, counter akan mulai dari 0 kembali.
  • Semua Led akan menyala selama 3 detik lalu mati.
  • Motor DC akan berhenti.

4. Flowchart dan Listing Program  [back]

Flowchart:


  • Listing Program:
//Percobaan 2
#include <Wire.h> #include <LiquidCrystal_I2C.h> #define LED_COUNT 6 const int LED_PINS[LED_COUNT] = {13, 12, 11, 10, 9, 8}; const int SWITCH_PIN = 2; LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, ukuran 16x2 volatile bool switchPressed = false; volatile int counting = 0; // deklarasi counting void setup() { Serial.begin(9600); for (int i = 0; i < LED_COUNT; ++i) { pinMode(LED_PINS[i], OUTPUT); } pinMode(SWITCH_PIN, INPUT_PULLUP); // Mengatur pin 2 sebagai input dengan pull-up resistor lcd.init(); lcd.backlight(); lcd.begin(16, 2); attachInterrupt(digitalPinToInterrupt(SWITCH_PIN), resetCounting, FALLING); // Menambahkan fungsi interupsi pada pin 2 dengan turunnya tegangan } void loop() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Count: "); lcd.print(counting); if (switchPressed) { counting = 0; // Reset counting menjadi 0 switchPressed = false; for (int i = 0; i < LED_COUNT; ++i) { digitalWrite(LED_PINS[i], HIGH); } delay(3000); // Hidupkan semua LED selama 3 detik for (int i = 0; i < LED_COUNT; ++i) { digitalWrite(LED_PINS[i], LOW); } } if (counting <= 50) { Serial.println(counting); delay(1000); } else { counting = 0; Serial.println(counting); delay(1000); } if (isPrime(counting)) { runLED(); } counting++; if (counting > 50) { counting = 0; delay(3000); // Menunggu 3 detik setelah mencapai 50 } } bool isPrime(int n) { if (n <= 1) return false; if (n <= 3) return true; if (n % 2 == 0 || n % 3 == 0) return false; for (int i = 5; i * i <= n; i += 6) { if (n % i == 0 || n % (i + 2) == 0) return false; } return true; } void runLED() { for (int i = 0; i < LED_COUNT; ++i) { digitalWrite(LED_PINS[i], HIGH); delay(400); digitalWrite(LED_PINS[i], LOW); } } void resetCounting() { switchPressed = true; }
5. Video Simulasi  [back]

7. Download File  [back]










Komentar

Postingan Populer