Arduinonanofuzzypid
Arduinonanofuzzypid
h>
#include <PID_v1.h>
#define Sensorcount 8
#define EMITTER_PIN 13
QTRSensorsRC qtrrc((unsigned char[]) {A0, A1, A2, A3, A4, A5, 3, 4},
Sensorcount, EMITTER_PIN);
// PID constants
Void setup() {
// Motor pins
pinMode(IndicatorLed, OUTPUT);
pinMode(PWM_A, OUTPUT);
pinMode(PWM_B, OUTPUT);
digitalWrite(IndicatorLed, HIGH);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(stby,OUTPUT);
digitalWrite(stby, HIGH);
// Initialize PID
Delay(5);
myPID.SetMode(AUTOMATIC);
myPID.SetOutputLimits(-255, 255);
}
Void loop() {
digitalWrite(stby,HIGH);
// Calculate error
Input = position;
myPID.Compute();
Kp = 0.5;
Ki = 0.2;
Kd = 0.1;
Kp = 1.0;
Ki = 0.5;
Kd = 0.3;
} else {
Kp = 2.0;
Ki = 1.0;
Kd = 0.5;
If (motorSpeedA > 0) {
analogWrite(PWM_A, motorSpeedA);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
} else {
analogWrite(PWM_A, -motorSpeedA);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
If (motorSpeedB > 0) {
analogWrite(PWM_B, motorSpeedB);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
} else {
analogWrite(PWM_B, -motorSpeedB);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);