Servo geht bei sensor und motor zeitgleich nicht

Hallo,
ich benutze zurzeit ein esp32 welches ich über Arduino steuern lasse. da ich jetzt 2 Motoren und 2 Sensoren am auto habe bewegt sich der servo nichtmehr. weiß jemand warum? ich benutze noch eine Nebendatei die mit eingebunden ist nämlich PWM.h . der code dafür ist unterm Haupt code.

`#include <ESP32Servo.h> // Servo-Bibliothek einbinden
#define REMOTEXY_MODE__ESP32CORE_BLE

#include <BLEDevice.h>
#include <RemoteXY.h>
#include "PWM.h"

// RemoteXY connection settings
#define REMOTEXY_BLUETOOTH_NAME "GRAPPLER 07A"

// RemoteXY GUI configuration
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = {
255,3,0,0,0,68,0,19,0,0,0,71,82,73,80,80,76,69,82,0,
16,2,106,200,200,84,1,1,3,0,4,18,94,14,87,43,8,12,69,32,
2,26,4,13,29,82,12,141,7,12,70,32,2,26,10,26,50,57,57,86,
20,24,24,48,204,26,31,79,78,0,31,79,70,70,0
};

struct {
int8_t slider_01; // from -100 to 100
int8_t slider_02; // from -100 to 100
uint8_t pushSwitch_01; // =1 if state is ON, else =0
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)

// Servo-Pin
int servoPin = 21; // GPIO-Pin für Servo

// Motor-Pins
const int Motor_links_A_Pin = 18;
const int Motor_links_B_Pin = 2;
const int Motor_rechts_A_Pin = 19;
const int Motor_rechts_B_Pin = 3;

// Sensor-Pins
const int Sensor_vorne_Pin = 1;
const int Sensor_hinten_Pin = 0;

// Servo-Objekt erstellen
Servo myservo;

void setup() {
// RemoteXY initialisieren
RemoteXY_Init();

// Debugging über die serielle Konsole aktivieren
Serial.begin(115200);

// Servo initialisieren
myservo.setPeriodHertz(50); // Periodendauer (50 Hz für Servos)
myservo.attach(servoPin); // Servo an Pin binden

// Servo-Startposition
myservo.write(0); // Setzt Servo auf 0 Grad
Serial.println("Servo initialisiert auf 0 Grad.");

// Motorpins als Ausgänge definieren
pinMode(Motor_links_A_Pin, OUTPUT);
pinMode(Motor_links_B_Pin, OUTPUT);
pinMode(Motor_rechts_A_Pin, OUTPUT);
pinMode(Motor_rechts_B_Pin, OUTPUT);

// Sensorpins als Eingänge definieren
pinMode(Sensor_vorne_Pin, INPUT);
pinMode(Sensor_hinten_Pin, INPUT);

// Motoren initial auf 0 stellen
analogWrite(Motor_rechts_A_Pin, 0);
analogWrite(Motor_rechts_B_Pin, 0);
analogWrite(Motor_links_A_Pin, 0);
analogWrite(Motor_links_B_Pin, 0);

Serial.println("Setup abgeschlossen.");
}

void loop() {
RemoteXY_Handler(); // RemoteXY-Daten verarbeiten

// Sensorstatus abfragen
bool sensor_vorne_aktiv = digitalRead(Sensor_vorne_Pin) == LOW; // LOW = Linie erkannt
bool sensor_hinten_aktiv = digitalRead(Sensor_hinten_Pin) == LOW; // LOW = Linie erkannt

// Linie vorne erkannt → Rückwärts fahren
if (sensor_vorne_aktiv) {
Serial.println("Linie vorne erkannt! Rückwärts fahren.");
analogWrite(Motor_links_A_Pin, 0); // Stop Vorwärts links
analogWrite(Motor_links_B_Pin, 200); // Rückwärts links
analogWrite(Motor_rechts_A_Pin, 0); // Stop Vorwärts rechts
analogWrite(Motor_rechts_B_Pin, 200); // Rückwärts rechts
return; // Rückwärts fahren, solange Linie erkannt wird
}

// Linie hinten erkannt → Vorwärts fahren
if (sensor_hinten_aktiv) {
Serial.println("Linie hinten erkannt! Vorwärts fahren.");
analogWrite(Motor_links_A_Pin, 200); // Vorwärts links
analogWrite(Motor_links_B_Pin, 0); // Stop Rückwärts links
analogWrite(Motor_rechts_A_Pin, 200); // Vorwärts rechts
analogWrite(Motor_rechts_B_Pin, 0); // Stop Rückwärts rechts
return; // Vorwärts fahren, solange Linie erkannt wird
}

// Servo-Steuerung (Switch 01)
if (RemoteXY.pushSwitch_01 == 1) {
myservo.write(170); // Servo auf 170 Grad
Serial.println("Servo auf 170 Grad gesetzt.");
} else {
myservo.write(0); // Servo auf 0 Grad
Serial.println("Servo auf 0 Grad gesetzt.");
}

// Normales Fahren (wenn keine Linie erkannt wurde)
// Linkes Rad Steuerung basierend auf slider_01
if (RemoteXY.slider_01 > 0) {
analogWrite(Motor_links_A_Pin, map(RemoteXY.slider_01, 0, 100, 0, 255));
analogWrite(Motor_links_B_Pin, 0);
} else if (RemoteXY.slider_01 < 0) {
analogWrite(Motor_links_A_Pin, 0);
analogWrite(Motor_links_B_Pin, map(-RemoteXY.slider_01, 0, 100, 0, 255));
} else {
analogWrite(Motor_links_A_Pin, 0);
analogWrite(Motor_links_B_Pin, 0);
}

// Rechtes Rad Steuerung basierend auf slider_02
if (RemoteXY.slider_02 > 0) {
analogWrite(Motor_rechts_A_Pin, map(RemoteXY.slider_02, 0, 100, 0, 255));
analogWrite(Motor_rechts_B_Pin, 0);
} else if (RemoteXY.slider_02 < 0) {
analogWrite(Motor_rechts_A_Pin, 0);
analogWrite(Motor_rechts_B_Pin, map(-RemoteXY.slider_02, 0, 100, 0, 255));
} else {
analogWrite(Motor_rechts_A_Pin, 0);
analogWrite(Motor_rechts_B_Pin, 0);
}
}

ESP32PWM pwm1;
ESP32PWM pwm2;
ESP32PWM pwm3;
ESP32PWM pwm4;
int freq = 1000;
extern int Motor_links_A_Pin;
extern int Motor_links_B_Pin;
extern int Motor_rechts_A_Pin;
extern const int Motor_rechts_B_Pin;

void PWM_init()
{
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
pwm1.attachPin(Motor_links_A_Pin, freq, 8);
pwm2.attachPin(Motor_links_B_Pin, freq, 8);
pwm3.attachPin(Motor_rechts_A_Pin, freq, 8);
pwm4.attachPin(Motor_rechts_B_Pin, freq, 8);
}

void PWM_analogWrite( int Motor, int speed )
{
// Serial.println(Motor);
// Serial.println(speed);
switch (Motor)
{
case Motor_links_A_Pin:
pwm1.write(speed);
// Serial.print("Speed=");
// Serial.println(speed);
break;
case Motor_links_B_Pin:
pwm2.write(speed);
break;
case Motor_rechts_A_Pin:
pwm3.write(speed);
break;
case Motor_rechts_B_Pin:
pwm4.write(speed);
break;
}
}

`

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Was macht diese Funktion?

Setze Deinen Sketch bitte in Codetags. Wie das geht, steht hier.
Außerdem formatiere den Code bitte ordentlich. Strg+T in der IDE hilft Dir dabei.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Was genau heißt das und welchen ESP32 und welchen Arduino verwendest du ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.