//copyright Adrian.oech
// Pin-Zuweisungen
#define LED_PIN 25  // Pin für die LED

const float pi = 3.14159265;
const int brightnessMax = 255; // Maximale Helligkeit

void setup() {
  // LED-Pin als Ausgang setzen
  pinMode(LED_PIN, OUTPUT);

  // Startnachricht
  Serial.begin(115200);
  Serial.println("LED Sinus-Blinken gestartet (ohne PWM-Funktionen)!");
}

void loop() {
  // Sinus-Animation für die LED-Helligkeit
  for (int angle = 0; angle <= 360; angle++) {
    // Berechne den Sinuswert (zwischen -1 und 1) und skaliere ihn auf 0-255
    float brightness = (sin(angle * pi / 180) + 1) / 2 * brightnessMax;

    // Simuliere PWM durch schnelles Ein- und Ausschalten der LED
    analogWriteSim(LED_PIN, (int)brightness);

    // Ausgabe im seriellen Monitor
    Serial.print("Winkel: ");
    Serial.print(angle);
    Serial.print(" -> Helligkeit: ");
    Serial.println((int)brightness);

    // Kurze Verzögerung für den glatten Übergang
    delay(10);
  }
}

// Funktion zur Simulation von analogWrite ohne ESP32-spezifische Funktionen
void analogWriteSim(int pin, int value) {
  int dutyCycle = map(value, 0, 255, 0, 1000); // Skaliere auf eine Periode von 1000 µs
  int offTime = 1000 - dutyCycle;

  // LED für "on"-Zeit einschalten
  digitalWrite(pin, HIGH);
  delayMicroseconds(dutyCycle);

  // LED für "off"-Zeit ausschalten
  digitalWrite(pin, LOW);
  delayMicroseconds(offTime);
}
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
led1:A
led1:C
r1:1
r1:2