diff --git a/pid-example/pid-example.ino b/pid-example/pid-example.ino index d69957a..292f1b0 100644 --- a/pid-example/pid-example.ino +++ b/pid-example/pid-example.ino @@ -4,9 +4,9 @@ QTRSensors qtr; const uint8_t SensorCount = 8; uint16_t sensorValues[SensorCount]; -float Kp = 0.09;//set up the constants value +float Kp = 0.093;//set up the constants value float Ki = 0.0008; -float Kd = 0.34; +float Kd = 0.6; int P; int I; int D; @@ -95,7 +95,38 @@ void forward_brake(int posa, int posb) { analogWrite(aenbl, posa); analogWrite(benbl, posb); } -void PID_control() { + +void left_brake(int posa, int posb) { + digitalWrite(aphase, LOW); + digitalWrite(bphase, LOW); + analogWrite(aenbl, posa); + analogWrite(benbl, posb); +} +void right_brake(int posa, int posb) { + digitalWrite(aphase, HIGH); + digitalWrite(bphase, HIGH); + analogWrite(aenbl, posa); + analogWrite(benbl, posb); +} + +void speedcontrol(int mota, int motb) { + if (mota >= 0 && motb >= 0) { + forward_brake(mota, motb); + } + if (mota < 0 && motb >= 0) { + //dreapta + mota = 0 - mota; + right_brake(mota, motb); + + } + if (mota >= 0 && motb < 0) { + //stanga + motb = 0 - motb; + left_brake(mota, motb); + } +} + +void PID_control() { uint16_t position = qtr.readLineBlack(sensorValues); int error = 3500 - position; @@ -121,5 +152,5 @@ void PID_control() { motorspeedb = minspeedb; } //Serial.print(motorspeeda);Serial.print(" ");Serial.println(motorspeedb); - forward_brake(motorspeeda, motorspeedb); + speedcontrol(motorspeeda, motorspeedb); }