Hello
I'm using arduino for driving stepper motor with L298N shield. I managed to code some functions like fullstep, halfstep etc. I used switch to move between functions but after couple changes of case it brakes. i can still pick desired case but if statement with (actualTime - storedTime >= predkosc) doesnt seem to work anymore. Any suggestions ?
#include <LiquidCrystal.h>
#include <Bounce2.h>
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 6, 7, 8, 9);
int stepCount = 0; // number of steps the motor has taken
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
int buttonPin=10;
int buttonNew;
int buttonOld=0;
int LCDState=0;
int dt=500;
int buttonPin2=13;
int controloption;
int count=0;
unsigned int predkosc;
int pot=A1;
const int Step1Pin=6;
const int Step2Pin=7;
const int Step3Pin=8;
const int Step4Pin=9;
int actualTime = 0;
int storedTime=0;
int stepNo=0;
int czujnik=0;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Bounce debouncer = Bounce();
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
// Po konfiguracji przycisku, ustawienie działania funkcji Bounce :
debouncer.attach(buttonPin);
debouncer.interval(25); // interwał w ms
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
}
void loop()
{
czujnik=analogRead(pot);
predkosc = map(czujnik, 1, 1000, -10, 1000);
Serial.println(predkosc);
int button1_last = 0;
int button1_state = digitalRead(buttonPin);
int button2state=digitalRead(buttonPin2);
if (button1_state != button1_last){//debouncer2
delay(50);
button1_state = digitalRead(buttonPin);
}
while (button1_state != button1_last)
{
count++;
storedTime=actualTime;
button1_last = button1_state;
delay(50);
if (count >= 5) {
count = 1;
}
}
switch (count) {
case 1:
lcd.print("sterowanie");
lcd.println("pelnokrokowe");
actualTime=millis();
if (actualTime - storedTime >= predkosc) {
if (stepNo == 1) {
digitalWrite(Step1Pin, HIGH);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, HIGH);
} if (stepNo == 2) {
digitalWrite(Step1Pin, HIGH);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, HIGH);
digitalWrite(Step4Pin, LOW);
} if (stepNo == 3) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, HIGH);
digitalWrite(Step3Pin, HIGH);
digitalWrite(Step4Pin, LOW);
} if (stepNo == 4) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, HIGH);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, HIGH);
stepNo = 0;
}
stepNo++;
storedTime = actualTime;
}
if (button2state==0){
lcd.clear();
lcd.print("zalaczono funkcje");
delay(1000);}
break;
case 2:
lcd.clear();
lcd.print("sterowanie");
lcd.println("falowe");
actualTime=millis();
if (actualTime - storedTime >= predkosc) {
if (stepNo == 1) {
digitalWrite(Step1Pin, LOW); //B+
digitalWrite(Step2Pin, LOW);//B-
digitalWrite(Step3Pin, HIGH);//A+
digitalWrite(Step4Pin, LOW);//A-
} if (stepNo == 2) {
digitalWrite(Step1Pin, HIGH);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, LOW);
} if (stepNo == 3) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, HIGH);
} if (stepNo == 4) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, HIGH);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, LOW);
stepNo = 0;
}
stepNo++;
storedTime = actualTime;
}
break;
case 3:
lcd.clear();
lcd.print("silnik prawo");
if (button2state==0){
lcd.clear();
lcd.print("zalaczono funkcje");
//delay(1);
myStepper.step(1);
stepCount++;
}
break;
case 4:
lcd.clear();
lcd.print("sterowanie");
lcd.println("polkrokowe");
actualTime=millis();
if (actualTime - storedTime >= predkosc)
{
if (stepNo == 1) { // A+B+ A-B+ A-B- A+B-
digitalWrite(Step1Pin, LOW); //B+ A+0 A+B+ 0B+ A-B+ A-0 A-B- 0B- A+B-
digitalWrite(Step2Pin, LOW); //B-
digitalWrite(Step3Pin, LOW);// A-
digitalWrite(Step4Pin, HIGH); //A+
} if (stepNo == 2) {
digitalWrite(Step1Pin, HIGH);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, HIGH);
} if (stepNo == 3) {
digitalWrite(Step1Pin, HIGH);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, LOW);
} if (stepNo == 4) {
digitalWrite(Step1Pin, HIGH);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, HIGH);
digitalWrite(Step4Pin, LOW);
}
if (stepNo == 5) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, LOW);
digitalWrite(Step3Pin, HIGH);
digitalWrite(Step4Pin, LOW);
}
if (stepNo == 6) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, HIGH);
digitalWrite(Step3Pin, HIGH);
digitalWrite(Step4Pin, LOW);
}
if (stepNo == 7) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, HIGH);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, LOW);
}
if (stepNo == 8) {
digitalWrite(Step1Pin, LOW);
digitalWrite(Step2Pin, HIGH);
digitalWrite(Step3Pin, LOW);
digitalWrite(Step4Pin, HIGH);
stepNo = 0;
}
stepNo++;
storedTime = actualTime;
}
break;
}
}