diff --git a/example/example/example.ino b/example/example/example.ino new file mode 100644 index 0000000..101f2a9 --- /dev/null +++ b/example/example/example.ino @@ -0,0 +1,16 @@ +#include + +Dezibot dezibot = Dezibot(); + +void setup() { + dezibot.begin(); + //dezibot.infraredLight.front.turnOn(); + //dezibot.infraredLight.bottom.turnOn(); +} + +void loop() { + dezibot.infraredLight.bottom.turnOn(); + delay(1000); + dezibot.infraredLight.bottom.turnOff(); + delay(1000); +} diff --git a/src/Dezibot.cpp b/src/Dezibot.cpp index 54295e0..bfbeb58 100644 --- a/src/Dezibot.cpp +++ b/src/Dezibot.cpp @@ -11,12 +11,17 @@ #include "Dezibot.h" +#include +#include + Dezibot::Dezibot():multiColorLight(),motionDetection(){ -}; + +#define GPIO_LED 48 void Dezibot::begin(void) { + infraredLight.begin(); motion.begin(); multiColorLight.begin(); lightDetection.begin(); diff --git a/src/Dezibot.h b/src/Dezibot.h index 74c6542..6f047de 100644 --- a/src/Dezibot.h +++ b/src/Dezibot.h @@ -16,6 +16,7 @@ #include "colorDetection/ColorDetection.h" #include "multiColorLight/MultiColorLight.h" #include "motionDetection/MotionDetection.h" +#include "infraredLight/InfraredLight.h" class Dezibot { @@ -28,7 +29,7 @@ public: ColorDetection colorDetection; MultiColorLight multiColorLight; MotionDetection motionDetection; - + InfraredLight infraredLight; void begin(void); /* Display display diff --git a/src/infraredLight/InfraredLED.cpp b/src/infraredLight/InfraredLED.cpp new file mode 100644 index 0000000..60ee6e7 --- /dev/null +++ b/src/infraredLight/InfraredLED.cpp @@ -0,0 +1,59 @@ +#include "InfraredLight.h" + +#define pwmSpeedMode LEDC_LOW_SPEED_MODE +#define fooPin 13 +#define footimer LEDC_TIMER_0 +#define foochannel LEDC_CHANNEL_0 +InfraredLED::InfraredLED(uint8_t pin,ledc_timer_t timer, ledc_channel_t channel){ + this->ledPin = pin; + this->timer = timer; + this->channel = channel; +}; + +void InfraredLED::begin(void){ + //we want to change frequency instead of + pwmTimer = ledc_timer_config_t{ + .speed_mode = pwmSpeedMode, + .duty_resolution = LEDC_TIMER_10_BIT, + .timer_num = this->timer, + .freq_hz = 1, + .clk_cfg = LEDC_AUTO_CLK + }; + ledc_timer_config(&pwmTimer); + + pwmChannel = ledc_channel_config_t{ + .gpio_num = this->ledPin, + .speed_mode =pwmSpeedMode, + .channel = this->channel, + .intr_type = LEDC_INTR_DISABLE, + .timer_sel = this->timer, + .duty = 0, + .hpoint = 0 + }; + ledc_channel_config(&pwmChannel); +}; + +void InfraredLED::turnOn(void){ + InfraredLED::setState(true); +}; + +void InfraredLED::turnOff(void){ + InfraredLED::setState(false); +}; + +void InfraredLED::setState(bool state){ + ledc_set_freq(pwmSpeedMode,timer,1); + if (state) { + ledc_set_duty(pwmSpeedMode,channel,1023); + } else { + ledc_set_duty(pwmSpeedMode,channel,0); + } + ledc_update_duty(pwmSpeedMode,channel); + +}; + +void InfraredLED::sendFrequency(uint16_t frequency){ + ledc_set_freq(pwmSpeedMode,timer,frequency); + ledc_set_duty(pwmSpeedMode,channel,512); + ledc_update_duty(pwmSpeedMode,channel); +}; \ No newline at end of file diff --git a/src/infraredLight/InfraredLight.cpp b/src/infraredLight/InfraredLight.cpp new file mode 100644 index 0000000..d61b7e7 --- /dev/null +++ b/src/infraredLight/InfraredLight.cpp @@ -0,0 +1,6 @@ +#include "InfraredLight.h" + +void InfraredLight::begin(void){ + bottom.begin(); + front.begin(); +} \ No newline at end of file diff --git a/src/infraredLight/InfraredLight.h b/src/infraredLight/InfraredLight.h new file mode 100644 index 0000000..d13390f --- /dev/null +++ b/src/infraredLight/InfraredLight.h @@ -0,0 +1,73 @@ +/** + * @file InfraredLight.h + * @author Hans Haupt (hans.haupt@dezibot.de) + * @brief Provides basic controls for the infrared LEDs of the robot. + * @version 0.1 + * @date 2024-04-27 + * + * @copyright Copyright (c) 2024 + * + */ +#ifndef InfraredLight_h +#define InfraredLight_h +#include +#include +#include "driver/ledc.h" + +enum IRLeds{ + Bottom, + Front +}; + +class InfraredLED{ + public: + InfraredLED(uint8_t pin, ledc_timer_t timer, ledc_channel_t channel); + void begin(void); + /** + * @brief enables selected LED + * + * @param led + */ + void turnOn(void); + /** + * @brief disables selected LED + * + * @param led + */ + void turnOff(void); + /** + * @brief changes state of selected LED depending on the state + * + * @param led which led will be affected + * @param state true if led should be turned on, else false + */ + void setState(bool state); + /** + * @brief starts flashing the IRLed with a specific frequency + * Won't stop automatically, must be stopped by calling any other IR-Method + * + * @param frequency + */ + void sendFrequency(uint16_t frequency); + protected: + uint8_t ledPin; + ledc_timer_t timer; + ledc_channel_t channel; + ledc_timer_config_t pwmTimer; + ledc_channel_config_t pwmChannel; +}; + +class InfraredLight{ +public: + //Do something for correct resource sharing + InfraredLED bottom = InfraredLED(IRBottomPin,LEDC_TIMER_0,LEDC_CHANNEL_0); + InfraredLED front = InfraredLED(IRFrontPin,LEDC_TIMER_1,LEDC_CHANNEL_1); + void begin(void); + +protected: + static const uint8_t IRFrontPin = 14; + static const uint8_t IRBottomPin = 13; +}; + + +#endif //InfraredLight_h \ No newline at end of file