better pen control

Signed-off-by: Stepan Usatyuk <usaatyuk@ustk.me>
This commit is contained in:
2019-05-09 20:36:41 +03:00
parent c4b71c5379
commit a5d4984a0a
5 changed files with 27 additions and 16 deletions

View File

@@ -3,13 +3,13 @@
#ifndef PEN_H #ifndef PEN_H
#define PEN_H #define PEN_H
#define DELAY 300 #define DELAY 15
class Pen { class Pen {
private: private:
int posEngaged; int posEngaged;
int posDisengaged; int posDisengaged;
bool engaged; bool engaged = true;
Servo servo; Servo servo;
public: public:

View File

@@ -23,6 +23,7 @@ class Stepper {
Stepper(int pin1, int pin2, int pin3, int pin4, int stepsPerRevolution, int backlashSteps, int limit); Stepper(int pin1, int pin2, int pin3, int pin4, int stepsPerRevolution, int backlashSteps, int limit);
void rotate(float degrees); void rotate(float degrees);
void moveTo(float degrees); void moveTo(float degrees);
void setPos(float degrees);
float getDist(float degrees); float getDist(float degrees);
void doStep(); void doStep();
bool finished(); bool finished();

View File

@@ -7,19 +7,25 @@ Pen::Pen(int pin, int posEngaged, int posDisengaged)
} }
void Pen::engage() { void Pen::engage() {
servo.write(posEngaged); if (!engaged) {
for (int i = posDisengaged; i > posEngaged; i--) {
servo.write(i);
delay(DELAY);
}
}
engaged = true; engaged = true;
delay(DELAY);
} }
void Pen::disengage() { void Pen::disengage() {
servo.write(posDisengaged); if (engaged) {
for (int i = posEngaged; i < posDisengaged; i++) {
servo.write(i);
delay(DELAY);
}
}
engaged = false; engaged = false;
delay(DELAY);
} }
bool Pen::getEngaged() { bool Pen::getEngaged() { return engaged; }
return engaged;
}
Pen::~Pen() {} Pen::~Pen() {}

View File

@@ -196,5 +196,9 @@ void Stepper::moveTo(float degrees) {
rotate(mod - pos); rotate(mod - pos);
} }
void Stepper::setPos(float degrees) {
pos = degrees;
}
bool Stepper::finished() { return remainingSteps == 0; } bool Stepper::finished() { return remainingSteps == 0; }
float Stepper::getPos() { return pos; } float Stepper::getPos() { return pos; }

View File

@@ -6,12 +6,12 @@
#include "StepperTimer.h" #include "StepperTimer.h"
#define STEPS_PER_REVOLUTION 4076 #define STEPS_PER_REVOLUTION 4076
#define BACKLASH_STEPS 20 #define BACKLASH_STEPS 40
int RPM = 10; int RPM = 4;
Stepper eggStepper(D1, D2, D3, D4, STEPS_PER_REVOLUTION, BACKLASH_STEPS, 0); Stepper eggStepper(D1, D2, D3, D4, STEPS_PER_REVOLUTION, BACKLASH_STEPS, 0);
Stepper servoStepper(D5, D6, D7, D8, STEPS_PER_REVOLUTION, BACKLASH_STEPS, 80); Stepper servoStepper(D5, D6, D7, D8, -STEPS_PER_REVOLUTION, BACKLASH_STEPS, 70);
Pen pen(D0, 80, 170); Pen pen(D0, 100, 170);
StepperTimer eggStepperTimer(RPM, STEPS_PER_REVOLUTION); StepperTimer eggStepperTimer(RPM, STEPS_PER_REVOLUTION);
StepperTimer servoStepperTimer(RPM, STEPS_PER_REVOLUTION); StepperTimer servoStepperTimer(RPM, STEPS_PER_REVOLUTION);
@@ -41,10 +41,10 @@ void execCommand(int *command) {
eggStepper.moveTo(command[Y]); eggStepper.moveTo(command[Y]);
} }
if (command[Z] == 1) { if (command[Z] < 0) {
pen.engage(); pen.engage();
} }
if (command[Z] == 0) { if (command[Z] >= 0) {
pen.disengage(); pen.disengage();
} }
@@ -66,13 +66,13 @@ void setup() {
eggStepperTimer.setStepper(&eggStepper); eggStepperTimer.setStepper(&eggStepper);
servoStepperTimer.setStepper(&servoStepper); servoStepperTimer.setStepper(&servoStepper);
pen.disengage(); pen.disengage();
servoStepper.setPos(70);
WiFi.mode(WIFI_OFF); WiFi.mode(WIFI_OFF);
} }
void loop() { void loop() {
while (Serial.available() > 0) { while (Serial.available() > 0) {
char inChar = Serial.read(); char inChar = Serial.read();
Serial.write(inChar);
inString += inChar; inString += inChar;
if (inChar == '\n') { if (inChar == '\n') {