|
niente via.. arrivo fino qui.
ho provato una marea di cose ma nessuna ha funzionato.
ho messo un pochino di ordine nel testo e ho cambiato alcuni nomi per rendere più chiaro lo sketch.
funziona tutto come dovrebbe, compresa la possibilità di dare un pochino di gas a bassa velocità mantenendo tutto lo sterzo (cambiando valore a Slowlimit)
anche la correzione funziona perfettamente adesso, inversamente proporzionale e fino a chiudere completamente la corsa del servo posteriore (cambiando valore a Max_gain)
ma se cambio i valori di Slowlimit e Max_gain si spostano anche i finecorsa Postdx e Postsx obbligandomi a reimpostarli da capo di conseguenza alle modifiche.
rompe un pò perchè sarebbero valori che dovrebbero restare fissi visto che dipendono dalla effettiva corsa di sterzo a disposizione, anche solo cambiando i parametri si rischia di allargare la corsa molto oltre quella che lo sterzo meccanicamente permette.
sarebbe uno dei parametri da impostare per primo e poi dimenticare..
non so.. manca qualche parentesi oppure va scritto meglio qualcosa ma non trovo l'inghippo
riporto lo sketch rivisto e corretto al meglio delle sue attuali possibilità
#define Neutral 1500 // -- minimum forward signal
#define Maxspeed 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 poor quality servo vibrates try 5
#define Max_gain 100 //-- gain steering reduction by throttle if reverse add -
#define Slowlimit 1700 //-- slow forward without endpoint correction
#include <Servo.h>
Servo myservo;
unsigned int Rxpulse;
unsigned int Gaspulse ;
unsigned int Gain;
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 > Slowlimit);
else
Gaspulse = constrain (Slowlimit, Neutral, Maxspeed);
Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain);
NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain));
if (abs(NewPos - OldPos)> Tolerance) {
OldPos = NewPos;
myservo.write(NewPos + Center);
}
}
|