139 lines
6.1 KiB
C
139 lines
6.1 KiB
C
|
#include "Arduino.h"
|
|||
|
#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 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<52>RTS Pin des rechten Motors angeschlossen ist. Was vorw<72>rts und r<>ckw<6B>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<4B>RTS Pin des rechten Motors angeschlossen ist. Was vorw<72>rts und r<>ckw<6B>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<52>RTS Pin des linken Motors angeschlossen ist. Was vorw<72>rts und r<>ckw<6B>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<4B>RTS Pin des linken Motors angeschlossen ist. Was vorw<72>rts und r<>ckw<6B>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<52>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
|