così sembra fare tutto.. rimane da vedere la corsa del servo che muta di conseguenza ai settaggi di altri parametri..
la corsa dovrebbe essere più o meno fissa, ovvero quella definita con define postsx e postdx
ma se cambio valore di max_correction aumento la corsa degli endpoint
uguale anche se diminuisco gaslimit che ho inserito per cercare di avere una stringa dove decidere quanto gas a bassa velocità poter dare.. se lo abbasso allargo la corsa e viceversa.
non so manco se gaslimit possa servire in questo modo perchè se lo cambio sballo i finecorsa comunque.. ma visto che sta facendo e mi girano le paperelle sulla testa per adesso lascio così.
insomma così come è adesso non funziona malissimo, la correzione non attacca subito, lascia un pò di margine per dare gas.
diciamo che l'unico difetto avviene se uno modifica qualcosa, avrà da rifare gli endpoint per adattarsi alla nuova situazione.
spero sia la via giusta, ad ogni modo ora funziona come dovrebbe, instabile e un pò complicato da settare ma utilizzabile.
#define minffw 1500 // -- minimum forward signal
#define maxffw 2000 // -- maximum forward signal
#define antsx 1000 // -- in front servo signal sx
#define antdx 2000 // -- in front servo signal dx
#define postsx 5 // out rear servo sx endpoint if inverted with postdx it reverse
#define postdx 175 //-- out rear servo dx endpoint if inverted with postsx it reverse
#define center 0 //-- add or subtract xx value to center steering
#define tolerance 3 //-- if your poor quality servo vibrates try 5
#define maxcorr 100 //-- in gain steering reduction by throttle if reverse add -
#define gaslimit 1700 //-- slow forward without correction
#include <Servo.h>
Servo myservo;
unsigned int rxpulse;
unsigned int gaspulse ;
unsigned int correction;
unsigned int newPos, oldPos;
void setup() {
myservo.attach(10); //-- rear servo signal out pin
pinMode(8, INPUT); //-- front servo signal in pin
pinMode(7, INPUT); //-- throttle signal in pin
}
void loop() {
rxpulse = pulseIn(8, HIGH);
gaspulse = pulseIn(7, HIGH);
{
if (gaspulse > gaslimit);
else
gaspulse = constrain (gaslimit, minffw,maxffw);
correction = map(gaspulse, minffw, maxffw, 0, maxcorr);
newPos = map(rxpulse, antsx, antdx, (postsx+correction), (postdx-correction));
}
if (abs(newPos - oldPos)> tolerance) {
oldPos = newPos;
myservo.write(newPos + center);
}
}