#define ENCODER_CLK 34
#define ENCODER_DT 35
#define ENCODER_SW 32
volatile int velocidad;
volatile int dt;
volatile int lastClk = HIGH;
volatile int marcha = HIGH;
volatile int incremento=4;
#define Ap 19 // A+ line
#define Am 18 // A- line
#define Bp 21 // .
#define Bm 22 // .
void setup() {
Serial.begin(115200);
pinMode(ENCODER_CLK, INPUT_PULLUP);
pinMode(ENCODER_DT, INPUT_PULLUP);
pinMode(ENCODER_SW, INPUT_PULLUP);
pinMode(Ap,OUTPUT); pinMode(Am,OUTPUT);
pinMode(Bp,OUTPUT); pinMode(Bm,OUTPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
attachInterrupt(digitalPinToInterrupt(ENCODER_SW), detener, FALLING );
velocidad=10;
dt=calcularDelay(velocidad);
Serial.println(velocidad);
}
void loop() {
if ( marcha==1){
if (velocidad>0){
clockwise ();
}
else{
c_clockwise ();
}
}
}
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
velocidad=velocidad+incremento;
if (velocidad!=0){
dt=calcularDelay(velocidad);
}
}
if (dtValue == LOW) {
velocidad=velocidad-incremento;
if (velocidad!=0){
dt=calcularDelay(velocidad);
}
}
Serial.println(velocidad);
}
void detener(){
marcha=!marcha;
}
int calcularDelay(int vel){
volatile int delaytime;
delaytime=(int(600/(4*abs(vel))));
return delaytime;
}
void clockwise (void){
delay(dt);
digitalWrite(Bm,LOW) ; digitalWrite(Ap,HIGH);
delay(dt);
digitalWrite(Ap,LOW) ; digitalWrite(Bp,HIGH);
delay(dt);
digitalWrite(Bp,LOW) ; digitalWrite(Am,HIGH);
delay(dt);
digitalWrite(Am,LOW) ; digitalWrite(Bm,HIGH);
}
void c_clockwise (void){
delay(dt);
digitalWrite(Am,LOW) ; digitalWrite(Bp,HIGH);
delay(dt);
digitalWrite(Bp,LOW) ; digitalWrite(Ap,HIGH);
delay(dt);
digitalWrite(Ap,LOW) ; digitalWrite(Bm,HIGH);
delay(dt);
digitalWrite(Bm,LOW) ; digitalWrite(Am,HIGH);
}