Visualizza messaggio singolo
Vecchio 29 aprile 20, 19:55   #3 (permalink)  Top
nicolap
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 388
Citazione:
#define antsx 1000 //-- in front servo endpoint sx
#define antdx 2000 //-- in front servo endpoint dx
#define postsx 30//-- out rear servo sx if inverted with postdx it reverse
#define postdx 150 //-- out rear servo dx if inverted with postsx it reverse
#define centro 0 //-- add or subtract xx value to center steering
#define tolerance 5 //-- if your poor quality servo vibrates try 5
#define max_correction 50 // con questa riga definisci di quanti gradi correggere
#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);
}
void loop() {
rxpulse = pulseIn(8, HIGH);
gaspulse = pulseIn(7, HIGH);
correction = map(gaspulse, antsx, antdx, 0, max_correction);
newPos = map(rxpulse, antsx, antdx, (postsx+correction), (postdx-correction));
if (abs(newPos - oldPos)> tolerance) {
oldPos = newPos;

myservo.write(newPos + centro);
}
}
Eccomi… Ho modificato il tuo sketch per ottenere un angolo di sterzata sul posteriore inversamente proporzionale al gas… Ovviamente è solo una base, e non ho neanche potuto testare nulla…
il risultato dovrebbe essere una correzione lineare che va da 0 a "max_correction" gradi. Fai le tutte le prove del caso prima di andare in pista
Spero di esserti stato di aiuto..
PS: secondo me questa discussione starebbe meglio nella sezione Elettronica
nicolap non è collegato   Rispondi citando