#ifndef L298N_ESP32_h #define L298N_ESP32_h #include class L298N_ESP32 { private: uint8_t in1Pin; uint8_t in2Pin; uint8_t enPin; uint8_t pwmChannel; uint8_t _speed; uint8_t _min_speed = 0; uint8_t _max_speed = 255; bool _invert = false; void checkWrite(uint8_t value) { if (_speed != value) { _speed = value; analogWrite(enPin, _speed); } } public: L298N_ESP32(uint8_t in1, uint8_t in2, uint8_t en, uint8_t channel = 0) : in1Pin(in1), in2Pin(in2), enPin(en), pwmChannel(channel), _speed(0) {} void begin() { pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); digitalWrite(in1Pin, LOW); digitalWrite(in2Pin, LOW); analogWriteResolution(enPin, 8); analogWriteFrequency(enPin, 2000); checkWrite(0); } void setMin(uint8_t value) { _min_speed = value; } void setMax(uint8_t value) { _max_speed = value; } void invert() { _invert = !_invert; } void forward() { if (!_invert) { digitalWrite(in1Pin, LOW); digitalWrite(in2Pin, HIGH); } else { digitalWrite(in1Pin, HIGH); digitalWrite(in2Pin, LOW); } } void backward() { if (!_invert) { digitalWrite(in1Pin, HIGH); digitalWrite(in2Pin, LOW); } else { digitalWrite(in1Pin, LOW); digitalWrite(in2Pin, HIGH); } } void goMin() { checkWrite(_min_speed); } void goMax() { checkWrite(_max_speed); } void setSpeed(uint8_t speed) { speed = constrain(speed, _min_speed, _max_speed); checkWrite(speed); } // Modified setPercentage function void setPercentage(uint8_t percentage) { percentage = constrain(percentage, 0, 100); uint8_t speed = map(percentage, 0, 100, _min_speed, _max_speed); checkWrite(speed); } void override(uint8_t value) { ledcWrite(pwmChannel, value); } void stop() { digitalWrite(in1Pin, LOW); digitalWrite(in2Pin, LOW); checkWrite(0); } }; #endif