1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Hardware dan Diagram Blok
[Kembali]
Hardware:
1. Arduino Uno
2. Dip Switch
3. 7 Segment 2 Digit
4. Resistor
Block Diagram:
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Prinsip Kerja :
Rangkaian ini terdiri dari 4 buah kompnen yaitu Arduino, 7-Segment 2 digit, Dipswitch, dan Resistor. Dipswith berguna sebagai input dari Arduino yang dihubungkan ke kaki A0-A3 arduino. sedangkan untuk outputnya yaitu 7-segment 2 digit yang masing masing pinnya dihubungkan ke pin 4-13 Arduino.
Ketika 2 buah dipswitch on, maka arduino akan mengeluarkan output berupa counting pada 7-segment dari angka 15 hingga 0 lalu reset counting lagi ke 15. karena 7-segement ini tidak bisa menampilkan 2 digit angka sekaligus maka, kami memprogram pada arduino, dimana ketika countingnya diatas atau sama dengan 10, maka angka puluhan dan angka satuannya akan tampil secara berseling pada kedua display 7 segment dengan delay waktu yang cukup singkat. namun ketika countingnya dibawah 10, maka 7-segment yang dikiri akan mati, dan hanya akan menampilkan digit pada 7-segment dikanan. Jika Dipswitch yang aktif lebih dari 2 atau kurang dari 2, maka tidak akan terjadi proses counting
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
Listing Program:
// Mendefinisikan nomor pin untuk segmen-segmen a sampai g dan titik desimal (dp) pada display 7-segmen
#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13
// Mendefinisikan nomor pin untuk dua digit (D1 dan D2) pada display 7-segmen
#define D1 4
#define D2 5
// Mendefinisikan nomor pin untuk empat tombol switch (Dsw1 sampai Dsw4)
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3
// Inisialisasi array dengan nomor pin segmen-segmen untuk memudahkan kontrol segmen
int segments[] = {a, b, c, d, e, f, g};
// Membuat array dua dimensi untuk menentukan pola yang dinyalakan (1) atau dimatikan (0) untuk masing-masing angka 0-9, dp, dan kondisi kosong
byte digitPatterns[16][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1}, // 9
{0, 0, 0, 0, 0, 0, 1}, // dp (titik desimal)
{0, 0, 0, 0, 0, 0, 0}, // kondisi kosong
};
void setup() {
// Mengatur pin-pin segmen sebagai OUTPUT
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
// Mengatur pin dp dan digit sebagai OUTPUT
pinMode(dp, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
// Mengatur pin-pin switch sebagai INPUT_PULLUP (menggunakan resistor pull-up internal)
pinMode(Dsw1, INPUT_PULLUP);
pinMode(Dsw2, INPUT_PULLUP);
pinMode(Dsw3, INPUT_PULLUP);
pinMode(Dsw4, INPUT_PULLUP);
// Memulai komunikasi serial pada baud rate 9600 untuk debugging
Serial.begin(9600);
}
void displayDigit(int digit, int digitPosition) {
// Menyalakan segmen-segmen berdasarkan pola digit yang diinginkan
for (int i = 0; i < 7; i++) {
digitalWrite(segments[i], digitPatterns[digit][i]);
}
// Mengaktifkan digit yang sesuai berdasarkan posisi yang diinginkan
if (digitPosition == D1) {
digitalWrite(D1, HIGH); // Aktifkan digit 1
digitalWrite(D2, LOW); // Pastikan digit 2 non-aktif
} else if (digitPosition == D2) {
digitalWrite(D1, LOW); // Pastikan digit 1 non-aktif
digitalWrite(D2, HIGH); // Aktifkan digit 2
}
}
void displayNumber(int number) {
// Fungsi untuk menampilkan angka pada display 7-segmen
if (number < 10) {
// Jika angka kurang dari 10, tampilkan hanya pada digit pertama
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
displayDigit(0, D2); // Menampilkan angka 0 pada digit kedua
displayDigit(number, D1); // Menampilkan angka pada digit pertama
} else {
// Jika angka 10 atau lebih, pecah menjadi dua digit dan tampilkan secara bergantian
int tensDigit = number / 10; // Digit puluhan
int unitsDigit = number % 10; // Digit satuan
displayDigit(tensDigit, D2); // Tampilkan digit puluhan pada digit kedua
delay(200); // Tunda untuk visibility
displayDigit(unitsDigit, D1); // Tampilkan digit satuan pada digit pertama
}
delay(1000); // Tunda untuk memastikan angka terlihat dengan jelas
}
void loop() {
// Membaca status dari tombol-tombol dan menentukan apakah tombol ditekan (LOW karena menggunakan INPUT_PULLUP)
bool sw1 = digitalRead(Dsw1) == LOW;
bool sw2 = digitalRead(Dsw2) == LOW;
bool sw3 = digitalRead(Dsw3) == LOW;
bool sw4 = digitalRead(Dsw4) == LOW;
// Menghitung jumlah tombol yang ditekan
int pressedCount = sw1 + sw2 + sw3 + sw4;
// Variabel untuk menyimpan waktu terakhir tombol ditekan dan counter untuk angka yang ditampilkan
static unsigned long lastTime = 0;
static int count = 15;
if (pressedCount == 2) {
// Jika ada dua tombol yang ditekan secara bersamaan, kurangi nilai counter dan tampilkan angka
if (millis() - lastTime > 1000) { // Menggunakan debounce time 1 detik
lastTime = millis();
if (count >= 10) {
// Jika counter >= 10, gunakan fungsi displayNumber untuk menampilkan angka
displayNumber(count);
} else {
// Jika counter < 10, cukup gunakan displayDigit untuk menampilkan angka pada digit pertama
displayDigit(0, D2); // Menampilkan 0 pada digit kedua sebagai placeholder
displayDigit(count, D1); // Menampilkan angka pada digit pertama
delay(1000); // Tunda untuk visibility
}
count--;
if (count < 0) {
count = 15; // Reset counter ke 15 setelah mencapai 0
}
}
} else {
count = 15; // Reset counter jika tidak ada dua tombol yang ditekan secara bersamaan
}
}
Percobaan 3 Kondisi 2
-Ketika 2 switch aktif 7-Segment menghitung mundur dari 15
6. Video Simulasi
[Kembali]
HTML klik disini
Program klik disini
Tidak ada komentar:
Posting Komentar