- Rangkai semua komponen sesuai kondisi yang dipilih
- Buat program di aplikasi arduino IDE
- Setelah selesai masukkan program ke arduino (Verify and Upload)
- Jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
- Finish
2. Hardware dan diagram blok
[Kembali]
a. hardware
b. Digram Blok
3. Rangkaian Simulasi dan Prinsip kerja
[Kembali]
Gambar Rangkaian
Sistem yang terdiri dari program dan rangkaian ini ditijukan untuk mengontrol sebuah display tujuh segmen (7-segment display) dengan menggunakan mikrokontroler Arduino. Program ini menggunakan dipswitch sebagai input untuk mengubah angka yang ditampilkan pada display. Tujuannya adalah pengguna dapat mengontrol tampilan pada display tujuh segmen menggunakan empat tombol sebagai input. Sistem ini disebut juga sebagai timer arduino.
Proses ini dimulai dari
1) inisialisasi yakni pada bagian setup()
Menyambungkan pin-pin yang terhubung ke display tujuh segmen (segment) serta pin-pin yang terhubung ke digit dari display (common cathode) yang diatur sebagai OUTPUT. Selanjutnya pin-pin pada dipswitch diatur sebagai INPUT_PULLUP agar saat dipswitch ON tidak ditekan, input akan berada pada logika HIGH.
2) Selanjutnya eksekusi di fungsi number(int display)
Fungsi ini mengatur output pada pin-pin segment berdasarkan angka yang akan ditampilkan. Array digitPatterns menyimpan pola-pola pencahayaan untuk setiap digit (0-9) pada display tujuh segmen.
3) Loop Utama (loop())
Dimana program akan terus berjalan di dalam loop utama ini
Fungsi dari setiap Switch :
sw1 dan sw3 digunakan untuk mengubah angka yang ditampilkan pada display dengan delay 1 detik (1000 ms) untuk setiap penambahan sw2 dan sw4 digunakan untuk menampilkan urutan angka dari 9 hingga 0 pada display dengan delay 200 ms untuk setiap angka. Setiap kali switch ditekan, pembacaan tombol akan dimulai. Pengaturan pada konsidi yangdiinginkan sesuai modul adalah saat SW1=ON, SW2=SW3=SW4=OFF. Jika kondisi ini terpenuhi, maka:
Dilakukan debouncing, yaitu menunggu sebentar untuk menghindari efek bouncing dari switch.
Terjadi perubahan pada digit yang ditampilkan pada display (D1 atau D2), terlihat pada 2 digit 7-segment dilakukan counting dari angka 0 sampai 9 secara bergantian di kedua sisi 7-segment. Angka ini ditampilkan berdasarkan fungsi number(int display).
4. FlowChart
[Kembali]
#define a 6
#define b 7
#define c 8
#define d 9
#define e 10
#define f 11
#define g 12
#define dp 13
#define D1 4
#define D2 5
#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3
bool sw1,sw2,sw3,sw4;
int segments[] = {a, b, c, d, e, f, g};
byte digitPatterns[10][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
};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
pinMode(dp, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(Dsw1, INPUT_PULLUP);
pinMode(Dsw2, INPUT_PULLUP);
pinMode(Dsw3, INPUT_PULLUP);
pinMode(Dsw4, INPUT_PULLUP);
Serial.begin(9600);
}
void number(int display) {
if (display >= 0 && display <= 9) {
for (int i = 0; i < 7; i++) {
digitalWrite(segments[i], digitPatterns[display][i]);
}
}
}
void loop() {
int sw1 = digitalRead(Dsw1);
int sw2 = digitalRead(Dsw2);
int sw3 = digitalRead(Dsw3);
int sw4 = digitalRead(Dsw4);
static int digit = 1; // Digit yang sedang ditampilkan (1 atau 2)
static int count = 0; // Counter untuk digit
static unsigned long lastTime = 0; // Waktu terakhir pembacaan tombol
if (sw1 == LOW) {
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
count++;
if (count > 9) {
count = 0;
}
if (digit == 1) {
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
number(count);
digit = 2;
} else {
digitalWrite(D1, LOW);
digitalWrite(D2, HIGH);
number(count);
digit = 1;
}
}
}
else if (sw2 == LOW) {
if (millis() - lastTime > 1000) { // Debouncing
lastTime = millis();
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
for (int i = 9; i >= 0; i--) {
number(i);
delay(1000); // Delay agar Anda bisa melihat perubahan digit
}
}
}
if (sw3 == LOW) {
if (millis() - lastTime > 2000) { // Debouncing
lastTime = millis();
count++;
if (count > 9) {
count = 0;
}
if (digit == 1) {
digitalWrite(D2, HIGH);
digitalWrite(D1, LOW);
number(count);
digit = 2;
} else {
digitalWrite(D2, LOW);
digitalWrite(D1, HIGH);
number(count);
digit = 1;
}
}
}
else if (sw4 == LOW) {
if (millis() - lastTime > 2000) { // Debouncing
lastTime = millis();
digitalWrite(D2, HIGH);
digitalWrite(D1, LOW);
for (int i = 9; i >= 0; i--) {
number(i);
delay(200); // Delay agar Anda bisa melihat perubahan digit
}
}
}
}
b. Flowchart
Percobaan 3 Timer Arduino
6.Video Demo[Kembali]
7. Download File
[Kembali]
Download HMTL klik disini
Download Simulasi Rangkaian klik disini
Download Video Demo klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet DipSwitch klik disini
Download Datasheet 2 Digit 7-Segment klik disini
Tidak ada komentar:
Posting Komentar