/* Simulationsmodell für das blaue ESP32 Demo-Board
 * Ansteuerung eines Modellbau-Servos
 * Anschluß des Servos an Pin 5, rechter 8-polige Buchse.
 * Die Standard-Servos benötigen 5V Versorgungsspannung, die blauen
 * Mikro-Servos laufen auch mit 3,3V.
 */
//#include <Servo.h>

//***** Portpins für Ein-/Ausgänge ***************************************
const int Enc_A = 34, Enc_B = 35, Enc_Taster = 0, NEO_Pin=26;
const int LED_rot = 32, LED_gruen = 33, Taster2 = 2, Taster4 = 4;
const int PWM_Pin = 5;

//***** Objekte aus Bibliotheken anlegen
//Servo myServo;

// ***** Globale Variablen und Definitionen *******************************
#define PWM_Bits 10            // mind. 1000 Werte => 0-1023
#define PWM_Kanal 0          // Kanal 0 bis 15 möglich
#define PWM_Freq 50          // der Servo will 20ms => 50Hz ausgeben
uint16_t Digitalwert;
bool T2_neu, T2_alt, T4_neu, T4_alt;  // für Flankenerkennung
unsigned long nextMillis;

// ***** Initialisierung **************************************************
void setup() {
  Serial.begin(115200);            // Serielle Schnittstelle mit 115200Bit/s
  pinMode(LED_rot, OUTPUT);        // die LEDs beginnen danach
  pinMode(LED_gruen, OUTPUT);      // zu leuchten!
  digitalWrite(LED_rot, HIGH);     // also beide ausschalten
  digitalWrite(LED_gruen, HIGH);
  pinMode(Taster2, INPUT_PULLUP); // Taster brauchen hier den
  pinMode(Taster4, INPUT_PULLUP); // Pullup-Widerstand
  
  // LEDC-PWM initialisieren
  ledcSetup ( PWM_Kanal, PWM_Freq, PWM_Bits );
  ledcAttachPin ( PWM_Pin, PWM_Kanal );
  
  ledcWrite ( PWM_Kanal, 76);
}

// ***** Endlosschleife ***************************************************
void loop() {
 static bool Richtung=true;
  unsigned long currentMillis = millis( );
  if ( currentMillis >= nextMillis ) {
    nextMillis = currentMillis + 100;    // 1x pro Sekunde Messen
    ledcWrite(PWM_Kanal, Digitalwert);

    if (Richtung == true) Digitalwert ++;
    else Digitalwert --;
    
    if (Digitalwert < 51) {
      Serial.println("Richtung links");
      Richtung = true;
    } 
    if (Digitalwert > 102) {
      Serial.println("Richtung rechts");
      Richtung = false;
    }
  }


}

// ***** Eigene Funktionen ************************************************

Taster2
Taster4
LED32
LED33
ESP32 Schulboard mit LEDs und Tastern, I2C-Bus mit Standard-Belegung
SSD1306 Display
WS2812 an Pin26