#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// #include <Stepper.h>
#include "AccelStepper.h"
#include <EEPROM.h>
int x = 0;
int state = 0;
int menubt = 13;
int upbt = 8;
int downbt = 5;
int powerbt = 10;
const int dirPin = 2;
const int stepPin = 3;
const int dirPin1 = 7;
const int stepPin1 = 6;
LiquidCrystal_I2C lcd(0x26, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display
bool menubuttonState = 0;
int menulightON = 0;
int menupushed = 0;
bool upbtState = 0;
bool downbtState = 0;
bool powerbtState = 0;
bool limitswtState = 0;
boolean didMyOneTimeAction = false;
boolean didMyOneTimeAction2 = false;
unsigned long previousMillis = 0;
const unsigned long movementInterval = 1251;
bool switch1 = 0;
int menucount = 0;
// bigmag
// long turns = 300;
// int loops = 24 ;
// int steps = 10;
// smallmag
long turns = 700;
int loops = 35 ;
int steps = 8;
int nxtsteps = 0;
int loopcount = 0;
bool direction = 0;
int turnsone = 1;
int pos = 0;
int limitswt = 4;
int buzzer = A1;
AccelStepper myStepper(1, stepPin, dirPin);
AccelStepper myStepper1(1, stepPin1, dirPin1);
void setup()
{
lcd.init();
lcd.backlight();
// EEPROM.get(0, turns);
// EEPROM.get(20, loops);
// EEPROM.get(30, steps);
// Serial.begin(115200);
pinMode(menubt, INPUT_PULLUP);
pinMode(upbt, INPUT_PULLUP);
pinMode(downbt, INPUT_PULLUP);
pinMode(powerbt, INPUT_PULLUP);
pinMode(limitswt, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("trn: ");
lcd.print(turns);
// lcd.setCursor(0, 0);
lcd.print("lop: ");
lcd.print(loops);
lcd.setCursor(0, 1);
// lcd.print(x);
lcd.print(" =turn ");
delay(3000);
myStepper.setMaxSpeed(1000);
myStepper.setAcceleration(1000);
myStepper1.setMaxSpeed(800);
myStepper1.setAcceleration(200);
myStepper1.moveTo(400 * turns);
}
void(* resetFunc) (void) = 0; //declare reset function @ address 0
void loop()
{
powerbtState = 1 - digitalRead(powerbt);
if (powerbtState == 1) {
resetFunc();
}
menufuntion() ;
if (menucount == 0) { // home screen
if (didMyOneTimeAction == 1) {
didMyOneTimeAction = 0;
x = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("trn: ");
lcd.print(turns);
// lcd.setCursor(0, 0);
lcd.print("lop: ");
lcd.print(loops);
lcd.setCursor(0, 1);
lcd.print(myStepper1.currentPosition() / 400);
lcd.print(" =turn ");
EEPROM.put(0, turns);
EEPROM.put(20, loops);
EEPROM.put(30, steps);
}
// Serial.println(myStepper.currentPosition());
// if (switch1 == 1) {
myStepper1.run();
if (myStepper1.currentPosition() % 400 == 0 && myStepper1.currentPosition() != 400 * turns) {
// myStepper1.moveTo(200);
// myStepper1.setSpeed(1000);
// myStepper1.runToPosition();
if (direction == 0) {
nxtsteps = nxtsteps + steps ;
// myStepper.moveTo(nxtsteps);
myStepper.move(steps);
myStepper.setSpeed(1000);
myStepper.runToPosition();
relayfun();
turnsone++;
loopcount++;
limitswtState = 1 - digitalRead(limitswt);
// Serial.println(limitswtState);
if (limitswtState == 1 && loopcount > 10) {
direction = 1;
loopcount = 0;
// nxtsteps = 0;
// myStepper.stop();
// myStepper.setCurrentPosition(0);
}
// Serial.println(myStepper.currentPosition());
// Serial.println("124");
// Serial.println(loopcount);
}
else {
nxtsteps = nxtsteps - steps ;
// myStepper.move(-10);
myStepper.setSpeed(1000);
myStepper.runToNewPosition(nxtsteps);
// myStepper.moveTo(-nxtsteps);
// myStepper.setSpeed(700);
// myStepper.runToNewPosition(-steps);
relayfun();
turnsone++;
loopcount++;
limitswtState = 1 - digitalRead(limitswt);
if (limitswtState == 1 && loopcount > 10) {
direction = 0;
loopcount = 0;
// nxtsteps = 0;
// myStepper.setCurrentPosition(0);
}
// Serial.println(myStepper.currentPosition());
// Serial.println("132");
// Serial.println(loopcount);
}
}
if (myStepper1.currentPosition() >= 400 * turns) {
digitalWrite(buzzer, HIGH);
// Serial.println("132");
}
// }
// else {
// myStepper2.step(-1);
// }
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= movementInterval) {
previousMillis = currentMillis;
if (switch1 == 1) {
switch1 = 0;
}
else {
switch1 = 1;
}
}
// int counter = digitalRead(A0);
// // Serial.println(digitalRead(A0));
// if (state == 0)
// {
// switch (counter) {
// case 1 : state = 1; lcd.setCursor (0, 1); x = x + 1; lcd.print(x); break;
// case 0 : state = 0; break;
// }
// }
// if (counter == LOW) {
// state = 0;
// }
}
if (menucount == 1) { // menu screen
if (didMyOneTimeAction == 1) {
didMyOneTimeAction = 0;
lcd.clear();
}
upfuntion();
downfuntion();
// Serial.println(turns);
lcd.setCursor(0, 0);
lcd.print("Trn: ");
lcd.setCursor(6, 0);
lcd.print(turns);
// lcd.setCursor(0, 1);
// lcd.print("lop: ");
// lcd.setCursor(6, 1);
// lcd.print(loops);
}
if (menucount == 2) { // menu screen
if (didMyOneTimeAction == 1) {
didMyOneTimeAction = 0;
lcd.clear();
}
upfuntion();
downfuntion();
// Serial.println(turns);
lcd.setCursor(0, 1);
lcd.print("lop: ");
lcd.setCursor(6, 1);
lcd.print(loops);
}
if (menucount == 3) { // menu screen
if (didMyOneTimeAction == 1) {
didMyOneTimeAction = 0;
lcd.clear();
}
upfuntion();
downfuntion();
// Serial.println(turns);
lcd.setCursor(0, 1);
lcd.print("stp: ");
lcd.setCursor(6, 1);
lcd.print(steps);
}
}
void menufuntion() {
menubuttonState = 1 - digitalRead(menubt);
// Serial.println(menubuttonState);
if (menubuttonState == 1) {
if (menucount == 0) {
menucount = 1;
didMyOneTimeAction = 1;
delay(500);
}
else if (menucount == 1) {
menucount = 2;
// Serial.println(menucount);
didMyOneTimeAction = 1;
delay(500);
}
else if (menucount == 2) {
menucount = 3;
// Serial.println(menucount);
didMyOneTimeAction = 1;
delay(500);
}
else {
menucount = 0;
// Serial.println(menucount);
didMyOneTimeAction = 1;
delay(500);
}
}
}
void upfuntion() {
upbtState = 1 - digitalRead(upbt);
if (upbtState == 1) {
if (menucount == 1) {
turns++;
delay(100);
}
if (menucount == 2) {
loops++;
delay(100);
}
if (menucount == 3) {
steps++;
delay(100);
}
}
}
void downfuntion() {
downbtState = 1 - digitalRead(downbt);
if (downbtState == 1) {
if (menucount == 1) {
turns--;
lcdclean(turns);
delay(100);
}
if (menucount == 2) {
loops--;
lcdclean(loops);
delay(100);
}
if (menucount == 3) {
steps--;
lcdclean(steps);
delay(100);
}
}
}
void lcdclean(int a) {
if (a == 9 || a == 99 ) {
lcd.clear();
}
}
void relayfun() {
if (x >= turns) {
// digitalWrite(relay, LOW);
}
else {
// digitalWrite(relay, HIGH);
}
}