diff --git a/platformio.ini b/platformio.ini index adc9727c2897cc9ef9b903163be10a5f3dec6a7e..7067634eebe728415aa3b28980e258484df7fe1a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -25,6 +25,7 @@ lib_deps = adafruit/Adafruit BusIO@^1.11.5 SPI s00500/ESPUI@^2.0.0 + waspinator/AccelStepper@^1.61 monitor_speed = 74880 upload_speed = 921600 \ No newline at end of file diff --git a/pousseseringue-arduino.cpp b/pousseseringue-arduino.cpp index 0f4b23d3dc9659cf510d2e8b1d263504746430bb..22bd1e117e9db7da227ea547ea5819a027218ebe 100644 --- a/pousseseringue-arduino.cpp +++ b/pousseseringue-arduino.cpp @@ -8,7 +8,7 @@ #define STAPSK "" #else #define STASSID "laas-welcome" -#define STAPSK "WifiLAAS2022" // this password is wrong +#define STAPSK "WifiLAAS2018" // this password is wrong #endif #define NAME "PousseSeringue" @@ -48,29 +48,26 @@ - - #include <ESP8266WiFi.h> // internal, wifi library #include <DNSServer.h> // internal, access point mode #if !CORE_MOCK #include <SSD1306AsciiWire.h> // https://github.com/greiman/SSD1306Ascii -#include <A4988.h> // https://github.com/laurb9/StepperDriver +#include <AccelStepper.h> #endif // !CORE_MOCK #include "Debouncer.h" // local, debouncer, short counter, long detector #include "common.h" - enum class Modes { TURN, TURNSetup, RPM, RPMSetup, INFO }; - millis_t nowMs; // to update on main loop(): "nowMs = millis();" Debouncer<nowMs> bA, bB, bC; + #if !CORE_MOCK -A4988 a4988(MOTOR_STEPS, DIR, STEP, SLEEP); +AccelStepper stepper(AccelStepper::DRIVER, STEP,DIR); SSD1306AsciiWire oled; #endif // !CORE_MOCK constexpr int DNS_PORT = 53; @@ -93,6 +90,8 @@ int stepDurationMs = STEP_DURATION_DEFAULT_MS; float stepsPerDuration2rpm () { return 60.0 * stepsPerDuration / ((MOTOR_STEPS * MICROSTEPS_CONF) * (stepDurationMs / 1000.0)); } int rpming = 0; // -1, 0 or +1 + + const char* oledMode () { switch (mode) @@ -216,7 +215,7 @@ void buttons (int shortp, int longp) void setup() { - Serial.begin(74880); + Serial.begin(9600); Serial.setDebugOutput(true); #if !CORE_MOCK Wire.begin(); @@ -231,12 +230,10 @@ void setup() oled.clear(); oled.println("Booting...\n"); #endif // !CORE_MOCK - -#if !CORE_MOCK - a4988.begin(STEPPER_RPM); // some value is necessary - a4988.setEnableActiveState(LOW); - a4988.setMicrostep(MICROSTEPS_CONF); - a4988.enable(); +#if !CORE_MOCK + stepper.setMaxSpeed(10000); + stepper.setAcceleration(10000); + stepper.moveTo(200); #endif // !CORE_MOCK uint8_t mac[6]; @@ -307,35 +304,15 @@ void loop() } // Stepper - // MOVE THIS BLOCK INTO A TIMER/ISR - // (it is randomly slowed down by prints / web / wifi) - // (or? use A4988 RPM mode, related: a4988.begin(STEPPER_RPM);) - if (lastMoveMs - nowMs > (millis_t)stepDurationMs) + #if !CORE_MOCK + if (stepper.distanceToGo() == 0) { - if (rpming && move < MOTOR_STEPS * MICROSTEPS_CONF && move > -(MOTOR_STEPS * MICROSTEPS_CONF)) - { - move += rpming * MOTOR_STEPS * MICROSTEPS_CONF; - //Serial.printf("feeding %d\n", move); - } - - if (move >= stepsPerDuration) - { - move -= stepsPerDuration; -#if !CORE_MOCK - a4988.move(stepsPerDuration); // forward revolution -#endif // !CORE_MOCK - } - if (move <= -stepsPerDuration) - { - move += stepsPerDuration; -#if !CORE_MOCK - a4988.move(-stepsPerDuration); // backward revolution -#endif // !CORE_MOCK - } - - lastMoveMs += stepDurationMs; + stepper.moveTo(-stepper.currentPosition()); + Serial.println("Rotating Motor in opposite direction..."); } - + stepper.run(); + #endif // !CORE_MOCK webLoop(); + dnsServer.processNextRequest(); // AP redirection }