Seite 1 von 1

RP2040 USB

Verfasst: 27 Feb 2026, 21:11
von asp
Diese Board ist recht praktisch da es an der USB-Schnittstelle direkt angeschlossen werden kann
ESP32-USB-Servo.jpg
ESP32-USB-Servo.jpg (115.64 KiB) 5 mal betrachtet

Hier der Sketch welcher zwei Servos drehen lässt. Als Sicherheit blinkt die LED wenn ein Serevo in Bewegung ist.

Code: Alles auswählen

#include <Servo.h>

const int LED_GREEN_INTERN = 22;
#define SERVO_PIN1 14
#define SERVO_PIN2 15

Servo Servo1;
Servo Servo2;

unsigned long previousMillis = 0;  // Zeitmarker fürs LED-Blinken
const int blinkInterval = 150;     // Blinkfrequenz in Millisekunden
bool ledState = false;

void setup() {
  pinMode(LED_GREEN_INTERN, OUTPUT);
  analogWrite(LED_GREEN_INTERN, 255); // LED aus (active low)

  Servo1.attach(SERVO_PIN1, 760, 2550);
  Servo2.attach(SERVO_PIN2, 750, 2500);

  Servo1.write(90);
  Servo2.write(90);
}

void loop() {
  // LED-Blinken im Hintergrund
  blinkLedNonBlocking();

  moveServo(Servo1, 35);
  moveServo(Servo2, 55);
}

void moveServo(Servo &servo, int delayTime) {
  analogWrite(LED_GREEN_INTERN, 245);  // LED an (Servo aktiv)

  for (int pos = 0; pos <= 180; pos++) {
    servo.write(pos);
    blinkLedNonBlocking();
    delay(delayTime);
  }

  for (int pos = 180; pos >= 0; pos--) {
    servo.write(pos);
    blinkLedNonBlocking();
    delay(delayTime);
  }

  analogWrite(LED_GREEN_INTERN, 255);  // LED aus (Servo ruht)
  delay(2000);
}

// LED unabhängig vom Servo blinken lassen
void blinkLedNonBlocking() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= blinkInterval) {
    previousMillis = currentMillis;

    ledState = !ledState;  // Zustand wechseln
    analogWrite(LED_GREEN_INTERN, ledState ? 245 : 255);
  }
}


Hier das Programm im Betrieb:
https://www.youtube.com/watch?v=sG3awMO5WaQ