#define dirPin 2
#define stepPin 3
#define btnCCW 8
#define btnCW 9
#define start 10
class button {
public:
button (byte pin) {
_pin = pin;
pinMode(_pin, INPUT);
}
bool click() {
bool btnState = digitalRead(_pin);
if (btnState && millis() - _tmr >= 250) {
_tmr = millis();
return true;
}
return false;
}
private:
byte _pin;
uint32_t _tmr;
};
void setup() {
Serial.begin(9600);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(btnCCW, INPUT);
pinMode(btnCW, INPUT);
pinMode(start, INPUT);
}
button btn1(10);
bool btn = false;
bool isPause = false;
bool cycleEnded = false;
void loop() {
if(btn1.click()) btn = true;
if (btn & !cycleEnded) {
btn = false;
Serial.println("press");
digitalWrite(dirPin, LOW);
for (int i = 0; i < 200; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(5000);
digitalWrite(stepPin, LOW);
delayMicroseconds(5000);
if(btn1.click()){
isPause = true;
//Serial.println(isPause);
Serial.println("Pause ON");
while(isPause){
delay(10);
if(btn1.click()){
Serial.println("Pause OFF");
isPause = false;
}
}
}
cycleEnded = true;
}
}
if (btn & cycleEnded) {
btn = false;
Serial.println("press");
digitalWrite(dirPin, HIGH);
for (int i = 0; i < 200; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(5000);
digitalWrite(stepPin, LOW);
delayMicroseconds(5000);
if(btn1.click()){
isPause = true;
//Serial.println(isPause);
Serial.println("Pause ON");
while(isPause){
delay(10);
if(btn1.click()){
Serial.println("Pause OFF");
isPause = false;
}
}
}
cycleEnded = false;
}
}
if(digitalRead(btnCCW) == HIGH){
digitalWrite(dirPin, LOW);
digitalWrite(stepPin, HIGH);
delayMicroseconds(5000);
digitalWrite(stepPin, LOW);
delayMicroseconds(5000);
Serial.print("A");
}
if(digitalRead(btnCW) == HIGH){
digitalWrite(dirPin, HIGH);
digitalWrite(stepPin, HIGH);
delayMicroseconds(5000);
digitalWrite(stepPin, LOW);
delayMicroseconds(5000);
Serial.print("B");
}
}