// ======================================================
// FAST GECKO / CICAK SOUND
// ======================================================
const int buzzerPin = 9;
enum State {
IDLE,
ON_STATE,
OFF_STATE,
PAUSE_STATE
};
State state = IDLE;
unsigned long t = 0;
int clickIndex = 0;
// Jumlah "cek"
const int totalClicks = 8;
// Frekuensi sempit (lebih realistis)
int freqPattern[] = {
3200,
3150,
3180,
3220,
3170,
3190,
3210,
3160
};
// ======================================================
void setup() {
pinMode(buzzerPin, OUTPUT);
randomSeed(analogRead(A0));
}
// ======================================================
void loop() {
suaraCicak();
}
// ======================================================
void suaraCicak() {
unsigned long now = millis();
switch (state) {
// ================= START =================
case IDLE:
clickIndex = 0;
tone(buzzerPin, freqPattern[clickIndex]);
t = now;
state = ON_STATE;
break;
// ================= CLICK ON =================
case ON_STATE:
// ON sangat pendek = karakter "cek"
if (now - t >= 8) {
noTone(buzzerPin);
t = now;
state = OFF_STATE;
}
break;
// ================= CLICK OFF =================
case OFF_STATE:
// OFF pendek juga
if (now - t >= 12) {
clickIndex++;
if (clickIndex < totalClicks) {
tone(buzzerPin, freqPattern[clickIndex]);
t = now;
state = ON_STATE;
} else {
t = now;
state = PAUSE_STATE;
}
}
break;
// ================= PAUSE =================
case PAUSE_STATE:
// jeda antar kelompok suara
if (now - t >= 700) {
state = IDLE;
}
break;
}
}