const int dacPin = 25; // Pin DAC untuk output simulasi
const int sampleRate = 8000; // Sampling rate dalam Hz
float feedbackGain = 1.02; // Gain feedback (0.0 hingga 1.0)
float systemGain = 0.8; // Gain sistem utama
float delayBuffer[100]; // Buffer untuk meniru delay dalam sistem
int delayIndex = 0; // Indeks untuk buffer delay
const int delayLength = 100; // Panjang delay dalam sampel (misal, 50 sampel)
void setup() {
Serial.begin(115200);
// Inisialisasi buffer delay dengan nilai nol
for (int i = 0; i < delayLength; i++) {
delayBuffer[i] = 0.0;
}
}
void loop() {
// Sinyal input (contoh sinusoidal)
float inputSignal = sin(2 * PI * 1.0 * millis() / 1000.0); // 440 Hz sinusoidal
// Ambil sinyal feedback dari buffer delay
float feedbackSignal = delayBuffer[delayIndex];
// Hitung sinyal output dengan feedback
float outputSignal = systemGain * inputSignal + feedbackGain * feedbackSignal;
Serial.print(inputSignal*1000);
Serial.print(' ');
Serial.print(feedbackSignal*1000);
Serial.print(' ');
Serial.print(outputSignal*1000);
Serial.println();
// Simpan sinyal output ke buffer delay
delayBuffer[delayIndex] = outputSignal;
// Perbarui indeks buffer delay
delayIndex = (delayIndex + 1) % delayLength;
// Konversi sinyal ke nilai DAC (0-255) dan kirim ke DAC
int dacValue = (int)((outputSignal + 1.0) * 127.5); // Normalisasi ke 0-255
dacWrite(dacPin, dacValue);
// Tunggu untuk mencapai sampling rate
delayMicroseconds(1000000 / sampleRate);
}