Sinus via PWM, Metro library

Hallo,

ich versuche mit Hilfe der Metro library mein eigenes PWM Signal zu erzeugen. (Schlussendlich soll ein Sinus via PWM erzeugt werden.)
Dazu mein Versuch:

#include <Metro.h>

#define Speaker 3

Metro active = Metro(250);  //Initialisierung der Timer für PWM
Metro inactive = Metro(500);

void setup() {
  pinMode(Speaker, OUTPUT);
  digitalWrite(Speaker,HIGH);
}

void loop() {
  
   if (active.check() == 1) {  //Falls das active Intervall abgelaufen ist 
      digitalWrite(Speaker,LOW);
      inactive.interval(250);    // Setzt das inactive.Intervall auf 250ms
      active.interval(10000);   // Setzt das active.Intervall auf 10s, damit die obige Bedinung "nie" erfüllt wird
      }

    
       
   if (inactive.check() == 1) { //Falls das inactive.Intervall (das 250ms beträgt) abgelaufen ist
        digitalWrite(Speaker,HIGH);
        active.interval(250);     //Setzt das active.Intervall auf 250ms
        inactive.interval(10000); // Setzt das active.Intervall auf 10s, damit die obige Bedinung "nie" erfüllt wird
        }
      
}

Nach meiner Überlegung sollte so der Pin alle 250ms auf HIGH bzw. LOW gesetzt werden. Er ist aber ständig auf HIGH.
Sieht jemand meinen Fehler?
Wie muss ich die Intervall-Länge setzten, damit es passt?

Gruß

Abgeleitet vom Programmbibliotheksbeispiel blinking.ino könntest Du dies probieren:

#include <Metro.h> //Include Metro library
#define SpeakerPin 13
bool state = HIGH;
Metro speaker = Metro(250);

void setup()
{
  pinMode(SpeakerPin, OUTPUT);
  digitalWrite(SpeakerPin, state);
}

void loop()
{

  if (speaker.check() == 1) { // check if the metro has passed its interval .
    if (state == HIGH) {
      state = LOW;
      speaker.interval(250);
    } else {
      state = HIGH;
      speaker.interval(500);
    }
    digitalWrite(SpeakerPin, state);
  }
}

Kennst Du Teensy 12 Bit Analog Output?