1. Rangkai rangkaian pada alat sesuai dengan modul.
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 rangkaian.
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 rangkaian.
2. Hardware dan Diagram Blok
[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Prinsip Kerja :
Pada percobaan ini, kita menggunakan dip switch sebagai inputan. Sedangkan yang berfungsi sebagai keluaran atau output adalah seven segment 2 digit. Dipswith yang 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. Beberapa tahapan prinsip kerjanya adalah sebagai berikut:
1. Inisialisasi: Pada awalnya, semua pin yang digunakan untuk menyalakan display tujuh segmen, digit, dan sakelar diposisikan sesuai kebutuhan dan diberi nilai awal.
2. Loop Utama: Program akan terus berjalan di dalam loop utama. Setiap iterasi dari loop, program akan memeriksa status sakelar dan melakukan tindakan sesuai dengan kondisi yang terpenuhi.
3. Pemeriksaan Sakelar:
- Jika sakelar 1 ditekan, maka program akan melakukan penambahan pada variabel count dan menampilkan nilai count pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2.
- Jika sakelar 2 ditekan, maka program akan menampilkan angka dari 9 hingga 0 secara berurutan pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2.
- Jika sakelar 3 ditekan, maka program akan melakukan penambahan pada variabel count dan menampilkan nilai count pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2. Namun, sakelar 3 mempunyai waktu debouncing yang lebih panjang, yaitu 2 detik.
- Jika sakelar 4 ditekan, maka program akan menampilkan angka dari 9 hingga 0 secara berurutan pada display tujuh segmen dalam satu digit. Pengubahan digit akan bergantian antara D1 dan D2. Namun, sakelar 4 mempunyai waktu debouncing yang lebih panjang, yaitu 2 detik.
4. Debouncing: Untuk mencegah efek bouncing pada sakelar, dilakukan pemeriksaan waktu terakhir pembacaan sakelar menggunakan fungsi millis() dan menetapkan waktu tertentu sebelum pembacaan sakelar berikutnya dapat dilakukan.
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
#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
}
}
}
}
Percobaan 3 : Timer Arduino
6. Video Demo [Kembali]
7. Soal Analisa
[Kembali]
1. Apa itu timer arduino, apa itu millis dan delay, apa perbedaannya dan kenapa dibedakan
2. Analisa pengaruh penggunaan millis dan delay pada program yg di gunakan