library/libraries/CodeRacer/CodeRacer.h
2018-11-12 13:09:33 +01:00

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