RP2040 USB

ESP32, CH32V003, RP2040
Antworten
Benutzeravatar
asp
Site Admin
Beiträge: 111
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

RP2040 USB

Beitrag 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) 3 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
Antworten