mirror of
https://gitlab.waag.org/make/fablab/interns/2025/sam.git
synced 2025-08-03 11:54:58 +00:00
formatting
This commit is contained in:
@@ -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.
|
Reference in New Issue
Block a user