Jumat, 29 Maret 2024

LA 2


Percobaan III

 Timer Arduino

1. Prosedur [Kembali]

  • Rangkailah seperti rangkaian berikut
  • Buka Arduino IDE dan masukan listing program
  • Upload program ke arduino
  • Variasikan tombol yang ditekan dan amati keluarannya pada LCD
Gambar 1. Rangkaian Hardware
 

   1. Arduino Uno

    2. DIP Switch 


    3. LCD


    4. Kabel jumper

    5. Breadboard
    6. Resistor
    7. Seven Segment

Diagram Blok:



Prinsip Kerja :

    Pada percobaan menggunakan komponen berupa arduino uno sebagai kontroler, dip switch sebagai inputan yang terhubung dengan arduino uno menggunakan kabel jumper, arduino uno akan memberikan keluaran berupa angka atau hitung mundur dari 0-9.
Implementasi kontrol sakelar dalam sebuah sistem memerlukan perlakuan khusus untuk mencegah efek bouncing yang dapat mengganggu stabilitas respons. Untuk mengatasi hal ini, penggunaan fungsi millis() sangatlah penting dalam memeriksa waktu terakhir pembacaan sakelar. Dengan memanfaatkan fungsi ini sebagai timer pada program, maka debouncing dapat dilakukan secara tepat, menghindari respons yang tidak stabil akibat bouncing pada tombol (switch). Misalnya, ketika tombol pertama (sw1) ditekan, program akan menambahkan angka pada display digit yang aktif setiap detiknya, dengan pengubahan digit yang bergantian antara D1 dan D2. Begitu juga dengan tombol kedua (sw2) yang, ketika ditekan, akan menampilkan urutan angka secara berurutan dari 9 hingga 0 pada display digit yang aktif. Pengaturan waktu debouncing yang lebih panjang, misalnya 2 detik, dapat diterapkan saat tombol ketiga (sw3) ditekan, sehingga penambahan angka pada display digit yang aktif akan bergantian antara D1 dan D2 dengan waktu debouncing yang lebih panjang. Sementara itu, tombol keempat (sw4) akan menghasilkan tindakan serupa seperti sw2, namun dengan penambahan waktu debouncing 2 detik pula. Dengan pendekatan ini, sistem dapat beroperasi dengan lebih stabil dan responsif terhadap input dari pengguna.

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
        }
    }
}
}

5. Kondisi [Kembali]

    Ketika salah satu switch pada dipswitch aktif maka sevensegment akan menampilkan angka yang berupa count down dari angka 9-0 yang nantinya akan ditampilkan pada dua sevensegment berbeda sesuai dengan switch yang aktif

HTML↠ klik disini
Gambar Rangkaian ↠ klik disini
Video Demo ↠ klik disini
Listing Program ↠ klik disini
Datasheet Arduino↠ klik disini
Datasheet 7-Segment↠ klik disini
Datasheet LCD↠ klik disini
Datasheet DIP Switch↠ klik disini

Tidak ada komentar:

Posting Komentar