NIM : 2110951004

.

Senin, 25 Maret 2024

M2_TP 2_Prak UpUc




1. Prosedur
[Kembali]
  1. Rangkai seluruh komponen alat dan bahan yang diperlukan sesuai dengan kondisi percobaan yang dipilih.
  2. Buat program arduino pada aplikasi Arduino IDE sesuai dengan kondisi percobaan. Pastikan aplikasi Arduino IDE sudah mendownload library yang dibutuhkan dan sudah memilih board arduino yang sesuai.
  3. Verifikasi atau upload program pada arduino. 
  4. Jalankan atau uji coba rangkaian yang telah dibuat sesuai dengan kondisi.
  5. Perhatikan rangkaian dan output apakah sesuai dengan kondisi.
  6. Rangkaian telah selesai dibuat.
2. Hardware dan Diagram Blok [Kembali]
    a). Hardware
1. Arduino Uno




2. Dip Switch




3. 7 Segment 2 Digit



4. Resistor

b). Diagram Blok


3. Rangkaian Simulasi dan Prinsip kerja [Kembali]
    a). Rangkaian Simulasi

    b). Prinsip kerja
Program di atas merupakan program untuk mengontrol display tujuh segmen dengan menggunakan Arduino. Program ini menggunakan beberapa konstanta `#define` untuk mendefinisikan pin yang digunakan untuk mengontrol segmen-segmen tujuh segmen dan digit pada display. Selain itu, program juga mendeklarasikan beberapa variabel boolean untuk menyimpan status tombol (ditekan atau tidak), sebuah array `segments` yang berisi pin-piin yang mengontrol segmen tujuh segmen, dan sebuah array dua dimensi `digitPatterns` yang berisi pola-pola untuk menampilkan angka dari 0 hingga 9 pada display tujuh segmen.

Pada bagian `setup()`, program melakukan inisialisasi pin input dan output yang akan digunakan. Kemudian, terdapat fungsi `number(int display)` yang digunakan untuk menampilkan angka pada display tujuh segmen.

Dalam program tersebut, kondisi pull-up terkait dengan penggunaan input tombol (switch). Pada bagian setup(), terlihat bahwa pin untuk membaca tombol-tombol tersebut diinisialisasi dengan mode INPUT_PULLUP,

Kondisi "pull-up" pada switch adalah ketika resistor "pull-up" dihubungkan antara pin switch dan tegangan referensi (biasanya Vcc atau tegangan positif). Dalam kondisi ini, switch akan terhubung ke ground saat ditekan, dan resistor "pull-up" akan menarik pin ke tegangan tinggi (Vcc) saat switch tidak ditekan. Penerapan resistor "pull-up" pada switch sering digunakan dalam mikrokontroler untuk mencegah floating atau nilai tidak pasti saat switch tidak ditekan. Dengan resistor "pull-up", pin mikrokontroler akan selalu memiliki nilai logika yang pasti (biasanya HIGH) ketika switch tidak ditekan. Saat switch ditekan, pin akan terhubung langsung ke ground, menghasilkan nilai logika yang berlawanan (biasanya LOW). Ini memudahkan dalam deteksi kondisi switch ditekan atau tidak ditekan dalam program.

Pada bagian `loop()`, program membaca status dari empat tombol (switch) dan mengatur tampilan pada display tujuh segmen berdasarkan kondisi tombol yang ditekan. Jika tombol sw1 ditekan, program akan menambahkan angka yang ditampilkan pada display secara berurutan setiap detik. Jika tombol sw2 ditekan, program akan menampilkan angka dari 9 hingga 0 pada display dengan interval satu detik untuk setiap angka. Sedangkan jika tombol sw3, sw1, dan sw2 ditekan bersamaan, program akan menambahkan angka yang ditampilkan pada display secara berurutan setiap detik dengan cara yang mirip dengan saat hanya tombol sw1 yang ditekan, namun dengan penambahan jumlah angka maksimal hingga 10.

4. Flowchart dan Listing Program [Kembali]

    a). Flowchart

    b). 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 a 6 hingga #define dp 13 Mendefinisikan pin yang digunakan untuk mengontrol masing-masing segmen tujuh segmen.

#define D1 4
#define D2 5
//Mendefinisikan pin yang digunakan untuk mengontrol digit pertama (D1) dan digit kedua (D2) pada display tujuh segmen.

#define Dsw1 A0
#define Dsw2 A1
#define Dsw3 A2
#define Dsw4 A3
//Mendefinisikan pin yang digunakan untuk membaca input dari tombol (switch).

bool sw1,sw2,sw3,sw4; //Mendeklarasikan variabel boolean untuk menyimpan status tombol (ditekan atau tidak).
int segments[] = {a, b, c, d, e, f, g}; //Mendeklarasikan array segments yang berisi pin-piin yang mengontrol segmen tujuh segmen.
byte digitPatterns[10][7] = { //mendeklarasikan array dua dimensi
 {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() { //inisialisasi pin input dan output
 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) { //menampilkan angka pada display tujuh segmen
 if (display >= 0 && display <= 9) {
 for (int i = 0; i < 7; i++) {
 digitalWrite(segments[i], digitPatterns[display][i]);
 }
 }
}
void loop() { //mengatur tampilan pada display 7-segment
  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
      }
    }
  } else if (sw3 == LOW && sw1 == LOW && sw2 == LOW) { // Kondisi ketika ketiga switch aktif
    if (millis() - lastTime > 1000) { // Debouncing
      lastTime = millis();
      count++;
      if (count > 10) {
        count = 0;
      }
      if (digit == 1) {
        digitalWrite(D2, LOW);
        digitalWrite(D1, HIGH);
        number(count);
        digit = 2;
      } else {
        digitalWrite(D2, HIGH);
        digitalWrite(D1, LOW);
        number(count);
        digit = 1;
      }
    }
  }
}

5. Kondisi [Kembali]
    Percobaan 3 Kondisi 3 :
ketika 3 switch aktif 7-segment menghitung maju hingga 10

6. Video Simulasi [Kembali]

7. Download File [Kembali]
File Rangkaian  File HTML
Share:

0 komentar:

Posting Komentar

Blogger news

Blogger templates