0 Membros e 1 Visitante estão a ver este tópico.
#include <PololuQTRSensors.h>PololuQTRSensorsRC qtr((char[]) {14, 15, 16}, 3);void setup(){ Serial.begin(9600); for (int i = 0; i < 250; i++){ qtr.calibrate(); delay(20); }}void loop(){ unsigned int sensors[3]; int position = qtr.readLine(sensors); int error = position - 1000; Serial.println (error); delay(500);}
eu ja vi isso muitas vezes, uma coisa que ainda não consegui perceber é pq eles dizem que error = -1000 ( no exemplo que eles dão apenas utilizam 3 sensores, pelo que percebi deverão estar tds em cima da linha) caso um sensor deixe de ver a linha o error é -1000 ou 1000, segundo o que percebi, só que isso é com 3 sensores, eu quero usar 8, e o error vai ter de variar de 0 a -1000 e de 0 a 1000, dai a minha confusão.Para já estou a tentar lêr o valor dos sensores e nem isso estou a conseguir fazer Ps: eu fiz uma programação anterior que tinha o erro da linha calculado automaticamente, foi o que eu percebi aque aquilo fazia, a programação foi postada ontem e está um bocado mais atrás deste tópico.
#include <PololuQTRSensors.h> PololuQTRSensorsRC qtr((unsigned char[]) {9,8,7,6,5,4,3,2}, 8); void setup() { Serial.begin(9600); } void loop() { unsigned int readings[8]; qtr.read(readings); Serial.print ("sensor1 "); Serial.println(readings[0]); delay(1000); Serial.print ("sensor2 "); Serial.println(readings[1]); delay(1000); Serial.print ("sensor3 "); Serial.println(readings[2]); delay(1000); Serial.print ("sensor4 "); Serial.println(readings[3]); delay(1000); Serial.print ("sensor5 "); Serial.println(readings[4]); delay(1000); Serial.print ("sensor6 "); Serial.println(readings[5]); delay(1000); Serial.print ("sensor7 "); Serial.println(readings[6]); delay(1000); Serial.print ("sensor8 "); Serial.println(readings[7]); delay(1000); }
#include <PololuQTRSensors.h>PololuQTRSensorsRC qtr((unsigned char[]) {9,8,7,6,5,4,3,2}, 8);int motor_right = 10;int motor_left = 11;//variaveis auxiliares.int ltarguetval = 0;// valor a desejar no motor left.int rtarguetval = 0;// valor a desejar no motor right.int lnowval = 0; // valor actual no motor left.int rnowval = 0; // valor actual no motor right.void setup(){ Serial.begin(9600); pinMode (motor_right, OUTPUT); pinMode (motor_left, OUTPUT); int i; for (i = 0; i < 250; i++) { qtr.calibrate(); delay(20); }}void loop(){ unsigned int sensors [8]; int position = qtr.readLine(sensors); int error = position -3500; int lastError = 0; int maxspeed = 150; double KP = 0.1; int KD = 5; int motorspeed = KP * error + KD * (error - lastError); lastError = error; Serial.println (position); delay(500); if(sensors[0] > 750 && sensors[1] > 750 && sensors[2] > 750 && sensors[3] > 750 && sensors[4] > 750 && sensors[5] > 750 && sensors[6] > 750 && sensors[7] > 750) { return; } if(error >-500 && error < 500){ rtarguetval = (int)maxspeed; ltarguetval = (int) maxspeed; error = lastError; } else if (error > 500 ){ rtarguetval = (int)motorspeed; ltarguetval = maxspeed; error = lastError; } else if ( error < -500){ ltarguetval = (int)motorspeed; rtarguetval = maxspeed; error = lastError; } if(rtarguetval > rnowval){ rnowval +=1; }else if (rtarguetval < rnowval){ rnowval -=1; } if (ltarguetval > lnowval){ lnowval +=1; }else if(ltarguetval < lnowval){ lnowval -=1; }}
int i; for (i = 0; i < 250; i++) { qtr.calibrate(); delay(20); }}