fix pen servo

Signed-off-by: Stepan Usatyuk <usaatyuk@ustk.me>
This commit is contained in:
2019-05-18 12:40:53 +03:00
parent a96a47f0f9
commit 704fe420e7
5 changed files with 32 additions and 38 deletions

View File

@@ -19,6 +19,7 @@ void sendCommand(float *command) {
Wire.endTransmission();
} else {
Serial.println("UNK");
return;
}
if (command[0] == G01 || command[0] == G00) {
@@ -29,8 +30,8 @@ void sendCommand(float *command) {
if (command[0] == M99) {
Wire.requestFrom(8, 5 * sizeof(float));
float resp[5];
float resp[5];
byte buffer[4];
for (int i = 0; i < 5; i++) {
@@ -63,7 +64,6 @@ void loop() {
while (Serial.available() > 0) {
char inChar = Serial.read();
inString += inChar;
Serial.write(inChar);
if (inChar == '\n') {
inString.trim();

View File

@@ -27,7 +27,6 @@ float servoStepperDelay;
float eggStepperRPM;
float servoStepperRPM;
bool recalculateDelays;
bool needAdjust;
#endif

View File

@@ -7,6 +7,7 @@ class Pen {
private:
int posEngaged;
int posDisengaged;
int pin;
bool engaged = true;
Servo servo;

View File

@@ -6,9 +6,7 @@
#define DELAY 15
Pen::Pen(int pin, int posEngaged, int posDisengaged)
: posEngaged(posEngaged), posDisengaged(posDisengaged) {
servo.attach(pin);
}
: posEngaged(posEngaged), posDisengaged(posDisengaged), pin(pin) {}
void Pen::engage() {
if (!engaged) {
@@ -31,6 +29,7 @@ void Pen::disengage() {
}
void Pen::init() {
servo.attach(pin);
servo.write(posDisengaged);
engaged = false;
}

View File

@@ -6,7 +6,15 @@
int curRPM = DEF_RPM;
int adjustDelay = 10;
float calculateDelay(float rpm, int stepsPerRevolution) {
return ((float)1000 * (float)60) / (rpm * (float)stepsPerRevolution);
}
void adjustRPM() {
eggStepperRPM = curRPM;
servoStepperRPM = curRPM;
if (needAdjust) {
unsigned int stepsX = servoStepper.getRemainingSteps();
unsigned int stepsY = eggStepper.getRemainingSteps();
if (stepsX != 0 && stepsY != 0) {
@@ -16,12 +24,11 @@ void adjustRPM() {
} else if (stepsY > stepsX) {
float rpm = (float)curRPM * (float)stepsX / (float)stepsY;
servoStepperRPM = rpm;
} else {
eggStepperRPM = curRPM;
servoStepperRPM = curRPM;
}
recalculateDelays = true;
}
}
eggStepperDelay = calculateDelay(eggStepperRPM, STEPS_PER_REVOLUTION);
servoStepperDelay = calculateDelay(servoStepperRPM, STEPS_PER_REVOLUTION);
}
int curFloat = 0;
@@ -69,12 +76,6 @@ void requestEvent() {
}
}
float calculateDelay(float rpm, int stepsPerRevolution) {
return ((float)1000 * (float)60) / (rpm * (float)stepsPerRevolution);
}
Servo servo;
void execCommand(float *command) {
if (command[0] == G01 || command[0] == G00) {
if (command[0] == G01) {
@@ -111,8 +112,7 @@ void setup() {
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
Serial.println("Hello!");
recalculateDelays = true;
eggStepperRPM = servoStepperRPM = 4;
eggStepperRPM = servoStepperRPM = curRPM;
OCR2 = 250;
TCCR2 |= (1 << WGM12) | (1 << CS22);
TIMSK |= (1 << OCIE2);
@@ -129,25 +129,20 @@ ISR(TIMER2_COMP_vect) {
if (fmod(ms, servoStepperDelay) < 1) {
servoStepper.doStep();
}
if (fmod(ms, adjustDelay) < 1) {
adjustRPM();
}
}
void loop() {
if (eggStepper.getRemainingSteps() == 0 &&
servoStepper.getRemainingSteps() == 0) {
executing = false;
unsigned long ms = millis();
if (ms % adjustDelay < 2) {
adjustRPM();
}
if (newCommand) {
newCommand = false;
executing = true;
execCommand(command);
}
if (recalculateDelays) {
eggStepperDelay = calculateDelay(eggStepperRPM, STEPS_PER_REVOLUTION);
servoStepperDelay =
calculateDelay(servoStepperRPM, STEPS_PER_REVOLUTION);
recalculateDelays = false;
if (eggStepper.getRemainingSteps() == 0 &&
servoStepper.getRemainingSteps() == 0) {
executing = false;
}
}