Create the Lamp class which will abstract to different lamp types before one is settled on.
This commit is contained in:
parent
ce910d66b4
commit
2401fcf8e7
|
@ -10,6 +10,7 @@ void ContactPrinter::Setup () {
|
|||
pinMode(takeup_picture_pin_ccw, OUTPUT);
|
||||
pinMode(takeup_stock_pin_cw, OUTPUT);
|
||||
pinMode(takeup_stock_pin_ccw, OUTPUT);
|
||||
pinMode(start_button_pin, INPUT_PULLUP);
|
||||
|
||||
drive_motor.Setup();
|
||||
|
||||
|
@ -26,18 +27,22 @@ void ContactPrinter::Setup () {
|
|||
digitalWrite(takeup_picture_pin_ccw, LOW);
|
||||
digitalWrite(takeup_stock_pin_cw, LOW);
|
||||
digitalWrite(takeup_stock_pin_ccw, LOW);
|
||||
|
||||
SetSpeedTakeup(0.4);
|
||||
//SetSpeedDrive(1.0);
|
||||
}
|
||||
|
||||
void ContactPrinter::Start () {
|
||||
RampTakeup(0, takeup_pwm_duty_cycle, takeup_ramp_time);
|
||||
delay(100);
|
||||
drive_motor.Start();
|
||||
running = true;
|
||||
}
|
||||
|
||||
void ContactPrinter::Stop () {
|
||||
drive_motor.Start();
|
||||
delay(100);
|
||||
RampTakeup( takeup_pwm_duty_cycle, 0, takeup_ramp_time);
|
||||
RampTakeup(takeup_pwm_duty_cycle, 0, takeup_ramp_time);
|
||||
digitalWrite(takeup_picture_pin_cw, LOW);
|
||||
digitalWrite(takeup_picture_pin_ccw, LOW);
|
||||
digitalWrite(takeup_stock_pin_cw, LOW);
|
||||
|
@ -62,11 +67,13 @@ void ContactPrinter::SetDirectionPicture(bool clockwise) {
|
|||
}
|
||||
|
||||
//linear
|
||||
void ContactPrinter::RampTakeup(uint16_t start, uint16_t end, uint16_t time) {
|
||||
takeup_ramp_steps = abs(start - end);
|
||||
void ContactPrinter::RampTakeup(uint16_t start_pwm, uint16_t end_pwm, uint16_t time) {
|
||||
takeup_ramp_steps = abs(start_pwm - end_pwm);
|
||||
takeup_ramp_step = round(time / takeup_ramp_steps);
|
||||
takeup_pwm_duty_cycle = start;
|
||||
takeup_ramp_dir = end < start;
|
||||
takeup_pwm_duty_cycle = start_pwm;
|
||||
takeup_ramp_dir = end_pwm < start_pwm;
|
||||
takeup_ramp_current_step = 0;
|
||||
takeup_ramping = true;
|
||||
|
||||
if (takeup_picture_cw) {
|
||||
digitalWrite(takeup_picture_pin_cw, HIGH);
|
||||
|
@ -82,7 +89,6 @@ void ContactPrinter::RampTakeup(uint16_t start, uint16_t end, uint16_t time) {
|
|||
digitalWrite(takeup_stock_pin_cw, LOW);
|
||||
digitalWrite(takeup_stock_pin_ccw, HIGH);
|
||||
}
|
||||
takeup_ramping = true;
|
||||
|
||||
for (uint16_t i = 0; i < takeup_ramp_steps; i++) {
|
||||
if (takeup_pwm_duty_cycle <= 0 || takeup_pwm_duty_cycle >= 255) {
|
||||
|
@ -101,6 +107,16 @@ void ContactPrinter::RampTakeup(uint16_t start, uint16_t end, uint16_t time) {
|
|||
takeup_ramping = false;
|
||||
}
|
||||
|
||||
void ContactPrinter::RampTakeupLoop () {
|
||||
|
||||
}
|
||||
|
||||
void ContactPrinter::ButtonLoop () {
|
||||
if (!running && digitalRead(start_button_pin) == LOW) {
|
||||
Start();
|
||||
}
|
||||
}
|
||||
|
||||
bool ContactPrinter::IsRunning () {
|
||||
return running;
|
||||
}
|
||||
|
@ -108,4 +124,7 @@ bool ContactPrinter::IsRunning () {
|
|||
void ContactPrinter::Loop () {
|
||||
timer = millis();
|
||||
drive_motor.Loop();
|
||||
if (takeup_ramping) {
|
||||
RampTakeupLoop();
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <Arduino.h>
|
||||
#include "DriveMotor.h"
|
||||
#include "Lamp.h"
|
||||
|
||||
class ContactPrinter {
|
||||
|
||||
|
@ -10,6 +11,7 @@ class ContactPrinter {
|
|||
|
||||
//use default drive motor pins
|
||||
DriveMotor drive_motor;
|
||||
Lamp lamp;
|
||||
|
||||
const uint16_t serial_delay = 5;
|
||||
const uint16_t baud = 115200;
|
||||
|
@ -22,6 +24,8 @@ class ContactPrinter {
|
|||
const uint8_t takeup_stock_pin_cw = 18;
|
||||
const uint8_t takeup_stock_pin_ccw = 5;
|
||||
|
||||
const uint8_t start_button_pin = 34;
|
||||
|
||||
const uint32_t pwm_frequency = 30000;
|
||||
const uint8_t takeup_picture_pwm_channel = 1;
|
||||
const uint8_t takeup_stock_pwm_channel = 2;
|
||||
|
@ -36,6 +40,12 @@ class ContactPrinter {
|
|||
volatile uint16_t takeup_ramp_steps = 0; //# of steps
|
||||
volatile uint16_t takeup_ramp_step = 0; //length of step (ms)
|
||||
volatile boolean takeup_ramp_dir = true; //true = up, false = down
|
||||
|
||||
volatile uint16_t takeup_ramp_time = 500; //default ramp time (ms)
|
||||
volatile long takeup_ramp_start = 0; //time to start ramping
|
||||
volatile long takeup_ramp_current_step = 0;
|
||||
volatile long takeup_ramp_next_step_start = 0;
|
||||
|
||||
volatile boolean takeup_ramping = false;
|
||||
|
||||
volatile bool takeup_picture_cw = false;
|
||||
|
@ -44,8 +54,6 @@ class ContactPrinter {
|
|||
volatile bool takeup_stock_cw = true;
|
||||
volatile bool takeup_stock_ccw = true;
|
||||
|
||||
volatile uint16_t takeup_ramp_time = 500;
|
||||
|
||||
volatile bool running = false;
|
||||
|
||||
public:
|
||||
|
@ -62,6 +70,9 @@ class ContactPrinter {
|
|||
void SetDirectionPicture(bool clockwise);
|
||||
|
||||
void RampTakeup(uint16_t start, uint16_t end, uint16_t time);
|
||||
void RampTakeupLoop();
|
||||
|
||||
void ButtonLoop();
|
||||
|
||||
bool IsRunning ();
|
||||
};
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#include "Lamp.h"
|
||||
|
||||
Lamp::Lamp () {
|
||||
//
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef LAMP
|
||||
#define LAMP
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class Lamp {
|
||||
private:
|
||||
volatile boolean on = false;
|
||||
volatile uint8_t lamp_pin_a = 33;
|
||||
|
||||
public:
|
||||
Lamp();
|
||||
void Setup();
|
||||
void Loop();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -23,6 +23,10 @@
|
|||
* 27 Drive Encoder A
|
||||
* 26 Drive Encoder B
|
||||
*
|
||||
* 34 Start Button
|
||||
*
|
||||
* 33 Lamp
|
||||
*
|
||||
**/
|
||||
|
||||
ContactPrinter contact_printer;
|
||||
|
|
Loading…
Reference in New Issue