Visualizza messaggio singolo
Vecchio 03 maggio 20, 22:04   #63 (permalink)  Top
nicolap
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 388
Citazione:
Originalmente inviato da wrighizilla Visualizza messaggio
con questo ultimo sketch il servo è inchiodato a sinistra.. non gira in nessuna condizione di sterzo e gas

da serial scorrono lettere e quadrati



non me li fa copiare ma non sembrano dati comprensibili



io tornerei a questo.. è a un passo da funzionare alla perfezione.



Codice:
#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 155 //-- gain steering reduction by throttle if reverse add -

#define Slowlimit 1800 //-- 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) {

Gain = map(Gaspulse, Slowlimit, Maxspeed, 0, Max_gain);

NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain));

}

else {

NewPos = map(Rxpulse, Antsx, Antdx, Postsx, Postdx);

}

if (abs(NewPos - OldPos)> Tolerance) {

OldPos = NewPos;

myservo.write(NewPos + Center);

}

}


adesso ha l'unico difetto di dover trovare il compromesso tra Slowlimit e Max_gain

ovvero se Slowlimit è a 1600 Max_gain deve stare a 115 per ottenere una corsa uguale identica a Slowlimit 1800 - Max_gain 155



però non si allargano più i fine corsa a gas neutro e funziona tutto bene.
Prova con un valore di max_gain non superiore a 85. In questo modo i valori di (postsx+gain) non superano i 90 gradi (posizione di centro) e il calcolo di newpos non esce dai valori necessari.

Inviato dal mio PRA-LX1 utilizzando Tapatalk
nicolap non è collegato   Rispondi citando