#include <AccelStepper.h>
const int pulsantePin = 2;
const int switchPin = 3;
const int stepPin1 = 8;
const int stepPin2 = 9;
const int stepPin3 = 10;
const int stepPin4 = 11;
const int fineCorsaChiusuraPin = 12;
const int fineCorsaAperturaPin = 13;
enum State
{
Close,
Opening,
Open,
Closing
};
int direction = 0;
bool aperturaCompletata;
bool chiusuraCompletata;
bool pulsantePremuto = false;
State state = Close;
void setup() {
// set output
pinMode(stepPin1, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(stepPin3, OUTPUT);
pinMode(stepPin4, OUTPUT);
pinMode(pulsantePin, INPUT);
pinMode(switchPin, INPUT);
pinMode(fineCorsaChiusuraPin, INPUT);
pinMode(fineCorsaAperturaPin, INPUT);
Serial.begin(9600);
}
void loop() {
// This is Wave Fullstep motion - only one coil energized at a time
pulsantePremuto = digitalRead(pulsantePin);
direction = digitalRead(switchPin);
aperturaCompletata = digitalRead(fineCorsaAperturaPin);
chiusuraCompletata = digitalRead(fineCorsaChiusuraPin);
switch(state)
{
case Close:
if(pulsantePremuto)
{
state = Opening;
Serial.println("Opening");
}
break;
case Opening:
if(aperturaCompletata)
{
state = Open;
Serial.println("Open");
}
else
{
Step(0);
}
break;
case Open:
if(pulsantePremuto)
{
state = Closing;
Serial.println("Closing");
}
break;
case Closing:
if(chiusuraCompletata)
{
state = Close;
Serial.println("Close");
}
else
{
Step(1);
}
break;
}
}
void Step(int direction)
{
if(direction == 0)
{
delay(30);
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, HIGH);
digitalWrite(stepPin4, LOW);
delay(30);
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, HIGH);
digitalWrite(stepPin3, HIGH);
digitalWrite(stepPin4, LOW);
delay(30);
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, HIGH);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, HIGH);
delay(30);
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, HIGH);
delay(30);
}
else
{
delay(30);
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, HIGH);
delay(30);
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, HIGH);
digitalWrite(stepPin3, LOW);
digitalWrite(stepPin4, HIGH);
delay(30);
digitalWrite(stepPin1, LOW);
digitalWrite(stepPin2, HIGH);
digitalWrite(stepPin3, HIGH);
digitalWrite(stepPin4, LOW);
delay(30);
digitalWrite(stepPin1, HIGH);
digitalWrite(stepPin2, LOW);
digitalWrite(stepPin3, HIGH);
digitalWrite(stepPin4, LOW);
delay(30);
}
}