#include "Arduino.h" #include #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 140 // Wert um den Servo 45 Grad nach links zu drehen ... der kann je nach Servo anders sein #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 90 // Wert um den Servo in die Mitte zu drehen ... der kann je nach Servo anders sein #define H_SERVO_SCHWENK_LINKS 135 #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 205 // Geschwindigkeit Motor1 ... ein Wert zwischen 0 und 255 #define H_MOTORLI_TEMPO 200 // 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 240 // 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 27 // Pin an dem die LINKS LED angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88. #define H_LED_RECHTS 33 // Pin an dem die RECHTS LED angeschlossen ist. 'GPIO' muss man weglassen -> also z.B. nicht GPIO88 sondern nur 88. 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; static void set_taster_state(); Servo* _servo; Servo* _servo_dummy; void analog_write(int pin, int speed); int _coderracer_activ; 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 links(); void rechts(); void servo_rechts(); void servo_links(); void servo_mitte(); long abstand_messen(); void servo_schwenk(); bool start_stop(); }; #endif