Buzzer SOS Signal bel — Arduino Uno simulation

Proyek buzzer yang memainkan pola Morse SOS menggunakan tone()

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by belvaclairina006.

Components

Sketch code

// --- Konfigurasi Pin ---
const int pinTombol     = 2;    // Push Button
const int pinBuzzer     = 8;    // Buzzer
const int pinLedHijau   = 12;   // Indikator Standby (Hijau)
const int pinLedMerah   = 13;   // Indikator Alarm SOS (Merah)
const int pinPotensio   = A0;   // Potensiometer Pengatur Kecepatan

// --- Variabel Status & Debounce ---
bool alarmAktif = false;
int statusTombolTerakhir = HIGH;
unsigned long waktuDebounceTerakhir = 0;
const unsigned long jedaDebounce = 50;

const int frekuensiBuzzer = 1000; // Frekuensi suara buzzer (Hz)

void setup() {
  pinMode(pinBuzzer, OUTPUT);
  pinMode(pinLedMerah, OUTPUT);
  pinMode(pinLedHijau, OUTPUT);
  
  // Menggunakan internal pull-up: tombol aktif saat bernilai LOW
  pinMode(pinTombol, INPUT_PULLUP);
  
  // Pastikan kondisi awal: Buzzer mati, LED hijau menyala
  digitalWrite(pinBuzzer, LOW);
  noTone(pinBuzzer);
  digitalWrite(pinLedHijau, HIGH);
  digitalWrite(pinLedMerah, LOW);
}

// Fungsi debounce tombol tanpa menghentikan program (non-blocking)
void cekTombol() {
  int bacaan = digitalRead(pinTombol);
  
  if (bacaan != statusTombolTerakhir) {
    waktuDebounceTerakhir = millis();
  }
  
  if ((millis() - waktuDebounceTerakhir) > jedaDebounce) {
    static int statusTombolSekarang = HIGH;
    if (bacaan != statusTombolSekarang) {
      statusTombolSekarang = bacaan;
      // Saat tombol ditekan (menghubungkan ke GND)
      if (statusTombolSekarang == LOW) {
        alarmAktif = !alarmAktif; // Toggle status ON/OFF
      }
    }
  }
  
  statusTombolTerakhir = bacaan;
}

// Fungsi menyalakan buzzer DAN LED merah secara bersamaan
bool bunyiDanLampu(int durasi) {
  tone(pinBuzzer, frekuensiBuzzer); // Buzzer BERBUNYI di sini
  digitalWrite(pinLedMerah, HIGH);  // LED Merah Menyala
  
  unsigned long mulai = millis();
  while (millis() - mulai < (unsigned long)durasi) {
    cekTombol();
    if (!alarmAktif) {
      noTone(pinBuzzer);               
      digitalWrite(pinLedMerah, LOW);  
      return false; 
    }
  }
  
  noTone(pinBuzzer);
  digitalWrite(pinLedMerah, LOW);
  return true;
}

// Fungsi jeda waktu (hening/mati) antar kedipan SOS yang tetap responsif terhadap tombol
bool jedaResponsif(int durasi) {
  noTone(pinBuzzer);                 // Pastikan buzzer mati saat jeda
  unsigned long mulai = millis();
  while (millis() - mulai < (unsigned long)durasi) {
    cekTombol();
    if (!alarmAktif) return false;
  }
  return true;
}

void loop() {
  cekTombol();

  if (!alarmAktif) {
    // --- MODE STANDBY ---
    noTone(pinBuzzer);               // Buzzer dipastikan MATI
    digitalWrite(pinLedHijau, HIGH); // LED Hijau Menyala (Siaga)
    digitalWrite(pinLedMerah, LOW);  // LED Merah Padam
  } else {
    // --- MODE ALARM AKTIF (SOS) ---
    digitalWrite(pinLedHijau, LOW);  // LED Hijau Padam

    // Baca potensiometer untuk mengatur kecepatan ritme SOS
    int nilaiPot = analogRead(pinPotensio);
    int durasiTitik = map(nilaiPot, 0, 1023, 80, 400); // 80ms s.d 400ms
    int dur

More projects by belvaclairina006