formatting

This commit is contained in:
2025-04-21 23:36:56 +02:00
parent 6064097fe3
commit 1b393ff12b

View File

@@ -307,196 +307,196 @@ We removed everything down to the ultrasonic sensor readings and only then the m
So the main MCU would do all the thinking and readings from the sensors and the arduino will now act as a stepper motor controller. This is the code currently for the arduino. So the main MCU would do all the thinking and readings from the sensors and the arduino will now act as a stepper motor controller. This is the code currently for the arduino.
??? Code ??? Code
```cpp ```cpp
/* /*
This example shows how to take simple range measurements with the VL53L1X. The This example shows how to take simple range measurements with the VL53L1X. The
range readings are in units of mm. range readings are in units of mm.
*/ */
#include <AccelStepper.h> #include <AccelStepper.h>
//=============================================================================================// //=============================================================================================//
// Stepper motor pins // Stepper motor pins
//=============================================================================================// //=============================================================================================//
#define MOTOR_X_ENABLE_PIN 8 #define MOTOR_X_ENABLE_PIN 8
#define MOTOR_X_STEP_PIN 2 #define MOTOR_X_STEP_PIN 2
#define MOTOR_X_DIR_PIN 5 #define MOTOR_X_DIR_PIN 5
#define MOTOR_Y_ENABLE_PIN 8 #define MOTOR_Y_ENABLE_PIN 8
#define MOTOR_Y_STEP_PIN 3 #define MOTOR_Y_STEP_PIN 3
#define MOTOR_Y_DIR_PIN 6 #define MOTOR_Y_DIR_PIN 6
#define MOTOR_Z_ENABLE_PIN 8 #define MOTOR_Z_ENABLE_PIN 8
#define MOTOR_Z_STEP_PIN 4 #define MOTOR_Z_STEP_PIN 4
#define MOTOR_Z_DIR_PIN 7 #define MOTOR_Z_DIR_PIN 7
#define MOTOR_A_ENABLE_PIN 8 #define MOTOR_A_ENABLE_PIN 8
#define MOTOR_A_STEP_PIN 12 #define MOTOR_A_STEP_PIN 12
#define MOTOR_A_DIR_PIN 13 #define MOTOR_A_DIR_PIN 13
//=============================================================================================// //=============================================================================================//
// Global object creations // Global object creations
//=============================================================================================// //=============================================================================================//
AccelStepper motorX(1, MOTOR_X_STEP_PIN, MOTOR_X_DIR_PIN); AccelStepper motorX(1, MOTOR_X_STEP_PIN, MOTOR_X_DIR_PIN);
AccelStepper motorY(1, MOTOR_Y_STEP_PIN, MOTOR_Y_DIR_PIN); AccelStepper motorY(1, MOTOR_Y_STEP_PIN, MOTOR_Y_DIR_PIN);
AccelStepper motorZ(1, MOTOR_Z_STEP_PIN, MOTOR_Z_DIR_PIN); AccelStepper motorZ(1, MOTOR_Z_STEP_PIN, MOTOR_Z_DIR_PIN);
AccelStepper motorA(1, MOTOR_A_STEP_PIN, MOTOR_A_DIR_PIN); AccelStepper motorA(1, MOTOR_A_STEP_PIN, MOTOR_A_DIR_PIN);
//=============================================================================================// //=============================================================================================//
// Function declarations // Function declarations
//=============================================================================================// //=============================================================================================//
void stepperSetup(); void stepperSetup();
void processCommand(String command); void processCommand(String command);
String receivedMessage = ""; String receivedMessage = "";
void setup() void setup()
{
Serial.begin(115200);
stepperSetup();
}
void loop()
{
// Process any available serial data
while (Serial.available())
{ {
char incomingChar = Serial.read(); Serial.begin(115200);
stepperSetup();
}
if (incomingChar == '\n') void loop()
{
// Process any available serial data
while (Serial.available())
{
char incomingChar = Serial.read();
if (incomingChar == '\n')
{
processCommand(receivedMessage);
Serial.println(receivedMessage);
receivedMessage = "";
}
else
{
// Add the character to the message until the message is complete
receivedMessage += incomingChar;
}
}
// Run the motors (non-blocking)
motorX.run();
motorY.run();
motorZ.run();
motorA.run();
}
// Process incoming commands in format "motor#,speed"
void processCommand(String command)
{
// Find the comma position
int commaIndex = command.indexOf(',');
// Make sure the command has a comma
if (commaIndex < 0)
{ {
processCommand(receivedMessage);
Serial.println(receivedMessage);
receivedMessage = ""; receivedMessage = "";
return;
} }
else
// Seperate the motor number and speed value
int motorNum = command.substring(0, commaIndex).toInt();
int motorSpeed = command.substring(commaIndex + 1).toInt();
// number 1-4 for motors
switch (motorNum)
{ {
// Add the character to the message until the message is complete case 1:
receivedMessage += incomingChar; motorX.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorX.stop();
}
else
{
motorX.move(motorSpeed * 100); // just keep moving until told otherwise and the * 100 is so it rotates the correct direction
motorX.setMaxSpeed(motorSpeed);
}
break;
case 2:
motorY.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorY.stop();
}
else
{
motorY.move(motorSpeed * 100);
motorY.setMaxSpeed(motorSpeed);
}
break;
case 3:
motorZ.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorZ.stop();
}
else
{
motorZ.move(motorSpeed * 100);
motorZ.setMaxSpeed(motorSpeed);
}
break;
case 4:
motorA.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorA.stop();
}
else
{
motorA.move(motorSpeed * 100);
motorA.setMaxSpeed(motorSpeed);
}
break;
default:
break;
} }
} }
// Run the motors (non-blocking) void stepperSetup()
motorX.run();
motorY.run();
motorZ.run();
motorA.run();
}
// Process incoming commands in format "motor#,speed"
void processCommand(String command)
{
// Find the comma position
int commaIndex = command.indexOf(',');
// Make sure the command has a comma
if (commaIndex < 0)
{ {
receivedMessage = ""; pinMode(MOTOR_X_ENABLE_PIN, OUTPUT);
return; pinMode(MOTOR_Y_ENABLE_PIN, OUTPUT);
pinMode(MOTOR_Z_ENABLE_PIN, OUTPUT);
pinMode(MOTOR_A_ENABLE_PIN, OUTPUT);
motorX.setEnablePin(MOTOR_X_ENABLE_PIN);
motorX.setPinsInverted(false, false, true);
motorX.setAcceleration(800);
motorX.setMaxSpeed(800);
motorX.setSpeed(800);
motorX.enableOutputs();
motorY.setEnablePin(MOTOR_Y_ENABLE_PIN);
motorY.setPinsInverted(false, false, true);
motorY.setAcceleration(800);
motorY.setMaxSpeed(800);
motorY.setSpeed(800);
motorY.enableOutputs();
motorZ.setEnablePin(MOTOR_Z_ENABLE_PIN);
motorZ.setPinsInverted(false, false, true);
motorZ.setAcceleration(800);
motorZ.setMaxSpeed(800);
motorZ.setSpeed(800);
motorZ.enableOutputs();
motorA.setEnablePin(MOTOR_Z_ENABLE_PIN);
motorA.setPinsInverted(false, false, true);
motorA.setAcceleration(800);
motorA.setMaxSpeed(800);
motorA.setSpeed(800);
motorA.enableOutputs();
} }
```
// Seperate the motor number and speed value
int motorNum = command.substring(0, commaIndex).toInt();
int motorSpeed = command.substring(commaIndex + 1).toInt();
// number 1-4 for motors
switch (motorNum)
{
case 1:
motorX.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorX.stop();
}
else
{
motorX.move(motorSpeed * 100); // just keep moving until told otherwise and the * 100 is so it rotates the correct direction
motorX.setMaxSpeed(motorSpeed);
}
break;
case 2:
motorY.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorY.stop();
}
else
{
motorY.move(motorSpeed * 100);
motorY.setMaxSpeed(motorSpeed);
}
break;
case 3:
motorZ.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorZ.stop();
}
else
{
motorZ.move(motorSpeed * 100);
motorZ.setMaxSpeed(motorSpeed);
}
break;
case 4:
motorA.setSpeed(motorSpeed);
if (motorSpeed == 0)
{
motorA.stop();
}
else
{
motorA.move(motorSpeed * 100);
motorA.setMaxSpeed(motorSpeed);
}
break;
default:
break;
}
}
void stepperSetup()
{
pinMode(MOTOR_X_ENABLE_PIN, OUTPUT);
pinMode(MOTOR_Y_ENABLE_PIN, OUTPUT);
pinMode(MOTOR_Z_ENABLE_PIN, OUTPUT);
pinMode(MOTOR_A_ENABLE_PIN, OUTPUT);
motorX.setEnablePin(MOTOR_X_ENABLE_PIN);
motorX.setPinsInverted(false, false, true);
motorX.setAcceleration(800);
motorX.setMaxSpeed(800);
motorX.setSpeed(800);
motorX.enableOutputs();
motorY.setEnablePin(MOTOR_Y_ENABLE_PIN);
motorY.setPinsInverted(false, false, true);
motorY.setAcceleration(800);
motorY.setMaxSpeed(800);
motorY.setSpeed(800);
motorY.enableOutputs();
motorZ.setEnablePin(MOTOR_Z_ENABLE_PIN);
motorZ.setPinsInverted(false, false, true);
motorZ.setAcceleration(800);
motorZ.setMaxSpeed(800);
motorZ.setSpeed(800);
motorZ.enableOutputs();
motorA.setEnablePin(MOTOR_Z_ENABLE_PIN);
motorA.setPinsInverted(false, false, true);
motorA.setAcceleration(800);
motorA.setMaxSpeed(800);
motorA.setSpeed(800);
motorA.enableOutputs();
}
```
So now I could send commands to the motors over Serial and see the motors spin in realtime. The command is structured like this. `1,500` Where 1 is the motor number and 500 is the speed of the motor. So like this I could control every motor separately. So now I could send commands to the motors over Serial and see the motors spin in realtime. The command is structured like this. `1,500` Where 1 is the motor number and 500 is the speed of the motor. So like this I could control every motor separately.