removed example sketch
This commit is contained in:
@@ -1,153 +0,0 @@
|
||||
#include <Stepper.h>
|
||||
|
||||
|
||||
#define BAUDRATE 115200
|
||||
|
||||
#define STEPPERPIN1 11
|
||||
#define STEPPERPIN2 10
|
||||
#define STEPPERPIN3 9
|
||||
#define STEPPERPIN4 8
|
||||
#define STEPS 2038 //28BYJ-48 stepper, number of steps
|
||||
#define HALLPIN 7 //Pin of hall sensor
|
||||
#define AMOUNTFLAPS 45
|
||||
|
||||
#define ROTATIONDIRECTION 1 //-1 for reverse direction
|
||||
#define OVERHEATINGTIMEOUT 2 //timeout in seconds to avoid overheating of stepper. After starting rotation, the counter will start. Stepper won't move again until timeout is passed
|
||||
unsigned long lastRotation = 0;
|
||||
|
||||
//globals
|
||||
int displayedLetter = 0; //currently shown letter
|
||||
int desiredLetter = 0; //letter to be shown
|
||||
const String letters[] = {" ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "Ä", "Ö", "Ü", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ".", "-", "?", "!"};
|
||||
Stepper stepper(STEPS, STEPPERPIN1, STEPPERPIN3, STEPPERPIN2, STEPPERPIN4); //stepper setup
|
||||
bool lastInd1 = false; //store last status of phase
|
||||
bool lastInd2 = false; //store last status of phase
|
||||
bool lastInd3 = false; //store last status of phase
|
||||
bool lastInd4 = false; //store last status of phase
|
||||
float missedSteps = 0; //cummulate steps <1, to compensate via additional step when reaching >1
|
||||
int currentlyrotating = 0; // 1 = drum is currently rotating, 0 = drum is standing still
|
||||
int stepperSpeed = 10; //current speed of stepper, value only for first homing
|
||||
|
||||
int eeAddress = 0; //EEPROM address for calibration offset
|
||||
int calOffset; //Offset for calibration in steps, stored in EEPROM, gets read in setup
|
||||
int receivedNumber = 0;
|
||||
|
||||
|
||||
void setup() {
|
||||
// put your setup code here, to run once:
|
||||
Serial.begin(BAUDRATE);
|
||||
Serial.println("starting unit");
|
||||
stepperSpeed = 17; //until homing is implemented
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// put your main code here, to run repeatedly:
|
||||
int calLetters[10] = {0, 26, 1, 21, 14, 43, 30, 31, 32, 39};
|
||||
for (int i = 0; i < 10; i++) {
|
||||
int currentCalLetter = calLetters[i];
|
||||
rotateToLetter(currentCalLetter);
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
|
||||
//rotate to letter
|
||||
void rotateToLetter(int toLetter) {
|
||||
if (lastRotation == 0 || (millis() - lastRotation > OVERHEATINGTIMEOUT * 1000)) {
|
||||
lastRotation = millis();
|
||||
//get letter position
|
||||
int posLetter = -1;
|
||||
posLetter = toLetter;
|
||||
int posCurrentLetter = -1;
|
||||
posCurrentLetter = displayedLetter;
|
||||
//int amountLetters = sizeof(letters) / sizeof(String);
|
||||
#ifdef serial
|
||||
Serial.print("go to letter: ");
|
||||
Serial.println(letters[toLetter]);
|
||||
#endif
|
||||
//go to letter, but only if available (>-1)
|
||||
if (posLetter > -1) { //check if letter exists
|
||||
//check if letter is on higher index, then no full rotaion is needed
|
||||
if (posLetter >= posCurrentLetter) {
|
||||
#ifdef serial
|
||||
Serial.println("direct");
|
||||
#endif
|
||||
//go directly to next letter, get steps from current letter to target letter
|
||||
int diffPosition = posLetter - posCurrentLetter;
|
||||
startMotor();
|
||||
stepper.setSpeed(stepperSpeed);
|
||||
//doing the rotation letterwise
|
||||
for (int i = 0; i < diffPosition; i++) {
|
||||
float preciseStep = (float)STEPS / (float)AMOUNTFLAPS;
|
||||
int roundedStep = (int)preciseStep;
|
||||
missedSteps = missedSteps + ((float)preciseStep - (float)roundedStep);
|
||||
if (missedSteps > 1) {
|
||||
roundedStep = roundedStep + 1;
|
||||
missedSteps--;
|
||||
}
|
||||
stepper.step(ROTATIONDIRECTION * roundedStep);
|
||||
}
|
||||
}
|
||||
else {
|
||||
//full rotation is needed, good time for a calibration
|
||||
#ifdef serial
|
||||
Serial.println("full rotation incl. calibration");
|
||||
#endif
|
||||
//calibrate(false); //calibrate revolver and do not stop motor
|
||||
//startMotor();
|
||||
stepper.setSpeed(stepperSpeed);
|
||||
for (int i = 0; i < posLetter; i++) {
|
||||
float preciseStep = (float)STEPS / (float)AMOUNTFLAPS;
|
||||
int roundedStep = (int)preciseStep;
|
||||
missedSteps = missedSteps + (float)preciseStep - (float)roundedStep;
|
||||
if (missedSteps > 1) {
|
||||
roundedStep = roundedStep + 1;
|
||||
missedSteps--;
|
||||
}
|
||||
stepper.step(ROTATIONDIRECTION * roundedStep);
|
||||
}
|
||||
}
|
||||
//store new position
|
||||
displayedLetter = toLetter;
|
||||
//rotation is done, stop the motor
|
||||
delay(100); //important to stop rotation before shutting of the motor to avoid rotation after switching off current
|
||||
stopMotor();
|
||||
}
|
||||
else {
|
||||
#ifdef serial
|
||||
Serial.println("letter unknown, go to space");
|
||||
#endif
|
||||
desiredLetter = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//switching off the motor driver
|
||||
void stopMotor() {
|
||||
lastInd1 = digitalRead(STEPPERPIN1);
|
||||
lastInd2 = digitalRead(STEPPERPIN2);
|
||||
lastInd3 = digitalRead(STEPPERPIN3);
|
||||
lastInd4 = digitalRead(STEPPERPIN4);
|
||||
|
||||
digitalWrite(STEPPERPIN1, LOW);
|
||||
digitalWrite(STEPPERPIN2, LOW);
|
||||
digitalWrite(STEPPERPIN3, LOW);
|
||||
digitalWrite(STEPPERPIN4, LOW);
|
||||
#ifdef serial
|
||||
Serial.println("Motor Stop");
|
||||
#endif
|
||||
currentlyrotating = 0; //set active state to not active
|
||||
delay(100);
|
||||
}
|
||||
|
||||
void startMotor() {
|
||||
#ifdef serial
|
||||
Serial.println("Motor Start");
|
||||
#endif
|
||||
currentlyrotating = 1; //set active state to active
|
||||
digitalWrite(STEPPERPIN1, lastInd1);
|
||||
digitalWrite(STEPPERPIN2, lastInd2);
|
||||
digitalWrite(STEPPERPIN3, lastInd3);
|
||||
digitalWrite(STEPPERPIN4, lastInd4);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user