Add serial messages for debugging
This commit is contained in:
@@ -104,6 +104,34 @@ void runStep() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- Serial Output Helpers ---
|
||||||
|
|
||||||
|
void printStatus() {
|
||||||
|
Serial.print("Mode: ");
|
||||||
|
Serial.print(autoMode == AUTO ? "AUTO" : "MANUAL");
|
||||||
|
Serial.print(" | State: ");
|
||||||
|
Serial.print(_currState == MOVE ? "MOVE" : "WAIT");
|
||||||
|
Serial.print(" | Steps Left: ");
|
||||||
|
Serial.print(_stepsRemaining);
|
||||||
|
Serial.print(" | Speed: ");
|
||||||
|
Serial.print(turnSpeed);
|
||||||
|
Serial.print(" deg/s | Wait: ");
|
||||||
|
Serial.print(waitInterval);
|
||||||
|
Serial.println("s");
|
||||||
|
}
|
||||||
|
|
||||||
|
void printCommandAck(char cmd, String payload) {
|
||||||
|
Serial.print("> Command '");
|
||||||
|
Serial.print(cmd);
|
||||||
|
Serial.print(payload);
|
||||||
|
Serial.println("' received.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void printError(String msg) {
|
||||||
|
Serial.print("ERROR: ");
|
||||||
|
Serial.println(msg);
|
||||||
|
}
|
||||||
|
|
||||||
// --- Setup ---
|
// --- Setup ---
|
||||||
void setup() {
|
void setup() {
|
||||||
// Initialize pins
|
// Initialize pins
|
||||||
@@ -116,6 +144,8 @@ void setup() {
|
|||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
while (!Serial) { ; } // Wait for serial port (optional for native USB)
|
while (!Serial) { ; } // Wait for serial port (optional for native USB)
|
||||||
|
|
||||||
|
Serial.println("=== Stepper Motor Controller Initialized ===");
|
||||||
|
|
||||||
// Initial State Setup
|
// Initial State Setup
|
||||||
autoMode = AUTO;
|
autoMode = AUTO;
|
||||||
waitInterval = 8.0;
|
waitInterval = 8.0;
|
||||||
@@ -131,6 +161,9 @@ void setup() {
|
|||||||
// Ensure we start in MOVE if we want immediate action, or WAIT if idle
|
// Ensure we start in MOVE if we want immediate action, or WAIT if idle
|
||||||
// Based on your logic: "initialized in MOVE state"
|
// Based on your logic: "initialized in MOVE state"
|
||||||
_currState = MOVE;
|
_currState = MOVE;
|
||||||
|
|
||||||
|
Serial.println("Ready. Commands: m[0|1], a[deg], s[deg/s], i[sec]");
|
||||||
|
printStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Loop ---
|
// --- Loop ---
|
||||||
@@ -140,27 +173,46 @@ void loop() {
|
|||||||
String command = Serial.readString();
|
String command = Serial.readString();
|
||||||
command.trim(); // Remove whitespace
|
command.trim(); // Remove whitespace
|
||||||
|
|
||||||
if (command.length() < 2) return; // Need at least 'a' + number
|
if (command.length() < 2) {
|
||||||
|
printError("Invalid command format (too short).");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
char cmdType = command.charAt(0);
|
char cmdType = command.charAt(0);
|
||||||
String payload = command.substring(1);
|
String payload = command.substring(1);
|
||||||
|
|
||||||
|
printCommandAck(cmdType, payload);
|
||||||
|
|
||||||
switch (cmdType) {
|
switch (cmdType) {
|
||||||
case 'm':
|
case 'm':
|
||||||
// 'm0' for AUTO, 'm1' for MANUAL
|
// 'm0' for AUTO, 'm1' for MANUAL
|
||||||
if (payload.length() > 0) {
|
if (payload.length() > 0) {
|
||||||
char modeChar = payload.charAt(0);
|
char modeChar = payload.charAt(0);
|
||||||
if (modeChar == '0' && autoMode != AUTO) {
|
if (modeChar == '0') {
|
||||||
autoMode = AUTO;
|
if (autoMode != AUTO) {
|
||||||
_currState = MOVE;
|
autoMode = AUTO;
|
||||||
_stepsRemaining = _stepCount;
|
_currState = MOVE;
|
||||||
_stepTime = millis();
|
_stepsRemaining = _stepCount;
|
||||||
} else if (modeChar == '1' && autoMode != MANUAL) {
|
_stepTime = millis();
|
||||||
autoMode = MANUAL;
|
Serial.println(" -> Mode switched to AUTO. Starting move cycle.");
|
||||||
_currState = MOVE; // Start moving immediately on switch
|
} else {
|
||||||
_stepsRemaining = _stepCount;
|
Serial.println(" -> Already in AUTO mode.");
|
||||||
_stepTime = millis();
|
}
|
||||||
|
} else if (modeChar == '1') {
|
||||||
|
if (autoMode != MANUAL) {
|
||||||
|
autoMode = MANUAL;
|
||||||
|
_currState = MOVE; // Start moving immediately on switch
|
||||||
|
_stepsRemaining = _stepCount;
|
||||||
|
_stepTime = millis();
|
||||||
|
Serial.println(" -> Mode switched to MANUAL. Moving once, then waiting.");
|
||||||
|
} else {
|
||||||
|
Serial.println(" -> Already in MANUAL mode.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printError("Invalid mode. Use 'm0' (AUTO) or 'm1' (MANUAL).");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
printError("Missing mode argument (0 or 1).");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -168,7 +220,19 @@ void loop() {
|
|||||||
// 'a90' -> move 90 degrees
|
// 'a90' -> move 90 degrees
|
||||||
{
|
{
|
||||||
float angle = payload.toFloat();
|
float angle = payload.toFloat();
|
||||||
calculateStepsForAngle(angle);
|
if (payload.length() == 0 || (angle == 0 && payload != "0")) {
|
||||||
|
printError("Invalid angle format.");
|
||||||
|
} else {
|
||||||
|
calculateStepsForAngle(angle);
|
||||||
|
Serial.print(" -> Moving ");
|
||||||
|
Serial.print(_stepCount);
|
||||||
|
Serial.print(" steps (");
|
||||||
|
Serial.print(angle);
|
||||||
|
Serial.println(" degrees).");
|
||||||
|
if (_stepCount == 0) {
|
||||||
|
Serial.println(" -> No movement required (0 degrees).");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -176,10 +240,16 @@ void loop() {
|
|||||||
// 's10' -> 10 deg/s
|
// 's10' -> 10 deg/s
|
||||||
{
|
{
|
||||||
float speed = payload.toFloat();
|
float speed = payload.toFloat();
|
||||||
if (speed > 0) {
|
if (payload.length() == 0 || speed <= 0) {
|
||||||
|
printError("Invalid speed. Must be > 0.");
|
||||||
|
} else {
|
||||||
turnSpeed = speed;
|
turnSpeed = speed;
|
||||||
updateStepInterval();
|
updateStepInterval();
|
||||||
// If currently in MOVE, the new interval applies on next step
|
Serial.print(" -> Speed set to ");
|
||||||
|
Serial.print(turnSpeed);
|
||||||
|
Serial.print(" deg/s (Step interval: ");
|
||||||
|
Serial.print(_stepInterval * 1000, 2);
|
||||||
|
Serial.println(" ms).");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -188,12 +258,24 @@ void loop() {
|
|||||||
// 'i5' -> 5 seconds wait
|
// 'i5' -> 5 seconds wait
|
||||||
{
|
{
|
||||||
float interval = payload.toFloat();
|
float interval = payload.toFloat();
|
||||||
if (interval >= 0) {
|
if (payload.length() == 0 || interval < 0) {
|
||||||
|
printError("Invalid interval. Must be >= 0.");
|
||||||
|
} else {
|
||||||
waitInterval = interval;
|
waitInterval = interval;
|
||||||
|
Serial.print(" -> Wait interval set to ");
|
||||||
|
Serial.print(waitInterval);
|
||||||
|
Serial.println(" seconds.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printError("Unknown command. Use m, a, s, or i.");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Print status after every command for immediate feedback
|
||||||
|
printStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- EXECUTION LOGIC ---
|
// --- EXECUTION LOGIC ---
|
||||||
@@ -202,6 +284,14 @@ void loop() {
|
|||||||
if (_currState == MOVE && _stepsRemaining == 0) {
|
if (_currState == MOVE && _stepsRemaining == 0) {
|
||||||
_currState = WAIT;
|
_currState = WAIT;
|
||||||
_waitTime = millis();
|
_waitTime = millis();
|
||||||
|
Serial.println("--- State: MOVE -> WAIT ---");
|
||||||
|
if (autoMode == AUTO) {
|
||||||
|
Serial.print(" Waiting ");
|
||||||
|
Serial.print(waitInterval);
|
||||||
|
Serial.println(" seconds before next cycle...");
|
||||||
|
} else {
|
||||||
|
Serial.println(" Waiting indefinitely for new command (MANUAL mode).");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Check if we should restart in AUTO mode
|
// 2. Check if we should restart in AUTO mode
|
||||||
@@ -210,6 +300,10 @@ void loop() {
|
|||||||
_currState = MOVE;
|
_currState = MOVE;
|
||||||
_stepsRemaining = _stepCount;
|
_stepsRemaining = _stepCount;
|
||||||
_stepTime = millis(); // Reset step timer to prevent burst
|
_stepTime = millis(); // Reset step timer to prevent burst
|
||||||
|
Serial.println("--- State: WAIT -> MOVE ---");
|
||||||
|
Serial.print(" Auto-restart! Moving ");
|
||||||
|
Serial.print(_stepsRemaining);
|
||||||
|
Serial.println(" steps.");
|
||||||
}
|
}
|
||||||
// If MANUAL: Stay in WAIT indefinitely until new command
|
// If MANUAL: Stay in WAIT indefinitely until new command
|
||||||
}
|
}
|
||||||
@@ -221,6 +315,14 @@ void loop() {
|
|||||||
runStep();
|
runStep();
|
||||||
_stepTime = currentTime;
|
_stepTime = currentTime;
|
||||||
_stepsRemaining--;
|
_stepsRemaining--;
|
||||||
|
|
||||||
|
// Optional: Print progress every 10 steps to avoid spam
|
||||||
|
// if (_stepCount > 0 && (_stepCount - _stepsRemaining) % 10 == 0) {
|
||||||
|
// Serial.print(" Step: ");
|
||||||
|
// Serial.print(_stepCount - _stepsRemaining);
|
||||||
|
// Serial.print("/");
|
||||||
|
// Serial.println(_stepCount);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user