Buzzer SOS Signal (copy) (copy) — 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
const int pinLedMerah   = 13;   // Indikator Alarm SOS
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 mati total
  digitalWrite(pinBuzzer, LOW);
  noTone(pinBuzzer);
}

// 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, responsif terhadap tombol
bool bunyiDanLampu(int durasi) {
  tone(pinBuzzer, frekuensiBuzzer);
  digitalWrite(pinLedMerah, HIGH);
  
  unsigned long mulai = millis();
  while (millis() - mulai < (unsigned long)durasi) {
    cekTombol();
    if (!alarmAktif) {
      noTone(pinBuzzer);               // Matikan buzzer seketika
      digitalWrite(pinLedMerah, LOW);  // Matikan LED merah
      return false; 
    }
  }
  
  noTone(pinBuzzer);
  digitalWrite(pinLedMerah, LOW);
  return true;
}

// Fungsi jeda waktu yang tetap responsif terhadap tombol
bool jedaResponsif(int durasi) {
  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);               // Pastikan buzzer benar-benar diam
    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 (cepat) s.d 400ms (lambat)
    int durasiGaris = durasiTitik * 3;
    int jedaSinyal = durasiTitik;
    int jedaHuruf = durasiTitik * 3;

    // --- S (3 Titik) ---
    for (int i = 0; i < 3; i++) {
      if (!bun

More projects by belvaclairina006