Tugas Pendahuluan 2




1. Foto Hardware dan Diagram Blok [Kembali]

        1. Arduino Uno



        2. Dip switch




        3. 7 segment 2 digit


        4. Resistor




Diagram Blok:



2. Prosedur Percobaan [Kembali]

  • Rangkai semua komponen 
  • Buat program di aplikasi arduino IDE
  • Setelah selesai masukkan program ke arduino 
  • Jalankan program pada simulasi dan cobakan dengan modul


Prinsip Kerja

Pada rangkaian ini menggunakan komponen antara lain yaitu mikrokontroler (ATMEGA328P-PU), dip switch, resistor, dan display 7 segment.

Mikrokontroler ATMEGA328P-PU adalah inti rangkaian, yang mengelola pengoperasian dip switch dan display 7 segment. Dip switch terhubung ke mikrokontroler melalui pin input analog pada arduino yaitu pin A0 - A4, sedangkan 7 segment terhubung ke pin output arduino  yaitu pin 4-13, dimana d1 & d2 terpasang resistor lalu terhubung ke pin 4 & 5, serta pin A hingga DP pada display terhubung secara berurutan dari 6-13. pin D1 dan D2 berperan sebagai display satuan dan puluhan, dan pin A-DP berperan sebagai LED dalam display yang berfungsi dalam membentuk karakter yang diinginkan.

Ketika total ada 2 push button yang ditekan, pin input yang terpasang di Arduino mendeteksi perubahan tegangan dan mengirimkan sinyal ke mikrokontroler. Mikrokontroler kemudian mengaktifkan pin output untuk menjalankan program dengan menghidupkan display 7 segment dan mulai menghitung mundur dari 15 hingga 0.


4. Flowchart dan Listing Program [Kembali]




Listing Program:

// Mendefinisikan nomor pin untuk segmen-segmen a sampai g dan titik desimal (dp) pada display 7-segmen #define a 6 #define b 7 #define c 8 #define d 9 #define e 10 #define f 11 #define g 12 #define dp 13 // Mendefinisikan nomor pin untuk dua digit (D1 dan D2) pada display 7-segmen #define D1 4 #define D2 5 // Mendefinisikan nomor pin untuk empat tombol switch (Dsw1 sampai Dsw4) #define Dsw1 A0 #define Dsw2 A1 #define Dsw3 A2 #define Dsw4 A3 // Inisialisasi array dengan nomor pin segmen-segmen untuk memudahkan kontrol segmen int segments[] = {a, b, c, d, e, f, g}; // Membuat array dua dimensi untuk menentukan pola yang dinyalakan (1) atau dimatikan (0) untuk masing-masing angka 0-9, dp, dan kondisi kosong byte digitPatterns[16][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 {0, 0, 0, 0, 0, 0, 1}, // dp (titik desimal) {0, 0, 0, 0, 0, 0, 0}, // kondisi kosong }; void setup() { // Mengatur pin-pin segmen sebagai OUTPUT for (int i = 0; i < 7; i++) { pinMode(segments[i], OUTPUT); } // Mengatur pin dp dan digit sebagai OUTPUT pinMode(dp, OUTPUT); pinMode(D1, OUTPUT); pinMode(D2, OUTPUT); // Mengatur pin-pin switch sebagai INPUT_PULLUP (menggunakan resistor pull-up internal) pinMode(Dsw1, INPUT_PULLUP); pinMode(Dsw2, INPUT_PULLUP); pinMode(Dsw3, INPUT_PULLUP); pinMode(Dsw4, INPUT_PULLUP); // Memulai komunikasi serial pada baud rate 9600 untuk debugging Serial.begin(9600); } void displayDigit(int digit, int digitPosition) { // Menyalakan segmen-segmen berdasarkan pola digit yang diinginkan for (int i = 0; i < 7; i++) { digitalWrite(segments[i], digitPatterns[digit][i]); } // Mengaktifkan digit yang sesuai berdasarkan posisi yang diinginkan if (digitPosition == D1) { digitalWrite(D1, HIGH); // Aktifkan digit 1 digitalWrite(D2, LOW); // Pastikan digit 2 non-aktif } else if (digitPosition == D2) { digitalWrite(D1, LOW); // Pastikan digit 1 non-aktif digitalWrite(D2, HIGH); // Aktifkan digit 2 } } void displayNumber(int number) { // Fungsi untuk menampilkan angka pada display 7-segmen if (number < 10) { // Jika angka kurang dari 10, tampilkan hanya pada digit pertama digitalWrite(D1, HIGH); digitalWrite(D2, LOW); displayDigit(0, D2); // Menampilkan angka 0 pada digit kedua displayDigit(number, D1); // Menampilkan angka pada digit pertama } else { // Jika angka 10 atau lebih, pecah menjadi dua digit dan tampilkan secara bergantian int tensDigit = number / 10; // Digit puluhan int unitsDigit = number % 10; // Digit satuan displayDigit(tensDigit, D2); // Tampilkan digit puluhan pada digit kedua delay(200); // Tunda untuk visibility displayDigit(unitsDigit, D1); // Tampilkan digit satuan pada digit pertama } delay(1000); // Tunda untuk memastikan angka terlihat dengan jelas } void loop() { // Membaca status dari tombol-tombol dan menentukan apakah tombol ditekan (LOW karena menggunakan INPUT_PULLUP) bool sw1 = digitalRead(Dsw1) == LOW; bool sw2 = digitalRead(Dsw2) == LOW; bool sw3 = digitalRead(Dsw3) == LOW; bool sw4 = digitalRead(Dsw4) == LOW; // Menghitung jumlah tombol yang ditekan int pressedCount = sw1 + sw2 + sw3 + sw4; // Variabel untuk menyimpan waktu terakhir tombol ditekan dan counter untuk angka yang ditampilkan static unsigned long lastTime = 0; static int count = 15; if (pressedCount == 2) { // Jika ada dua tombol yang ditekan secara bersamaan, kurangi nilai counter dan tampilkan angka if (millis() - lastTime > 1000) { // Menggunakan debounce time 1 detik lastTime = millis(); if (count >= 10) { // Jika counter >= 10, gunakan fungsi displayNumber untuk menampilkan angka displayNumber(count); } else { // Jika counter < 10, cukup gunakan displayDigit untuk menampilkan angka pada digit pertama displayDigit(0, D2); // Menampilkan 0 pada digit kedua sebagai placeholder displayDigit(count, D1); // Menampilkan angka pada digit pertama delay(1000); // Tunda untuk visibility } count--; if (count < 0) { count = 15; // Reset counter ke 15 setelah mencapai 0 } } } else { count = 15; // Reset counter jika tidak ada dua tombol yang ditekan secara bersamaan } }


5. Kondisi [Kembali]

    Percobaan 3 Kondisi 2 : "ketika 2 switch aktif, 7-Segment menghitung mundur dari 15"









Posting Komentar

0 Komentar