Define IO behavior

This commit is contained in:
Matt McWilliams 2023-05-25 10:40:02 -04:00
parent 7dc33b5dc1
commit abc2054600
2 changed files with 42 additions and 11 deletions

View File

@ -7,12 +7,16 @@ ContactPrinter::ContactPrinter () {
void ContactPrinter::Setup () { void ContactPrinter::Setup () {
pinMode(drive_pin, OUTPUT); pinMode(drive_pin, OUTPUT);
pinMode(takeup_picture_pin, OUTPUT); pinMode(takeup_picture_pin_cw, OUTPUT);
pinMode(takeup_stock_pin, OUTPUT); pinMode(takeup_picture_pin_ccw, OUTPUT);
pinMode(takeup_stock_pin_cw, OUTPUT);
pinMode(takeup_stock_pin_ccw, OUTPUT);
digitalWrite(drive_pin, LOW); digitalWrite(drive_pin, LOW);
digitalWrite(takeup_picture_pin, LOW); digitalWrite(takeup_picture_pin_cw, LOW);
digitalWrite(takeup_stock_pin, LOW); digitalWrite(takeup_picture_pin_ccw, LOW);
digitalWrite(takeup_stock_pin_cw, LOW);
digitalWrite(takeup_stock_pin_ccw, LOW);
} }
void ContactPrinter::Start () { void ContactPrinter::Start () {
@ -23,8 +27,9 @@ void ContactPrinter::Start () {
void ContactPrinter::Stop () { void ContactPrinter::Stop () {
analogWrite(drive_pin, 0); analogWrite(drive_pin, 0);
analogWrite(takeup_stock_pin, 0); delay(100);
analogWrite(takeup_picture_pin, 0); RampTakeup(takeup_pwm, 0, takeup_ramp_time);
} }
void ContactPrinter::SetSpeedTakeup(float speed) { void ContactPrinter::SetSpeedTakeup(float speed) {
@ -38,24 +43,43 @@ void ContactPrinter::SetSpeedDrive(float speed) {
} }
void ContactPrinter::SetDirectionStock(bool clockwise) { void ContactPrinter::SetDirectionStock(bool clockwise) {
takeup_stock_cw = clockwise;
} }
void ContactPrinter::SetDirectionPicture(bool clockwise) { void ContactPrinter::SetDirectionPicture(bool clockwise) {
takeup_picture_cw = clockwise;
} }
//linear
void ContactPrinter::RampTakeup(uint16_t start, uint16_t end, uint16_t time) { void ContactPrinter::RampTakeup(uint16_t start, uint16_t end, uint16_t time) {
uint16_t steps = abs(start - end); uint16_t steps = abs(start - end);
uint16_t step = round(time / steps); uint16_t step = round(time / steps);
uint16_t pwm = start; uint16_t pwm = start;
uint8_t takeup_picture_pin;
uint8_t takeup_stock_pin;
bool dir = end < start; bool dir = end < start;
if (takeup_picture_cw) {
takeup_picture_pin = takeup_picture_pin_cw;
analogWrite(takeup_picture_pin_ccw, 0);
} else {
takeup_picture_pin = takeup_picture_pin_ccw;
analogWrite(takeup_picture_pin_cw, 0);
}
if (takeup_stock_cw) {
takeup_stock_pin = takeup_stock_pin_cw;
analogWrite(takeup_stock_pin_ccw, 0);
} else {
takeup_stock_pin = takeup_stock_pin_cw;
analogWrite(takeup_stock_pin_cw, 0);
}
for (uint16_t i = 0; i < steps; i++) { for (uint16_t i = 0; i < steps; i++) {
if (pwm <= 0 || pwm >= 256) { if (pwm <= 0 || pwm >= 256) {
break; break;
} }
analogWrite(takeup_stock_pin, pwm);
analogWrite(takeup_picture_pin, pwm); analogWrite(takeup_picture_pin, pwm);
analogWrite(takeup_stock_pin, pwm);
delay(step); delay(step);
if (dir) { if (dir) {
pwm++; pwm++;

View File

@ -10,8 +10,10 @@ class ContactPrinter {
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 drive_pin = 7;
const uint8_t takeup_picture_pin = 8; const uint8_t takeup_picture_pin_cw = 8;
const uint8_t takeup_stock_pin = 9; const uint8_t takeup_picture_pin_ccw = 9;
const uint8_t takeup_stock_pin_cw = 10;
const uint8_t takeup_stock_pin_ccw = 11;
volatile float drive_speed = 1f; volatile float drive_speed = 1f;
volatile float takeup_speed = 1f; volatile float takeup_speed = 1f;
@ -19,6 +21,11 @@ class ContactPrinter {
volatile uint16_t drive_pwm; volatile uint16_t drive_pwm;
volatile uint16_t takeup_pwm; volatile uint16_t takeup_pwm;
volatile bool takeup_picture_cw = false;
volatile bool takeup_picture_ccw = true;
volatile uint16_t takeup_ramp_time = 500;
volatile bool running = false; volatile bool running = false;
public: public: