/* * ESP32PWM.h * * Created on: Sep 22, 2018 * Author: hephaestus */ #ifndef LIBRARIES_ESP32SERVO_SRC_ESP32PWM_H_ #define LIBRARIES_ESP32SERVO_SRC_ESP32PWM_H_ #include "esp32-hal-ledc.h" #define NUM_PWM 16 #define PWM_BASE_INDEX 0 #define USABLE_ESP32_PWM (NUM_PWM-PWM_BASE_INDEX) #include #include "Arduino.h" class ESP32PWM { private: void attach(int pin); int pwmChannel = 0; // channel number for this servo bool attachedState = false; int pin; uint8_t resolutionBits; double myFreq; int allocatenext(double freq); static double _ledcSetupTimerFreq(uint8_t chan, double freq, uint8_t bit_num); bool checkFrequencyForSideEffects(double freq); void adjustFrequencyLocal(double freq, double dutyScaled); static double mapf(double x, double in_min, double in_max, double out_min, double out_max) { if(x>in_max) return out_max; if(x=1 && pin <= 21) || //21 (pin == 26) || //1 (pin >= 33 && pin <= 42)) //10 #elif defined(CONFIG_IDF_TARGET_ESP32S3) if ((pin >=1 && pin <= 21) || //20 (pin >= 35 && pin <= 45) || //11 (pin == 47) || (pin == 48)) //2 #elif defined(CONFIG_IDF_TARGET_ESP32C3) if ((pin >=1 && pin <= 10) || //11 (pin >= 18 && pin <= 21)) //4 #else if ((pin == 2) || //1 (pin == 4) || //1 (pin == 5) || //1 ((pin >= 12) && (pin <= 19)) || //8 ((pin >= 21) && (pin <= 23)) || //3 ((pin >= 25) && (pin <= 27)) || //3 (pin == 32) || (pin == 33)) //2 #endif return true; return false; } static int channelsRemaining() { return NUM_PWM - PWMCount; } static boolean DISABLE_DAC; }; ESP32PWM* pwmFactory(int pin); #endif /* LIBRARIES_ESP32SERVO_SRC_ESP32PWM_H_ */