my code is working correctly but the thing is, my encoder code is somehow wrong and because of that i am getting only possitive count values for both Clock wise & anti clock wise direction. Someone please correctify it -
code :
int PWM = 10;
#define in1 6
#define in2 7
#define outA 2
#define outB 3
signed volatile long counter ;
// signed volatile long old ;
float u;
float kp = 1;
void setup(){
// counter = old ;
Serial.begin(9600);
pinMode(PWM, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(outA, INPUT);
pinMode(outB, INPUT);
pinMode(outA, INPUT_PULLUP);
pinMode(outB, INPUT_PULLUP);
attachInterrupt( digitalPinToInterrupt(2) , count, RISING);
}
float reference = 1000;
float error;
bool CW(){
analogWrite(PWM, u);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
}
bool CCW(){
analogWrite(PWM, u);
digitalWrite(in2, HIGH);
digitalWrite(in1, LOW);
}
void PID(){
error = reference - counter;
u = kp*error ;
}
void count(){
if(digitalRead(outB) == digitalRead(outA) ) {
counter = counter + 1;
}
else {
counter = counter - 1;
}
// noInterrupts();
}
void loop(){
PID();
if(u > 255 ){
u =255;
CW();
}
else if(u > 0 ){
u = u;
CW();
}
else if (u < -255){
u = -255;
CCW();
}
else if( u < 0){
u= -u;
CCW();
}
Serial.print(reference);
Serial.print(" ");
Serial.print(counter);
Serial.print(" ");
Serial.print(" ");
Serial.println(u);
// old =counter ;
}