Laporan Akhir 2 Modul 2
Percobaan 3
1. Rangkai rangkaian sesuai dengan modul praktikum.
2. Tulis program untuk arduino di software Arduino IDE.
2. Tulis program untuk arduino di software Arduino IDE.
3. Sambungkan arduino dengan laptop
4. Upload program tadi ke arduino
5. Setelah program selesai di upload, jalankan simulasi rangkaian
4. Upload program tadi ke arduino
5. Setelah program selesai di upload, jalankan simulasi rangkaian
6. Periksa apakah rangkaian sensuai dengan yang diharapkan, jika tidak, perbaiki rangkaian dan/atau program yang terkait
2. Hardware dan Diagram Blok
[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Prinsip Kerja :
Rangkaian percobaan 3: Timer Arduino. Saat program dijalankan, pin-pin yang terhubung ke segmen-segmen tujuh-segmen dan LED diinisialisasi dalam setup. Selanjutnya, program akan terus berjalan dalam loop utama, di mana setiap iterasi akan membaca status dari empat saklar digital. Jika saklar pertama ditekan, program akan menambahkan nilai counter dan menampilkan digit sesuai dengan nilai counter pada dua digit yang berbeda secara bergantian setiap detik. Jika saklar kedua ditekan, program akan menampilkan digit dari 9 hingga 0 secara berurutan pada salah satu digit tampilan dengan jeda 1 detik. Jika saklar ketiga ditekan, program akan menambah nilai counter dan menampilkan digit sesuai dengan nilai counter pada dua digit yang berbeda, tetapi kali ini digit yang aktif akan berganti setiap dua detik. Terakhir, jika saklar keempat ditekan, program akan menampilkan digit dari 9 hingga 0 secara berurutan pada salah satu digit tampilan dengan jeda 200 milidetik. Untuk menghindari bouncing atau getaran yang mungkin terjadi pada saklar, program menggunakan mekanisme debouncing dengan memeriksa waktu antara dua pembacaan status saklar menggunakan fungsi millis().
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
Listing Program :
#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] = {
{0, 0, 0, 0, 0, 0, 1}, // 0
{1, 0, 0, 1, 1, 1, 1}, // 1
{0, 0, 1, 0, 0, 1, 0}, // 2
{0, 0, 0, 0, 1, 1, 0}, // 3
{1, 0, 0, 1, 1, 0, 0}, // 4
{0, 1, 0, 0, 1, 0, 0}, // 5
{0, 1, 0, 0, 0, 0, 0}, // 6
{0, 0, 0, 1, 1, 1, 1}, // 7
{0, 0, 0, 0, 0, 0, 0}, // 8
{0, 0, 0, 0, 1, 0, 0} // 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. Download File
[Kembali]