Init
This commit is contained in:
commit
018d00d010
1 changed files with 99 additions and 0 deletions
99
main.ino
Normal file
99
main.ino
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
#include <Arduino.h>
|
||||
#include <FastAccelStepper.h>
|
||||
|
||||
FastAccelStepperEngine engine = FastAccelStepperEngine();
|
||||
FastAccelStepper *stepper = NULL;
|
||||
|
||||
// WICHTIG beim XIAO ESP32-C6:
|
||||
// Wenn du die Beschriftung auf der Platine nutzt, schreibe D-Pins (z. B. D9),
|
||||
// nicht die nackte Zahl, da GPIO-Nummern abweichen!
|
||||
#define dirPinStepper D5 // Bei dir zuvor: 5
|
||||
#define enablePinStepper D6 // Bei dir zuvor: 6
|
||||
#define stepPinStepper D9 // Bei dir zuvor: 9
|
||||
|
||||
#define speedUp D8 // Bei dir zuvor: 8
|
||||
#define speedDown D7 // Bei dir zuvor: 7
|
||||
|
||||
const int32_t ACCEL_RATE = 2000;
|
||||
const uint32_t MAX_SPEED_HZ = 106000;
|
||||
|
||||
int32_t lastControl = 0;
|
||||
uint32_t lastPlotTime = 0;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
delay(1000); // Zeit für USB-CDC-Verbindung geben
|
||||
|
||||
Serial.println("--- MOTOR DIAGNOSE START ---");
|
||||
|
||||
engine.init();
|
||||
stepper = engine.stepperConnectToPin(stepPinStepper);
|
||||
|
||||
if (stepper) {
|
||||
Serial.println("[OK] FastAccelStepper erfolgreich an Pin initialisiert.");
|
||||
stepper->setDirectionPin(dirPinStepper);
|
||||
|
||||
// Hinweis: Manche Optokoppler-Treiber benötigen HIGH-Aktivität zum Aktivieren.
|
||||
// Falls der Motor blockiert bleibt, versuche: stepper->setEnablePin(enablePinStepper, false);
|
||||
stepper->setEnablePin(enablePinStepper, true);
|
||||
stepper->setAutoEnable(true);
|
||||
stepper->setSpeedInHz(MAX_SPEED_HZ);
|
||||
} else {
|
||||
Serial.println("[FEHLER] FastAccelStepper konnte NICHT initialisiert werden (stepper == NULL)!");
|
||||
Serial.println("Prüfe, ob der gewählte Step-Pin von der Library auf dem ESP32-C6 unterstützt wird.");
|
||||
}
|
||||
|
||||
pinMode(speedUp, INPUT_PULLUP);
|
||||
pinMode(speedDown, INPUT_PULLUP);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (!stepper) {
|
||||
Serial.println("[HALT] Kein Stepper-Objekt aktiv.");
|
||||
delay(1000);
|
||||
return;
|
||||
}
|
||||
|
||||
// Bei INPUT_PULLUP: gedrückt = LOW (true)
|
||||
bool btnUpPressed = (digitalRead(speedUp) == LOW);
|
||||
bool btnDownPressed = (digitalRead(speedDown) == LOW);
|
||||
|
||||
int32_t control = 0;
|
||||
|
||||
if (btnUpPressed && btnDownPressed) {
|
||||
stepper->stopMove();
|
||||
control = 0;
|
||||
}
|
||||
else if (btnUpPressed) {
|
||||
control = ACCEL_RATE;
|
||||
}
|
||||
else if (btnDownPressed) {
|
||||
control = -ACCEL_RATE;
|
||||
}
|
||||
else {
|
||||
control = 0;
|
||||
}
|
||||
|
||||
if (control != lastControl) {
|
||||
stepper->moveByAcceleration(control, true);
|
||||
lastControl = control;
|
||||
}
|
||||
|
||||
// Plotter-Ausgabe alle 50 ms (überflutet den Bus nicht)
|
||||
if (millis() - lastPlotTime >= 50) {
|
||||
lastPlotTime = millis();
|
||||
|
||||
int32_t currentSpeed = stepper->getCurrentSpeedInUs() == 0 ? 0 : (1000000 / stepper->getCurrentSpeedInUs());
|
||||
|
||||
// Format kompatibel für den Arduino Serial Plotter
|
||||
Serial.print("Current_Speed_Hz:");
|
||||
Serial.print((60*currentSpeed)/3200);
|
||||
Serial.print(" Accel_Control:");
|
||||
Serial.print(control);
|
||||
Serial.print(" Btn_Up:");
|
||||
Serial.print(btnUpPressed ? 5000 : 0);
|
||||
Serial.print(" Btn_Down:");
|
||||
Serial.print(btnDownPressed ? -5000 : 0);
|
||||
Serial.println();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue