Winder.ino 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "Encoder.h"
  2. #include "TeensyStep.h"
  3. #include "Winder.h"
  4. constexpr unsigned feederStpPerMM = 200 * 8 * 5.0f * 0.8f; // e.g. fullstep/rev * microstepping * leadscrew pitch * gearRatio
  5. constexpr unsigned spindleStpPerRev = 200 * 16; // e.g. fullstep/rev * microstepping
  6. constexpr unsigned spindleAcceleration = 15000;
  7. Stepper spindle(0, 1);
  8. Stepper feeder(2, 3);
  9. Winder winder(spindle, feeder);
  10. float pitch = 0.2; //mm
  11. Encoder trimmer(5, 6);
  12. int oldTrimmerVal = 0;
  13. IntervalTimer printTimer; // used to print out current speeds in the background
  14. void setup()
  15. {
  16. while (!Serial && millis() < 500);
  17. // setup background printing
  18. printTimer.begin(printCurrent, 25000);
  19. printTimer.priority(255); // lowest priority, we don't want to disturb stepping
  20. // setup the winder
  21. winder
  22. .setSpindleParams(spindleStpPerRev, spindleAcceleration)
  23. .setFeederParams(feederStpPerMM, 50000)
  24. .begin();
  25. // startup the winder
  26. winder.setSpindleSpeed(600); // spindle speed in rpm
  27. winder.setPitch(0.2f); // pitch in mm
  28. winder.updateSpeeds(); // apply new settings
  29. delay(3000);
  30. }
  31. void loop()
  32. {
  33. // read in the trimmer and adjust the pitch (+/- 0.01 per encoder detent)
  34. int trimmerVal = trimmer.read();
  35. if (trimmerVal != oldTrimmerVal)
  36. {
  37. oldTrimmerVal = trimmerVal;
  38. pitch = 0.2f + trimmerVal / 400.0f; // e.g. 0.01 per 4 encoder steps
  39. winder.setPitch(pitch);
  40. winder.updateSpeeds();
  41. }
  42. if (millis() > 15000) // stop the spindle after 15s
  43. {
  44. winder.setSpindleSpeed(0);
  45. winder.updateSpeeds();
  46. while (1)
  47. yield(); // stop sketch here
  48. }
  49. delay(50); // dont overrun the winder by sending new values to often.
  50. }
  51. // helpers ----------------------------------------------
  52. void printCurrent()
  53. {
  54. unsigned t = millis();
  55. unsigned feederSpeed = winder.getCurFeederSpeed();
  56. unsigned spindleSpeed = winder.getCurSpindleSpeed();
  57. float curPitch = winder.getCurPitch();
  58. if (spindleSpeed != 0 || feederSpeed != 0)
  59. {
  60. Serial.printf("%d\t%i\t%i\t%.3f\t%.3f\n", t, spindleSpeed, feederSpeed, curPitch, pitch);
  61. }
  62. }