const int sensorPin = A0;
const int buzzerPin = 8;
int prevValue = 0;
unsigned long lastNoteTime = 0;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(A1));
}
void loop() {
// π‘ Baca data dari tanaman
int raw = analogRead(sensorPin);
float voltage = raw * (5.0 / 1023.0);
// π Hitung perubahan dari pembacaan sebelumnya
int delta = abs(raw - prevValue);
prevValue = raw;
// πΏ Jika ada perubahan signifikan (impuls tanaman), kita buat nada
if (delta > random(3, 25)) {
// π΅ Skala pentatonik / etnik / alamiah (C4 - C6)
int scale[] = {261, 293, 329, 392, 440, 523, 587, 659, 784, 880, 987, 1046};
// Nada dipilih dari variasi tegangan
int noteIndex = map(raw, 0, 1023, 0, 10);
int baseFreq = scale[noteIndex];
// Mikro variasi berdasarkan delta β efek βemosiβ
int freq = baseFreq + random(-delta / 5, delta / 5);
// Durasi dipengaruhi delta dan tegangan β semakin tinggi aktivitas, semakin cepat
int dur = map(delta, 0, 200, 150, 800);
dur = constrain(dur, 120, 1200);
// π Mainkan suara (atau biarkan tanaman βdiamβ 1 dari 5 kali)
if (random(0, 100) > 20) {
tone(buzzerPin, freq);
delay(dur);
noTone(buzzerPin);
// π§ͺ Cetak ke Serial dalam format siap konversi ke MIDI
Serial.print("tone(buzzerPin, ");
Serial.print(freq);
Serial.println(");");
Serial.print("delay(");
Serial.print(dur);
Serial.println(");");
Serial.println("noTone(buzzerPin);");
Serial.println();
}
lastNoteTime = millis();
}
// π€ Jika tidak ada impuls selama > 5 detik β tanaman βtidurβ (diam)
if (millis() - lastNoteTime > 5000) {
delay(random(500, 1500)); // jeda panjang β memberi kesan biologis
}
delay(100); // sampling
}