Tugas Pendahuluan 2
MODUL 2 PERCOBAAN 2 KONDISI 4
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]
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:
- Ketika rangkaian dihidupkan, motor DC akan berputar
- LCD 16x2 akan menampilkan hitungan dari 0 sampai 50.
- Ketika hitungan mundur menanmpilkan bilangan prima, maka Led akan running dari Led 1 sampai Led 6 selama 4 detik
- 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.
- 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]
- HTML↠ klik disini
- Rangkaian Simulasi ↠ klik disini
- Video Simulasi ↠ klik disini
- Listing Program ↠ klik disini
Komentar
Posting Komentar