Create EncoderMotor.cpp. Compiler error on analogWrite using ESP32 build target. Without it the ledc* functions are unavailable. Will pull ESP32 build process over from meterlite.

This commit is contained in:
Matt McWilliams 2024-01-31 23:08:10 -05:00
parent 20d37eb1e6
commit 6321367c97
4 changed files with 58 additions and 15 deletions

View File

@ -1,18 +1,18 @@
#include "ContactPrinter.h" #include "ContactPrinter.h"
ContactPrinter::ContactPrinter () { ContactPrinter::ContactPrinter () {
SetDriveSpeed(drive_speed); SetSpeedDrive(drive_speed);
SetSpeedTakeup(takeup_speed); SetSpeedTakeup(takeup_speed);
} }
void ContactPrinter::Setup () { void ContactPrinter::Setup () {
pinMode(drive_pin, OUTPUT);
pinMode(takeup_picture_pin_cw, OUTPUT); pinMode(takeup_picture_pin_cw, OUTPUT);
pinMode(takeup_picture_pin_ccw, OUTPUT); pinMode(takeup_picture_pin_ccw, OUTPUT);
pinMode(takeup_stock_pin_cw, OUTPUT); pinMode(takeup_stock_pin_cw, OUTPUT);
pinMode(takeup_stock_pin_ccw, OUTPUT); pinMode(takeup_stock_pin_ccw, OUTPUT);
digitalWrite(drive_pin, LOW); drive_motor.Setup();
digitalWrite(takeup_picture_pin_cw, LOW); digitalWrite(takeup_picture_pin_cw, LOW);
digitalWrite(takeup_picture_pin_ccw, LOW); digitalWrite(takeup_picture_pin_ccw, LOW);
digitalWrite(takeup_stock_pin_cw, LOW); digitalWrite(takeup_stock_pin_cw, LOW);
@ -22,11 +22,11 @@ void ContactPrinter::Setup () {
void ContactPrinter::Start () { void ContactPrinter::Start () {
RampTakeup(0, takeup_pwm, takeup_ramp_time); RampTakeup(0, takeup_pwm, takeup_ramp_time);
delay(100); delay(100);
analogWrite(drive_pin, drive_pwm); //drive_motor.Start();
} }
void ContactPrinter::Stop () { void ContactPrinter::Stop () {
analogWrite(drive_pin, 0); //drive_motor.Start();
delay(100); delay(100);
RampTakeup(takeup_pwm, 0, takeup_ramp_time); RampTakeup(takeup_pwm, 0, takeup_ramp_time);
@ -38,8 +38,7 @@ void ContactPrinter::SetSpeedTakeup(float speed) {
} }
void ContactPrinter::SetSpeedDrive(float speed) { void ContactPrinter::SetSpeedDrive(float speed) {
drive_speed = speed; //drive_motor.SetSpeed();
drive_pwm = round(speed * 255);
} }
void ContactPrinter::SetDirectionStock(bool clockwise) { void ContactPrinter::SetDirectionStock(bool clockwise) {

View File

@ -2,21 +2,24 @@
#define CONTACT_PRINTER #define CONTACT_PRINTER
#include <Arduino.h> #include <Arduino.h>
#include "EncoderMotor.h"
class ContactPrinter { class ContactPrinter {
private: private:
EncoderMotor drive_motor;
const uint16_t serial_delay = 5; const uint16_t serial_delay = 5;
const uint16_t baud = 57600; const uint16_t baud = 57600;
const uint8_t drive_pin = 7;
const uint8_t takeup_picture_pin_cw = 8; const uint8_t takeup_picture_pin_cw = 8;
const uint8_t takeup_picture_pin_ccw = 9; const uint8_t takeup_picture_pin_ccw = 9;
const uint8_t takeup_stock_pin_cw = 10; const uint8_t takeup_stock_pin_cw = 10;
const uint8_t takeup_stock_pin_ccw = 11; const uint8_t takeup_stock_pin_ccw = 11;
volatile float drive_speed = 1f; volatile float drive_speed = 1.0; //calculated rpm
volatile float takeup_speed = 1f; volatile float takeup_speed = 1.0; //estimated rpm
volatile uint16_t drive_pwm; volatile uint16_t drive_pwm;
volatile uint16_t takeup_pwm; volatile uint16_t takeup_pwm;
@ -24,6 +27,9 @@ class ContactPrinter {
volatile bool takeup_picture_cw = false; volatile bool takeup_picture_cw = false;
volatile bool takeup_picture_ccw = true; volatile bool takeup_picture_ccw = true;
volatile bool takeup_stock_cw = true;
volatile bool takeup_stock_ccw = true;
volatile uint16_t takeup_ramp_time = 500; volatile uint16_t takeup_ramp_time = 500;
volatile bool running = false; volatile bool running = false;
@ -33,6 +39,7 @@ class ContactPrinter {
ContactPrinter(); ContactPrinter();
void Setup(); void Setup();
void Loop();
void Start(); void Start();
void Stop(); void Stop();
void SetSpeedTakeup(float speed); void SetSpeedTakeup(float speed);

View File

@ -0,0 +1,23 @@
#include "EncoderMotor.h"
EncoderMotor::EncoderMotor () {
};
EncoderMotor::EncoderMotor (uint8_t e_pin, uint8_t f_pin, uint8_t b_pin, uint8_t ea_pin, uint8_t eb_pin) {
enable_pin = e_pin;
forward_pin = f_pin;
backward_pin = b_pin;
encoder_a_pin = ea_pin;
encoder_b_pin = eb_pin;
};
void EncoderMotor::Setup () {
pinMode(enable_pin, OUTPUT);
pinMode(forward_pin, OUTPUT);
pinMode(backward_pin, OUTPUT);
ledcSetup(pwm_channel, pwm_frequency, pwm_resolution);
ledcAttachPin(enable_pin, pwm_channel);
ledcWrite(pwm_channel, pwm_duty_cycle);
}

View File

@ -6,15 +6,29 @@
class EncoderMotor { class EncoderMotor {
private: private:
uint8_t enable_pin;
uint8_t forward_pin; //defaults are for EPS32 dev board
uint8_t backward_pin; volatile uint8_t enable_pin = 13;
uint8_t pwm_duty_speed = 255; volatile uint8_t forward_pin = 12;
uint32_t pwm_frequency = 30000; volatile uint8_t backward_pin = 14;
volatile uint8_t encoder_a_pin = 27;
volatile uint8_t encoder_b_pin = 26;
volatile uint8_t pwm_duty_cycle = 255;
const uint32_t pwm_frequency = 30000;
const uint8_t pwm_channel = 0;
const uint8_t pwm_resolution = 8;
public: public:
EncoderMotor(); EncoderMotor();
EncoderMotor(uint8_t e_pin, uint8_t f_pin, uint8_t b_pin, uint8_t ea_pin, uint8_t eb_pin);
void Setup();
void Loop();
void Start();
void Stop();
void SetSpeed();
}; };