anladıgım kadarı ile pıd control uygulamalarını inceleyecegim her halde başka yardımcı olabilecek sayfa önerebilirmisin yönlendirdigin sayfadaki örnekte derleme hatası oluşuyor inceleyemedim ilgin için teşekkür ederim
// Kitaplığı kurduğunuzdan emin olun
#include <QTRSensors.h>
QTRSensors cyr ;
const uint8_t SensorCount = 8 ;
uint16_t sensorValues [ SensorCount ];
samandira Kp = 0 ; // sabitler değerini ayarlayın
samandira Ki = 0 ;
samandira Kd = 0 ;
int P ;
int I ;
int D ;
int lastError = 0 ;
boolean onoff = yanlis ;
// Maksimum hızı artırmak motorlara zarar verebilir - 255 değerinde 6V motorlar 7,4 V alır
const uint8_t maxspeeda = 150 ;
const uint8_t maxspeedb = 150 ;
const uint8_t basespeeda = 100 ;
const uint8_t basespeedb = 100 ;
// Sürücü motoru taşıyıcı pimlerini ayarlayın
int modu = 8 ;
int aphase = 9 ;
int aenbl = 6 ;
int bphase = 5 ;
int benbl = 3 ;
// Düğme pimlerini ayarlayın
int buttoncalibrate = 17 // pin A3
int buttonstart = 2;
void setup() {
Serial.begin(9600);
qtr.setTypeRC();
//Set up the sensor array pins
qtr.setSensorPins((const uint8_t[]){10, 11, 12, 14, 15, 16, 18, 19}, SensorCount);
qtr.setEmitterPin(7);//LEDON PIN
pinMode(mode, OUTPUT);
pinMode(aphase, OUTPUT);
pinMode(aenbl, OUTPUT);
pinMode(bphase, OUTPUT);
pinMode(benbl, OUTPUT);
digitalWrite(mode, HIGH);
delay(500);
pinMode(LED_BUILTIN, OUTPUT);
boolean Ok = false;
while (Ok == false) { //the loop won't start until the robot is calibrated
if(digitalRead(buttoncalibrate) == HIGH) {
calibration(); //calibrate the robot for 10 seconds
Ok = true;
}
}
forward_brake(0, 0);
}
void calibration() {
digitalWrite(LED_BUILTIN, HIGH);
for (uint16_t i = 0; i < 400; i++)
{
qtr.calibrate();
}
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
if(digitalRead(buttonstart) == HIGH) {
onoff =! onoff;
if(onoff = true) {
delay(1000);//a delay when the robot starts
}
else {
delay(50);
}
}
if (onoff == true) {
PID_control();
}
else {
forward_brake(0,0);
}
}
void forward_brake(int posa, int posb) {
//set the appropriate values for aphase and bphase so that the robot goes straight
digitalWrite(aphase, LOW);
digitalWrite(bphase, HIGH);
analogWrite(aenbl, posa);
analogWrite(benbl, posb);
}
void PID_control() {
uint16_t position = qtr.readLineBlack(sensorValues);
int error = 3500 - position;
P = error;
I = I + error;
D = error - lastError;
lastError = error;
int motorspeed = P*Kp + I*Ki + D*Kd;
int motorspeeda = basespeeda + motorspeed;
int motorspeedb = basespeedb - motorspeed;
if (motorspeeda > maxspeeda) {
motorspeeda = maxspeeda;
}
if (motorspeedb > maxspeedb) {
motorspeedb = maxspeedb;
}
eger ( motorspeeda < 0 ) {
motorspeeda = 0 ;
}
eger ( motorspeedb < 0 ) {
motorspeedb = 0 ;
}
//Serial.print (motorspeeda); Serial.print (""); Serial.println (motorspeedb);
forward_brake ( motorspeeda , motorspeedb );
}