#include <AccelStepper.h>
// Define stepper pins
AccelStepper stepper(AccelStepper::DRIVER, 5, 17);
long startUp = 200;
int posUp = -200;
int posDown = 0;
int state = 0;
const byte hallPin = 33;
unsigned long previousMillis = 0;
const byte buttonPin = 12;
int hallState = HIGH; //Halleffect sensoris pulled high
int bulbPin0 = 15; // LED connected to digital pin 5
int bulbPin1 = 2; // LED connected to digital pin 6
int bulbPin2 = 0; // LED connected to digital pin 9
bool startFlag = 0; // has the homeprocess initalised?
bool toggle = LOW; // has init down happend?
bool button;
const long wait = 1000; // interval at which to wait (milliseconds)
void setup()
{
digitalWrite(bulbPin0, LOW); //turn leds off
digitalWrite(bulbPin1, LOW);
digitalWrite(bulbPin2, LOW);
Serial.begin(9600);
stepper.setMaxSpeed(500);
stepper.setAcceleration(1000);
// stepper.setEnablePin(10);
// stepper.setPinsInverted(false, false, true);
pinMode(hallPin, INPUT_PULLUP);
pinMode(buttonPin, INPUT_PULLUP);
delay(1000);
}
void loop()
{
if (startFlag == 0) {
stepper.setCurrentPosition(0);
//set home position in case of powerloss
if ((startFlag == 0) && (hallState == 1)) {
stepper.moveTo(startUp);
}
if (hallState == 0) {
stepper.stop();
stepper.setCurrentPosition(0);
stepper.setMaxSpeed(500);
stepper.setAcceleration(1000);
startFlag = 1; //startup has finished
}
}
if (startFlag == 1);
{
if (stepper.currentPosition() == posUp); {
state = 0;
// stepper.disableOutputs();
digitalWrite(bulbPin0, 1);
digitalWrite(bulbPin1, 1);
digitalWrite(bulbPin2, 1);
}
if (stepper.currentPosition() < 450); {
state = 1;
//stepper.disableOutputs();
digitalWrite(bulbPin0, 0);
digitalWrite(bulbPin1, 0);
digitalWrite(bulbPin2, 0);
}
if (button == 0); {
moveDown();
}
if (button == 1); {
moveUp();
}
}
stepper.run();
showPos();
}
void showPos()
{
hallState = digitalRead(hallPin); //Read home halleffect sensor
button = digitalRead(buttonPin); //Read button
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= wait) {
// save the last time
previousMillis = currentMillis;
Serial.print("pos: ");
Serial.println(stepper.currentPosition());
Serial.print("hall ");
Serial.println(hallState);
Serial.print("state: ");
Serial.println(state);
Serial.print("sstartFlag: ");
Serial.println(startFlag);
Serial.print("button: ");
Serial.println(button);
Serial.print("toggle: ");
Serial.println(toggle);
}
}
void moveUp()
{
//stepper.enableOutputs();
stepper.moveTo(posUp);
}
void moveDown()
{
// stepper.enableOutputs();
stepper.moveTo(posDown);
}