testing interrupt

pull/27/head
TimEvWw 2015-06-21 20:39:45 -01:00
parent 45cc01bafd
commit fccca87413
2 changed files with 127 additions and 9 deletions

View File

@ -13,6 +13,8 @@ StepperControl * StepperControl::getInstance() {
const int MOVEMENT_INTERRUPT_SPEED = 1000; // Interrupt cycle in micro seconds const int MOVEMENT_INTERRUPT_SPEED = 1000; // Interrupt cycle in micro seconds
int test = 0;
long sourcePoint[3] = {0,0,0}; long sourcePoint[3] = {0,0,0};
long currentPoint[3] = {0,0,0}; long currentPoint[3] = {0,0,0};
long destinationPoint[3] = {0,0,0}; long destinationPoint[3] = {0,0,0};
@ -47,8 +49,10 @@ int ledState = LOW;
void blinkLed() { void blinkLed() {
if (ledState == LOW) { if (ledState == LOW) {
ledState = HIGH; ledState = HIGH;
//Serial.print("R99 led on");
} else { } else {
ledState = LOW; ledState = LOW;
//Serial.print("R99 led off");
} }
digitalWrite(LED_PIN, ledState); digitalWrite(LED_PIN, ledState);
} }
@ -429,6 +433,7 @@ void stepAxis(int i, bool state) {
// set a step on the motors // set a step on the motors
step(i, currentPoint[i], 1, destinationPoint[i]); step(i, currentPoint[i], 1, destinationPoint[i]);
blinkLed();
//stepMade = true; //stepMade = true;
//lastStepMillis[i] = currentMillis; //lastStepMillis[i] = currentMillis;
@ -436,12 +441,30 @@ void stepAxis(int i, bool state) {
void checkAxis(int i) { void checkAxis(int i) {
Serial.print("R99 check axis ");
Serial.print(i);
Serial.print(" axis active ");
Serial.print(axisActive[i]);
Serial.print(" current point ");
Serial.print(currentPoint[i]);
Serial.print(" destination point ");
Serial.print(destinationPoint[i]);
Serial.print("\n");
if ((!pointReached(currentPoint, destinationPoint) || home) && axisActive[i]) { if ((!pointReached(currentPoint, destinationPoint) || home) && axisActive[i]) {
Serial.print("R99 point not reached yet\n");
// home or destination not reached, keep moving // home or destination not reached, keep moving
axisSpeed[i] = calculateSpeed( sourcePoint[i],currentPoint[i],destinationPoint[i], axisSpeed[i] = calculateSpeed( sourcePoint[i],currentPoint[i],destinationPoint[i],
speedMin[i], speedMax[i], stepsAcc[i]); speedMin[i], speedMax[i], stepsAcc[i]);
Serial.print("R99 axis speed ");
Serial.print(axisSpeed[i]);
Serial.print("\n");
checkAxisDirection(i); checkAxisDirection(i);
// If end stop reached, don't move anymore // If end stop reached, don't move anymore
@ -469,6 +492,16 @@ void checkAxis(int i) {
void checkTicksAxis(int i) { void checkTicksAxis(int i) {
Serial.print("R99 checkTicksAxis ");
Serial.print(" destination point ");
Serial.print(destinationPoint[0]);
Serial.print(" ");
Serial.print("test ");
Serial.print(test);
Serial.print("\n");
moveTicks[i]++;
if (axisActive[i]) { if (axisActive[i]) {
if (moveTicks[i] >= stepOffTick[3]) { if (moveTicks[i] >= stepOffTick[3]) {
resetStep(i); resetStep(i);
@ -486,7 +519,17 @@ void checkTicksAxis(int i) {
// Handle movement by checking each axis // Handle movement by checking each axis
void handleMovementInterrupt(void){ void StepperControl::handleMovementInterrupt(void){
/**/Serial.print("R99 interrupt\n");
Serial.print("R99 interrupt data ");
Serial.print(" destination point ");
Serial.print(destinationPoint[0]);
Serial.print(" ");
Serial.print("test ");
Serial.print(test);
Serial.print("\n");
checkTicksAxis(0); checkTicksAxis(0);
checkTicksAxis(1); checkTicksAxis(1);
checkTicksAxis(2); checkTicksAxis(2);
@ -495,10 +538,21 @@ void handleMovementInterrupt(void){
} }
bool interruptBusy = false;
void handleMovementInterruptTest(void) {
if (interruptBusy == false) {
interruptBusy = true;
//StepperControl::getInstance()->handleMovementInterrupt();
blinkLed();
interruptBusy = false;
}
}
// Start the interrupt used for moviing // Start the interrupt used for moviing
// Interrupt management code library written by Paul Stoffregen // Interrupt management code library written by Paul Stoffregen
void StepperControl::initInterrupt() { void StepperControl::initInterrupt() {
Timer1.attachInterrupt(handleMovementInterrupt); //Timer1.attachInterrupt(StepperControl::getInstance()->handleMovementInterrupt);
Timer1.attachInterrupt(handleMovementInterruptTest);
Timer1.initialize(MOVEMENT_INTERRUPT_SPEED); Timer1.initialize(MOVEMENT_INTERRUPT_SPEED);
Timer1.stop(); Timer1.stop();
} }
@ -527,12 +581,30 @@ int StepperControl::moveAbsoluteConstant( long xDest, long yDest, long zDest,
destinationPoint[1] = yDest; destinationPoint[1] = yDest;
destinationPoint[2] = zDest; destinationPoint[2] = zDest;
movementLength[3] = getLength(destinationPoint[0], currentPoint[0]); //test = 1;
movementLength[3] = getLength(destinationPoint[1], currentPoint[1]);
movementLength[3] = getLength(destinationPoint[2], currentPoint[2]); //Serial.print("R99 ");
//Serial.print(" destination ");
//Serial.print(destinationPoint[0]);
//Serial.print(" ");
//Serial.print("\n");
movementLength[0] = getLength(destinationPoint[0], currentPoint[0]);
movementLength[1] = getLength(destinationPoint[1], currentPoint[1]);
movementLength[2] = getLength(destinationPoint[2], currentPoint[2]);
//Serial.print("R99 ");
//Serial.print(" during vars ");
//Serial.print(destinationPoint[0]);
//Serial.print("\n");
maxLenth = getMaxLength(movementLength); maxLenth = getMaxLength(movementLength);
//Serial.print("R99 ");
//Serial.print(" during vars ");
//Serial.print(destinationPoint[0]);
//Serial.print("\n");
lengthRatio[0] = 1.0 * movementLength[0] / maxLenth; lengthRatio[0] = 1.0 * movementLength[0] / maxLenth;
lengthRatio[1] = 1.0 * movementLength[1] / maxLenth; lengthRatio[1] = 1.0 * movementLength[1] / maxLenth;
lengthRatio[2] = 1.0 * movementLength[2] / maxLenth; lengthRatio[2] = 1.0 * movementLength[2] / maxLenth;
@ -571,6 +643,12 @@ int StepperControl::moveAbsoluteConstant( long xDest, long yDest, long zDest,
home = xHome || yHome || zHome; home = xHome || yHome || zHome;
//Serial.print("R99 ");
//Serial.print(" after vars ");
//Serial.print(destinationPoint[0]);
//Serial.print("\n");
unsigned long currentMillis = 0; unsigned long currentMillis = 0;
unsigned long timeStart = millis(); unsigned long timeStart = millis();
@ -607,6 +685,13 @@ int StepperControl::moveAbsoluteConstant( long xDest, long yDest, long zDest,
reportEndStops(); reportEndStops();
enableMotors(true); enableMotors(true);
//Serial.print("R99 ");
//Serial.print(" before home check ");
//Serial.print(destinationPoint[0]);
//Serial.print(" home is up ");
//Serial.print(homeIsUp[0]);
//Serial.print("\n");
// Limit normal movmement to the home position // Limit normal movmement to the home position
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
if (!homeIsUp[i] && destinationPoint[i] < 0) { if (!homeIsUp[i] && destinationPoint[i] < 0) {
@ -624,21 +709,49 @@ int StepperControl::moveAbsoluteConstant( long xDest, long yDest, long zDest,
axisActive[1] = true; axisActive[1] = true;
axisActive[2] = true; axisActive[2] = true;
//Serial.print("R99 ");
//Serial.print(" before check axis ");
//Serial.print(destinationPoint[0]);
//Serial.print("\n");
checkAxis(0); checkAxis(0);
checkAxis(1); // checkAxis(1);
checkAxis(2); // checkAxis(2);
//Serial.print("R99 ");
//Serial.print(" after check axis ");
//Serial.print(destinationPoint[0]);
//Serial.print("\n");
Timer1.start(); Timer1.start();
/**/Serial.print("R99 started\n");
/**/Serial.print("R99 timeout ");
/**/Serial.print(timeOut[0]);
/**/Serial.print("\n");
// Let the interrupt handle all the movements // Let the interrupt handle all the movements
while (axisActive[0] || axisActive[1] || axisActive[2]) { while (axisActive[0] || axisActive[1] || axisActive[2]) {
/**///Serial.print("R99 while loop\n");
delay(1); delay(1);
checkAxis(0);
// checkAxis(1);
// checkAxis(2);
//axisActive[0] = false;
axisActive[1] = false;
axisActive[2] = false;
storeEndStops(); storeEndStops();
// Check timeouts // Check timeouts
if (axisActive[0] == true && millis() - timeStart > timeOut[0]) { if (axisActive[0] == true && millis() - timeStart > timeOut[0] * 10) {
error = 1; error = 1;
} }
if (axisActive[1] == true && millis() - timeStart > timeOut[1]) { if (axisActive[1] == true && millis() - timeStart > timeOut[1]) {
@ -657,6 +770,7 @@ int StepperControl::moveAbsoluteConstant( long xDest, long yDest, long zDest,
} }
if (error == 1) { if (error == 1) {
Serial.print("R99 error\n");
Timer1.stop(); Timer1.stop();
axisActive[0] = false; axisActive[0] = false;
axisActive[1] = false; axisActive[1] = false;
@ -672,6 +786,8 @@ int StepperControl::moveAbsoluteConstant( long xDest, long yDest, long zDest,
} }
/**/Serial.print("R99 stopped\n");
Timer1.stop(); Timer1.stop();
enableMotors(false); enableMotors(false);

View File

@ -25,6 +25,8 @@ public:
int moveAbsoluteConstant(long xDest, long yDest, long zDest, int moveAbsoluteConstant(long xDest, long yDest, long zDest,
unsigned int xMaxSpd, unsigned int yMaxSpd, unsigned int zMaxSpd, unsigned int xMaxSpd, unsigned int yMaxSpd, unsigned int zMaxSpd,
bool homeX, bool homeY, bool homeZ); bool homeX, bool homeY, bool homeZ);
void handleMovementInterrupt();
int calibrateAxis(int axis); int calibrateAxis(int axis);
void initInterrupt(); void initInterrupt();
private: private: