155 lines
6.5 KiB
C++
155 lines
6.5 KiB
C++
#include "Arduino.h"
|
|
#include <algorithm> //// std::swap
|
|
#include <ESP32Servo.h>
|
|
#include "esp32-hal-ledc.h"
|
|
|
|
#ifndef __CodeRacer_H__
|
|
#define __CodeRacer_H__
|
|
|
|
//----- Taster ------------
|
|
#define H_TASTERPIN 17
|
|
//----- Servo -----
|
|
#define H_SERVOPIN 16 // Pin an dem der Servomotor angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_SERVO_LINKS 145 // Wert um den Servo 45 Grad nach links zu drehen ... der kann je nach Servo anders sein
|
|
#define H_SERVO_MITTE_LINKS 100 // Bis hier geht die Entfernungsmessung im Stand links
|
|
#define H_SERVO_RECHTS 35 // Wert um den Servo 45 Grad nach rechtss zu drehen ... der kann je nach Servo anders sein
|
|
#define H_SERVO_MITTE_RECHTS 80 // Bis hier geht die Entfernungsmessung im Stand rechts
|
|
#define H_SERVO_MITTE 90 // Wert um den Servo in die Mitte zu drehen ... der kann je nach Servo anders sein
|
|
#define H_SERVO_SCHWENK_LINKS 140
|
|
#define H_SERVO_SCHWENK_RECHTS 40
|
|
|
|
#define SERVO_SCHWENK_LI 5
|
|
#define SERVO_SCHWENK_RE -5
|
|
#define SERVO_SCHWENK_MS 10
|
|
|
|
//----- Ultraschallsensor -----
|
|
#define H_US_TRIG 12 // Pin an dem der TRIG Pin des Ultraschallsensor angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_US_ECHO 14 // Pin an dem der ECHO Pin des Ultraschallsensor angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_US_STOP_ABSTAND_CM 5 // Wenn der gemessene Abstand kleiner ist, hält der CodeRacer an
|
|
#define US_MAX_ECHO_TIME_US 6000 // Wenn die Zeit für das Echo länger dauert als diese Zeit, ist der Racer weit genug weg und wir müssen nicht weiter warten.
|
|
|
|
//----- Motoren -----
|
|
#define H_MOTORRE_TEMPO 215 // Geschwindigkeit Motor1 ... ein Wert zwischen 0 und 255
|
|
#define H_MOTORLI_TEMPO 212 // Geschwindigkeit Motor1 ... ein Wert zwischen 0 und 255
|
|
#define H_MOTORRE_SPEED 2 // Pin an dem der SPEED/ENABLE Pin des rechten Motors angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_MOTORRE_FWRD 4 // Pin an dem der FORWÄRTS Pin des rechten Motors angeschlossen ist. Was vorwärts und rückwärts ist, muss probiert und vielleicht umgesteckt werden.'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_MOTORRE_BACK 15 // Pin an dem der RÜCKWÄRTS Pin des rechten Motors angeschlossen ist. Was vorwärts und rückwärts ist, muss probiert und vielleicht umgesteckt werden.'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_MOTORLI_SPEED 21 // Pin an dem der SPEED/ENABLE Pin des linken Motors angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_MOTORLI_FWRD 22 // Pin an dem der FORWÄRTS Pin des linken Motors angeschlossen ist. Was vorwärts und rückwärts ist, muss probiert und vielleicht umgesteckt werden.'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_MOTORLI_BACK 23 // Pin an dem der RÜCKWÄRTS Pin des linken Motors angeschlossen ist. Was vorwärts und rückwärts ist, muss probiert und vielleicht umgesteckt werden.'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_RACER_LINKS_MS 200 // Die Zeit in Millisekunden, die der Racer braucht um sich 45 Grad nach links zu drehen
|
|
#define H_RACER_RECHTS_MS 200 // Die Zeit in Millisekunden, die der Racer braucht um sich 45 Grad nach rechts zu drehen
|
|
|
|
#define MOTORPWM_LINKS 5 // PWM-Kanal für linken Motor
|
|
#define MOTORPWM_RECHTS 6 // PWM-Kanal für rechten Motor
|
|
#define MOTORRE_MAX_TEMPO 244 // Geschwindigkeit Motor1 ... ein Wert zwischen 0 und 255
|
|
#define MOTORLI_MAX_TEMPO 240 // Geschwindigkeit Motor1 ... ein Wert zwischen 0 und 255
|
|
|
|
#define MOTOR_MAX_SPEED_START_MS 10
|
|
|
|
//----- Werte für die LEDs -----
|
|
#define H_LED_VORWAERTS 26 // Pin an dem die VORWÄRTS LED angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_LED_STOP 25 // Pin an dem die STOP LED angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_LED_LINKS 33 // Pin an dem die LINKS LED angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
#define H_LED_RECHTS 27 // Pin an dem die RECHTS LED angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88.
|
|
|
|
#define LED_SWITCH_MS 50
|
|
|
|
static volatile bool coderracer_activ;
|
|
static volatile unsigned long taster_last_pressed_ms;
|
|
|
|
//--- this is as preparation of the class creation
|
|
class CodeRacer {
|
|
|
|
private:
|
|
int _taster_pin;
|
|
int _servopin;
|
|
int _us_trigger_pin;
|
|
int _us_echo_pin;
|
|
int _motor_links_frwd_pin;
|
|
int _motor_links_back_pin;
|
|
int _motor_links_enable_pin;
|
|
int _motor_rechts_frwd_pin;
|
|
int _motor_rechts_back_pin;
|
|
int _motor_rechts_enable_pin;
|
|
int _led_frwd_pin;
|
|
int _led_stop_pin;
|
|
int _led_links_pin;
|
|
int _led_rechts_pin;
|
|
|
|
int _servo_mitte;
|
|
int _servo_links;
|
|
int _servo_rechts;
|
|
int _schwenk_links;
|
|
int _schwenk_rechts;
|
|
|
|
int _schwenk_position;
|
|
int _schwenk_richtung;
|
|
long _schwenk_millis;
|
|
|
|
int _motor_links_tempo;
|
|
int _motor_rechts_tempo;
|
|
int _drehung_links_ms;
|
|
int _drehung_rechts_ms;
|
|
|
|
bool _drive_forward;
|
|
long _drive_forward_ms;
|
|
bool _drive_normal_forward;
|
|
bool _schwenk;
|
|
|
|
long _min_abstand_cm;
|
|
|
|
|
|
static void set_taster_state();
|
|
|
|
Servo* _servo;
|
|
Servo* _servo_dummy;
|
|
|
|
void analog_write(int pin, int speed);
|
|
int _coderracer_activ;
|
|
|
|
long abstand_messen_intern();
|
|
|
|
long _last_ledswitch_ms;
|
|
int _led_count;
|
|
int _last_led_on;
|
|
|
|
long _servo_look_around_ms;
|
|
|
|
public:
|
|
|
|
|
|
CodeRacer();
|
|
|
|
CodeRacer(int tasterpin, int servopin,
|
|
int us_trigger_pin, int us_echo_pin,
|
|
int motor_links_frwd_pin, int motor_links_back_pin, int motor_links_enable_pin,
|
|
int motor_rechts_frwd_pin, int motor_rechts_back_pin, int motor_rechts_enable_pin,
|
|
int led_frwd, int led_stop, int led_links, int led_rechts
|
|
);
|
|
|
|
|
|
void begin();
|
|
|
|
void servo_einstellungen(int winkel_mitte, int winkel_links, int winkel_rechts, int schwenk_links, int schwenk_rechts);
|
|
void motor_einstellungen(int motor_links_tempo, int motor_rechts_tempo, int drehung_links_ms, int drehung_rechts_ms);
|
|
|
|
void anhalten();
|
|
void normal_tempo();
|
|
void vorwaerts();
|
|
void rueckwaerts();
|
|
void links();
|
|
void rechts();
|
|
void servo_rechts();
|
|
void servo_links();
|
|
void servo_mitte();
|
|
long abstand_messen();
|
|
void servo_schwenk();
|
|
void knight_rider();
|
|
bool start_stop();
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|