← Back to list

Tugas Digital Output dengan Pola Bunyi & Teknik Multiplexing — Tugas Praktikum IoT #5

Penyelesaian Tugas

Gemariz · 2025-09-28 07:37 · 0 claps · 4.1 min read
#iot #multiplexing #digital-output-module #internet-of-things
Open on Medium ↗
Wiki topics: 📟 · Gadgets & IoT

Tugas Digital Output dengan Pola Bunyi & Teknik Multiplexing — Tugas Praktikum IoT #5

Penyelesaian Tugas

Tugas 1 — Buzzer

Pada tugas ini, kita diberik intruksi tugas seperti berikut.

Kita mulai dengan melakukan penyusunan komponen (masih sama seperti wiring pada praktikum buzzer sebelumnya) yang diperlukan terlebih dahulu.

Setelah melakukan wiring untuk setiap komponen, kita akan membuat kode program yang sesuai dengan intruksi tugas.

const int buzzerPin = 24; 

void setup() {
  pinMode(buzzerPin, OUTPUT);
  digitalWrite(buzzerPin, LOW); // pastikan awalnya OFF (buzzer tidak bunyi)
}

void loop() {
  // mengulang pola 5 kali
  for (int i = 0; i < 5; i++) {
    // 2 bunyi pendek
    for (int j = 0; j < 2; j++) {
      digitalWrite(buzzerPin, HIGH); // buzzer ON
      delay(100);                     // bunyi selama 100 ms
      digitalWrite(buzzerPin, LOW);  // buzzer OFF
      delay(100);                     // jeda antar bunyi 100 ms
    }
    delay(300); // jeda antar pola (agar pola terdengar terpisah)
  }

  // buzzer mati setelah rangkaian 5 pola
  digitalWrite(buzzerPin, LOW);
  delay(2500); // jeda sebelum mengulang seluruh pola (2.5 detik)
}

Pada program diatas mengatur buzzer sebagai digital output yang diberikan dua perulangan, pada perulangan pertama dilakukan 2 bunyi pendek (karna kami merupakan kelompok 2) dengan durasi bunyi 200 ms & jeda 200 ms. Dan pada perulangan kedua dilakukan 5 kali bunyi dari 2 bunyi pendek tadi, dengan durasi jeda 300 ms. Serta diakhiri dengan bunyi panjang dengan durasi 2,5 detik.

Untuk hasil dari bunyi buzzer yang telah di programkan seperti diatas, dapat dilihat dari link berikut : **Hasil Tugas Buzzer**

Tugas 2 — Seven Segment Display

Pada tugas ini, kita diberikan intruksi tugas seperti berikut.

Disini saya memiliki NPM digit terakhir adalah 008.

Kita akan melakukan wiring yang sama ketika praktikum seven segment digital sebelumnya, dengan hasil berikut.

Setelah melakukan wiring untuk setiap komponen, kita akan membuat kode program yang sesuai dengan intruksi tugas. Pada program ini, saya akan melakukan metode multiplexing untuk ketiga angka 008 agar dapat terlihat menyala secara bersamaan.

// Menampilkan angka 0 1 2 3 4 5 di 6 digit 7-seg (multiplexing)
// Sesuaikan pin sesuai modul / board-mu
const int segPins[8]  = {2, 3, 4, 5, 6, 7, 8, 9};        // a, b, c, d, e, f, g, dp
const int digitPins[6] = {10, 11, 12, 13, A0, A1};      // digit0..digit5 (sesuaikan)
                                                        // Asumsi hardware: common anode
                                                        // Pada common anode, untuk menyalakan sebuah segment
                                                        // buat pin segment = LOW, matikan = HIGH

// Pola angka 0..9 pada urutan segPins {a,b,c,d,e,f,g,dp}
// 1 = segment ON (makanya nanti kita keluarkan LOW karena common anode)
byte numbers[10][8] = {
  {1,1,1,1,1,1,0,0}, // 0
  {0,1,1,0,0,0,0,0}, // 1
  {1,1,0,1,1,0,1,0}, // 2
  {1,1,1,1,0,0,1,0}, // 3
  {0,1,1,0,0,1,1,0}, // 4
  {1,0,1,1,0,1,1,0}, // 5
  {1,0,1,1,1,1,1,0}, // 6
  {1,1,1,0,0,0,0,0}, // 7
  {1,1,1,1,1,1,1,0}, // 8
  {1,1,1,1,0,1,1,0}  // 9
};

// Digit yang ingin ditampilkan (isi index angka untuk tiap digit)
int displayDigits[6] = {0, 0, 8};

void setup() {
  // inisialisasi pin segmen sebagai OUTPUT
  for (int i = 0; i < 8; i++) {
    pinMode(segPins[i], OUTPUT);
  }
  // inisialisasi pin digit sebagai OUTPUT
  for (int i = 0; i < 6; i++) {
    pinMode(digitPins[i], OUTPUT);
  }

  // Pastikan semua segmen OFF dan semua digit OFF di awal
  for (int i = 0; i < 8; i++) digitalWrite(segPins[i], HIGH); // OFF (common anode => HIGH)
  for (int i = 0; i < 6; i++) digitalWrite(digitPins[i], HIGH); // matikan semua digit (HIGH = off)
}

// Menampilkan suatu nilai (0..9) pada digit tertentu (0..5)
void showDigit(int value, int digit) {
  // Matikan semua digit dulu (prevent ghosting)
  for (int i = 0; i < 6; i++) digitalWrite(digitPins[i], HIGH);

  // Tuliskan pola segment untuk angka value
  for (int s = 0; s < 8; s++) {
    if (numbers[value][s] == 1) {
      digitalWrite(segPins[s], LOW);  // ON (karena common anode)
    } else {
      digitalWrite(segPins[s], HIGH); // OFF
    }
  }

  // Aktifkan digit yang dipilih
  digitalWrite(digitPins[digit], LOW); // nyalakan digit (common anode => LOW)
  delay(5); // multiplex delay singkat (sekitar 3-5 ms)
  digitalWrite(digitPins[digit], HIGH); // matikan kembali (opsional, mengurangi ghosting)
}

void loop() {
  // Loop semua digit (0..5) untuk menampilkan angka di displayDigits[]
  for (int d = 0; d < 6; d++) {
    int val = displayDigits[d];
    if (val < 0 || val > 9) val = 0; // safety
    showDigit(val, d);
  }
}

Program diatas akan menyimpan pola setiap angka (0–9) dalam array numbers, mengontrol setiap segmen lewat segPins dan memilih digit lewat digitPins, lalu secara bergantian menyalakan pola segmen untuk tiap digit sangat cepat sehingga mata mengira semua digit menyala sekaligus, isi array padadisplayDigits merupakan penentu angka yang akan tampil (008) pada masing-masing digit, dan kode ini digunakan untuk modul common anode (logika ON = LOW).

Dengan hasil sebagai berikut :


메타데이터
post_id
72d3e67a0749
slug
tugas-digital-output-dengan-pola-bunyi-teknik-multiplexing-tugas-praktikum-iot-5-72d3e67a0749
url
https://medium.com/@gemari1012/tugas-digital-output-dengan-pola-bunyi-teknik-multiplexing-tugas-praktikum-iot-5-72d3e67a0749
canonical_url
https://medium.com/@gemari1012/tugas-digital-output-dengan-pola-bunyi-teknik-multiplexing-tugas-praktikum-iot-5-72d3e67a0749
author_url
https://medium.com/@gemari1012
status
ok
fetched_at
2026-07-14 03:07:18