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;
}
}
`