Please guide me on below prorgam. I want to home the stepper when ever motor starts, be it normal start or after abrupt power failure.
I am using EEPROM to define Zero position initially and then reading predefined position to center arm at start.
I am not getting desired results. Please guide.
#include <AccelStepper.h>
#include <EEPROM.h>
//RF24 radio(9, 10); // CE, CSN
int x , i , ang , arm_sp;
int EncA = 4; //EA+ from encoder
int EncB = 5; //EB+ from encoder
const int AC = 8; // button
int Zero_Pos, Current_Pos;
int buttonstate = HIGH;
AccelStepper stepper(1, 7, 6);
void setup()
{
// EEPROM.write(0, 0);
Serial.begin(9600);
Zero_Pos = EEPROM.read(0);
// Serial.println("Zero_Pos");
// Serial.print(": ");
// Serial.print(Zero_Pos);
pinMode(EncA, INPUT);
pinMode(EncB, INPUT);
pinMode(AC, INPUT);
Current_Pos = ((digitalRead(EncB)));
// Serial.println("Current_Pos");
// Serial.print(": ");
// Serial.print(Current_Pos);
if (Zero_Pos != Current_Pos) {
stepper.setMaxSpeed(1000);
int accelaration = 250;
stepper.setSpeed(500);
stepper.setAcceleration(accelaration); // Set Acceleration
stepper.moveTo(Zero_Pos);
stepper.runToPosition();
}
return;
}
void loop()
{
arm();
}
void arm()
{
buttonstate = digitalRead(AC);
if ( buttonstate == LOW)
{
int ang = 50;
int arm_sp = 500;
// ang = map( ang , 0 , 860 , 160 , 320 ); // mapping angle with Pot value. Pot max value is 860.
stepper.setMaxSpeed(arm_sp); // change the speed by pot setting.
stepper.setAcceleration(1.10 * arm_sp); // Set Acceleration
ang = ang * 20; // to include gear ratio
stepper.moveTo(ang / 2); // Run to target position with set speed and acceleration/deceleration:
stepper.runToPosition();
delay(100);
stepper.moveTo(-ang); // Reverse direction
stepper.runToPosition();
delay(100);
stepper.moveTo(ang / 2); // Reverse direction
stepper.runToPosition();
delay(100);
// Serial.println(buttonstate);
// Serial.println(ang);
Serial.println("In Loop");
}
else
Serial.println("Not in loop");
// exit;
}