// ----- Listing 8: Rechteck mit passender Amplitude erzeugen
if(edgeDetected){                       // Wenn Flanke detektiert
  edgeDetected=0 ;
  downCount++ ;                         // Flanken zählen
  if(ampl1>ampl2){ ampl2=ampl1 ; }      // Spitzenwert aktualisieren
  if(downCount==downN){                 // downN Flanken detektiert
    downCount=0 ;                       // Zähler neu starten
    ampl3=ampl2 ;                       // Spitzenwert sichern
    ampl2=0 ;                           // neuen Spitzenwert aktualisieren
    if(FlipFlop>0) {                    // FlipFlop toggeln
      FlipFlop=-1 ;
      }
    else{
      FlipFlop=1 ;
      }
    }
  }
float ampl4=IIRdo(lowPass2,0.2*ampl3) ; // Amplitude filtern
out1=ampl4*FlipFlop ;                   // rechteck multiplizieren
out=IIRdo(lowPass3,out1);               // Ausgang filtern
if(out>127){ out=127 ; }                // begrenzen
if(out<-127){ out=-127 ; }
analogWrite(PWMpin1, 128+out);          // Kopfhörer per PWM
analogWrite(PWMpin2, 128-out);
