#include <Arduino.h>
// Definieer de PWM-frequentie, het kanaal, en de pin
const int pwmPin = 14; // PWM-uitgangsp pin (bijvoorbeeld GPIO15)
const int pwmChannel = 0;
const int pwmResolution = 8; // 8 bits resolutie (0-255)
const int pwmFrequency = 5000; // PWM frequentie (5 kHz, kan worden aangepast)
const int sinusPeriod = 1000; // Lengte van een periode in milliseconden (1 seconde = 1000 ms)
const float pi = 3.14159265359;
void setup() {
// Zet de PWM-kanalen en -frequenties in
ledcSetup(pwmChannel, pwmFrequency, pwmResolution);
ledcAttachPin(pwmPin, pwmChannel);
Serial.begin(115200); // Seriële communicatie voor debuggen (optioneel)
}
void loop() {
// We willen een sinusgolf creëren met een frequentie van 1 Hz (1 seconde per cyclus)
unsigned long startTime = millis(); // Starttijd voor sinusgolf
for (int t = 0; t < sinusPeriod; t++) {
// Bereken de sinuswaarde voor het moment t in de periode
float sineValue = sin(2 * pi * t / sinusPeriod); // Sinusfunctie (-1 tot +1)
// Omzetten naar een PWM waarde van 0 tot 255 (voor 8-bits resolutie)
int pwmValue = int((sineValue + 1) * 127.5); // Zet de sinuswaarde om naar 0-255
ledcWrite(pwmChannel, pwmValue); // Zet de PWM-output
// Wacht een korte tijd om de sinusgolf gelijkmatig te maken
unsigned long elapsedTime = millis() - startTime;
unsigned long waitTime = (sinusPeriod / 255); // Wachttijd om het volledige bereik te dekken
while (millis() - elapsedTime < waitTime) {
// Wacht voor de volgende stap in de tijd
}
}
}