StepperUNO Library 1.4: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
=Installation= | =Installation= | ||
Line 147: | Line 145: | ||
Returns true if acceleration is enabled. false otherwise. | Returns true if acceleration is enabled. false otherwise. | ||
==Usage Example== | |||
The installation package contains a set of examples. We are showing the most basic example below. | |||
<syntaxhighlight lang="python"> | |||
// simpledrive v1.3 | |||
// lechacal.com | |||
// Example usage of stepperUNO library | |||
// drive a single motor with left/right button | |||
// library: stepperUNO_v1.4 | |||
#define Pot 3 // Potentiometer is on pin 3 | |||
#include <LiquidCrystal.h> | |||
#include <stepperUNO.h> | |||
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | |||
keypad Keypad; | |||
stepMOTOR motor1; | |||
const int Nstep = 200; // Enter here the number of step/rev for your motor | |||
void setup() { | |||
motor1.begin(0x4, Nstep); // Motor 1 is at address 0x5. Motor 2 on 0x4 | |||
motor1.enable(); | |||
lcd.begin(16, 2); //LCD INITIALISATION | |||
lcd.setCursor(0, 0); | |||
lcd.print("READY"); | |||
} | |||
void loop() { | |||
int POTval = analogRead(Pot); | |||
int rpm = map(POTval, 0, 1023, 5, 500); // Speed range from 5 to 500rpm | |||
Keypad.ReadKey(); | |||
if (Keypad.state == PRESSED_RIGHT) { | |||
motor1.set_direction(true); | |||
motor1.set_speed_rpm(rpm); | |||
motor1.start(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("RIGHT"); | |||
Keypad.closeEvent(); // Must be here to indicate we are done with the event | |||
} | |||
else if (Keypad.state == PRESSED_LEFT) { | |||
motor1.set_direction(false); | |||
motor1.set_speed_rpm(rpm); | |||
motor1.start(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("LEFT "); | |||
Keypad.closeEvent(); | |||
} | |||
else if ( Keypad.state == RELEASED_RIGHT ) { | |||
motor1.stop(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("READY"); | |||
Keypad.closeEvent(); | |||
} | |||
else if ( Keypad.state == RELEASED_LEFT ) { | |||
motor1.stop(); | |||
lcd.setCursor(0, 0); | |||
lcd.print("READY"); | |||
Keypad.closeEvent(); | |||
} | |||
}//end loop | |||
</syntaxhighlight> |
Revision as of 20:01, 1 October 2021
Installation
Download the zip file from Stepper_UNO_v1.0#Files.
Copy the StepperUNO folder in the sketchbook/library directory.
Download
Configuration
Open the config.h file in the library/stepperUNO folder.
Change the KEYPAD_VERSION value as needed. Value should be 0 1 or 2. If you do not know just try one or the other and see how the button reacts.
Function list
Keypad
If the keypad does not reply correctly on the left/right/up/down/select button then a calibration should be performed. Values should be changed in the .h file of the library.
uint8_t ReadKey()
This function should be called as often as possible. Typically inside the main loop. This will update the Keypad.state variable with one of the defined event below.
#define PRESSED_NONE 0 #define PRESSED_RIGHT 1 #define PRESSED_UP 2 #define PRESSED_DOWN 3 #define PRESSED_LEFT 4 #define PRESSED_SELECT 5 #define RELEASED_NONE 6 #define RELEASED_RIGHT 7 #define RELEASED_UP 8 #define RELEASED_DOWN 9 #define RELEASED_LEFT 10 #define RELEASED_SELECT 11
Note this function does not manage the RST button. Use RstReadKey instead.
bool RstReadKey()
Same as above but for the RST button only.
The RST button is a special case. It has its own pin to the arduino mcu.
#define PRESSED_RST 12 #define RELEASED_RST 13 #define LONG_PRESSED_RST 14 #define LONG_RELEASED_RST 15
On a conventional Arduino UNO these LCD keypad will connect the RST button directly to the reset of the arduino. This is a waste in our opinion and we have re-routed this button for using it on something more useful.
uint8_t state
Event state. Will be equal to one of the define listed above once an event has occurred.
uint8_t rst_state
Same as state but for the RST button only.
void closeEvent()
Must be called once all action have been executed for a given event.
void rst_closeEvent()
Must be called once all action have been executed for a given event on the RST button.
Motor Control
void set_speed(uint16_t step_delay)
Set the motor speed.
step_delay is the delay between steps in microseconds.
uint8_t set_speed_rpm(float rpm)
Set the motor speed.
rpm is the rotation speed.
This function will check for minimum speed to avoid a step_delay larger than 65535. Returns 0 is successful. 1 otherwise.
void setDirection(bool dir);
Set the direction.
void enable();
Enable the motor driver. Holds torque on the motor.
void disable();
Disable the motor. Allows the motor to spin freely.
void step();
Perform one single step.
void start();
Start the motor.
void stop()
Stop the motor. Will slow down and stop if acceleration is on.
void brute_stop()
Stop the motor immediately regardless of acceleration state. If acceleration is off this will be no different than stop().
void begin(uint8_t _address, uint16_t n_step)
Initialiser to be used in Setup section of Arduino. address parameter is the i2c address of the motor controller. Usually 0x04 or 0x05.
n_step is the number of steps per revolution the motor executes. See relevant datasheet. This should be modified accordingly if microstepping.
void goto_position(int32_t goto_position)
Move motor to the given position. 'goto_position' is the position in terms of step number.
void set_position(int32_t new_position)
Modify set position. This is similar as setting the tare.
int32_t get_position()
Returns current motor position.
void set_acceleration(int16_t Acc)
Set the acceleration level. Default is 1000step/s/s.
void acceleration_on()
Set acceleration on.
void acceleration_off()
Set acceleration off.
bool running
Indicates if the motor is running.
bool direction
Indicates the motor direction.
float min_rpm
Returns the smallest rpm that can be used. Calculated when begin() is called.
float rpm
Current speed in rpm. This is only valid if the set_speed_rpm function is used.
uint16_t step_delay
Step delay currently used. This is updated when calling set_speed() and set_speed_rpm().
bool acceleration
Returns true if acceleration is enabled. false otherwise.
Usage Example
The installation package contains a set of examples. We are showing the most basic example below.
// simpledrive v1.3
// lechacal.com
// Example usage of stepperUNO library
// drive a single motor with left/right button
// library: stepperUNO_v1.4
#define Pot 3 // Potentiometer is on pin 3
#include <LiquidCrystal.h>
#include <stepperUNO.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
keypad Keypad;
stepMOTOR motor1;
const int Nstep = 200; // Enter here the number of step/rev for your motor
void setup() {
motor1.begin(0x4, Nstep); // Motor 1 is at address 0x5. Motor 2 on 0x4
motor1.enable();
lcd.begin(16, 2); //LCD INITIALISATION
lcd.setCursor(0, 0);
lcd.print("READY");
}
void loop() {
int POTval = analogRead(Pot);
int rpm = map(POTval, 0, 1023, 5, 500); // Speed range from 5 to 500rpm
Keypad.ReadKey();
if (Keypad.state == PRESSED_RIGHT) {
motor1.set_direction(true);
motor1.set_speed_rpm(rpm);
motor1.start();
lcd.setCursor(0, 0);
lcd.print("RIGHT");
Keypad.closeEvent(); // Must be here to indicate we are done with the event
}
else if (Keypad.state == PRESSED_LEFT) {
motor1.set_direction(false);
motor1.set_speed_rpm(rpm);
motor1.start();
lcd.setCursor(0, 0);
lcd.print("LEFT ");
Keypad.closeEvent();
}
else if ( Keypad.state == RELEASED_RIGHT ) {
motor1.stop();
lcd.setCursor(0, 0);
lcd.print("READY");
Keypad.closeEvent();
}
else if ( Keypad.state == RELEASED_LEFT ) {
motor1.stop();
lcd.setCursor(0, 0);
lcd.print("READY");
Keypad.closeEvent();
}
}//end loop