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);
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK