LA M2 P3


Percobaan III

1. Prosedur [Kembali]

1. Rangkai rangkaian di proteus sesuai dengan modul
2. Buatlah program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. 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]


Pada rangkaian diatas Dipswitch sebagai input dan sevensegment sebagai output. Ketika salah satu dipswitch aktif maka arduino akan memberi output untuk sevensgemnet melakukan counting dari 0-9. Pada program ini juga digunakan fungsi milis, millis digunakan untuk melakukan debouncing pada pembacaan Dip Switch dengan memberikan jeda waktu tertentu sebelum membaca input tombol lagi. Ini memungkinkan pengguna untuk menekan Dip Switch dengan cepat tanpa menghasilkan bacaan ganda yang tidak diinginkan. 



Flowchart :



Listing Program:
#define a 9
#define b 10
#define c 4
#define d 7
#define e 6
#define f 13
#define g 8
#define dp 5
#define D1 12
#define D2 11
#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




1. Apa itu timer arduino, apa itu millis dan delay, apa perbedaannya dan kenapa dibedakan

Timer Arduino adalah sebuah fungsi atau fitur yang digunakan untuk mengatur waktu atau interval tertentu dalam program. `millis()` adalah fungsi pada Arduino yang mengembalikan jumlah milidetik (1/1000 detik) sejak program dimulai. Fungsi ini sering digunakan untuk mengukur waktu antara dua kejadian atau untuk membuat tugas yang tidak menghentikan eksekusi program utama.`delay()` adalah fungsi pada Arduino yang menghentikan eksekusi program selama jumlah waktu tertentu yang ditentukan dalam milidetik sebelum melanjutkan eksekusi berikutnya. Fungsi ini digunakan untuk membuat penundaan dalam program.

Millis digunakan untuk tugas-tugas yang tidak menghentikan program utama, memungkinkan eksekusi program tetap berjalan, cocok untuk tugas bersamaan atau periodik. Sedangkan, Delay menghentikan eksekusi program langsung selama waktu tertentu, menyebabkan berhenti instruksi sampai penundaan selesai, bisa mengganggu tugas lain. Millis digunakan untuk responsivitas dan menjaga program tetap aktif, sedangkan delay untuk penundaan, namun bisa mengakibatkan program tidak responsif jika terlalu lama, disarankan untuk menghindari delay dalam program kompleks atau yang membutuhkan responsivitas tinggi.

2. Analisa pengaruh penggunaan millis dan delay pada program yg di gunakan

Pada percobaan 3, millis digunakan untuk melakukan debouncing pada pembacaan Dip Switch dengan memberikan jeda waktu tertentu sebelum membaca input tombol lagi. Ini memungkinkan pengguna untuk menekan Dip Switch dengan cepat tanpa menghasilkan bacaan ganda yang tidak diinginkan. Delay, di sisi lain, digunakan untuk membuat jeda waktu sebelum menampilkan perubahan digit pada tujuan tertentu, seperti saat Dip Switch ditekan. Penggunaan delay bisa membuat program terlihat tidak responsif karena program akan berhenti sejenak selama penundaan tersebut. Meskipun delay dapat memberikan efek visual yang diinginkan, penggunaan yang berlebihan bisa menghambat eksekusi program dan merugikan responsifitas keseluruhan sistem.





Tidak ada komentar:

Posting Komentar