| |
| | #1 (permalink) Top |
| User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Qualche aggiustamento, dimmi se va.. altrimenti debugga con il serial.print ------------------------------------------------- #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 long Rxpulse;//pulsin restituisce un long unsigned long Gaspulse ; unsigned long Gain;//Giusto per.. mettiamo long unsigned long NewPos, OldPos; byte Stato=0; 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(){ if (Stato==0) { //lettura Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); } if (Stato==1) { //Calcolo Gaspulse = constrain (Slowlimit, Neutral, Maxspeed); Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); } if (Stato==2) { //scrittura if (abs(NewPos - OldPos)> Tolerance) { OldPos = NewPos; myservo.write(Center +NewPos);//da rivedere cosi' centri solo in un senso credo.. } } //ritardo esecuzione cicli/stati delay(3); // Incrementa stato per il prossimo loop ++Stato; if (Stato==3) { // riparte da 1 Stato=0; //qui ci va 0 non 1 } } Ultima modifica di Smsteves : 03 maggio 20 alle ore 16:21 |
| | |
| | #2 (permalink) Top |
| User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
trovato.. tu hai usato questi valori: #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 Max_gain 100 //-- gain steering reduction by throttle if reverse add - e nel calcolo fai questo: Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); // al max speed gain vale 100 quando gain e' 100 succede che questo calcolo : NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain), (Postdx - Gain)); diventa: NewPos = map(Rxpulse, Antsx, Antdx, (5+100), (175 - 100)); NewPos = map(Rxpulse, Antsx, Antdx, (105), (75)); se Gain vale 50 diventa: NewPos = map(Rxpulse, Antsx, Antdx, (5+50), (175 - 50)); NewPos = map(Rxpulse, Antsx, Antdx, (55), (125)); inverti il senso??? Prova con questo: NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain\2), (Postdx - Gain\2)); Il massimo gain deve essere (Postsx - Postdx) \ 2 circa... Sms |
| | |
| | #3 (permalink) Top |
| Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
si proprio lo Z80 a 13 anni sul sinclair z81 in b/n se cerco ho ancora un corposo libro del quale ormai non mi ricordo poco o nulla come del basic col quale giocavo sul BBC tornando alla sketch,non funziona il code del primo post 54 non ha risultato pratico, il servo è fermo immobile qualunque cosa muova. il code del post 55 si muove ma non sente effetti dal grilletto del gas, non fa più la riduzione della corsa. se cambio Slowlimit e lo alzo a 1800 riduco sempre la corsa risultante dei fine corsa. stessa cosa se cambio max_gain.. in sostanza mantiene lo stesso problema di prima ma senza più avere nessun effetto dal premere il grilletto del gas il terzo post 56 se cambio la stringa con NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Gain\2), (Postdx - Gain\2)); mi restituisce errore: stray '\' in program al momento questo è ancora il migliore.. fa tutto quello che deve fare con solo il difetto si obbligare a risettare gli endpoint 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 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);
}
} Ultima modifica di wrighizilla : 03 maggio 20 alle ore 19:12 |
| | |
| | #4 (permalink) Top |
| User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
Brutta cosa non poterlo provare in diretta... Ho rivisto il tutto, ho aggiunto il calcolo automatico dell'escursione in base al gain ti mando un msg. #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 Course; unsigned int Gain; unsigned int NewPos, OldPos; byte Stato = 0; 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() { if (Stato == 0) { //lettura Rxpulse = pulseIn(8, HIGH); Gaspulse = pulseIn(7, HIGH); } if (Stato == 1) { //Calcolo Gaspulse = constrain (Slowlimit, Neutral, Maxspeed);//riduce valori dal canale gas Gain = map(Gaspulse, Neutral, Maxspeed, 0,Max_gain); Course= (Postdx-Postsx) ;//corsa in gradi da dx a sx Course= Course/2 ;//dimezza la corsa in gradi per ciascun lato Course= Course*Gain/100 ;//calcola i gradi di escursione in base all'accelleratore NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Course ), (Postdx - Course)); } if (Stato == 2) { //scrittura if (abs(NewPos - OldPos) > Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); } } //ritardo esecuzione cicli/stati delay(3); // Incrementa stato per il prossimo loop ++Stato; if (Stato == 3) { // riparte da 0 Stato = 0; } } |
| | |
| | #5 (permalink) Top |
| Guest Data registr.: 17-07-2013
Messaggi: 3.734
|
aspetta.. discutendone con un altro modellista mi ha dato dei suggerimenti importanti che fanno avanzare di parecchio il risultato 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 4 //-- if poor quality servo vibrates try 5
#define Max_gain 170 //-- 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);
}
} l'unica cosa che succede adesso è che queste 2 variabili sono in relazione tra loro la prova la faccio sempre cercando di ottenere il servo fermo al massimo del gas ad esempio slowlimit 1600 e Max_gain 115 ho il servo nuovamente fermo al centro a tutto gas. ma aumentando slowlimit a 1800 devo mettere Max_gain a 170 ad ogni modo mi pare certamente il risultato migliore trovato fino ad adesso. ora provo il codice nel tuo ultimo post ![]() ----------edit------------ no, anche il code nel post 58 da come risultante il servo che gira da una parte all'altra ma non sente effetti tirando o spingendo il grilletto del gas. Ultima modifica di wrighizilla : 03 maggio 20 alle ore 19:46 |
| | |
| | #7 (permalink) Top |
| User Data registr.: 03-05-2020 Residenza: milano
Messaggi: 47
|
ecco la versione con il debug. Se metti lasci la variabile debug a 1, puoi usare il monitor seriale e vedere cosa fa il sw. Se la metti a 0 funziona normalmente.. Iniziamo a fare seriamente ![]() #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 Course; unsigned int Gain; unsigned int NewPos = 0, OldPos = 0; int Stato; byte debug = 1; 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 if (debug == 1) { Serial.begin(115200); } Stato = 0; } void loop() { if (debug == 1) { Serial.print("*******************"); Serial.print("\n"); Serial.print("Ciclo Stato = "); Serial.print(Stato); Serial.print("\n"); } if (Stato == 0) { //lettura Rxpulse = pulseIn(8, HIGH, 10000); Gaspulse = pulseIn(7, HIGH, 10000); if (debug == 1) { Serial.print("------------ stato 0 "); Serial.print("\n"); Serial.print(Rxpulse); Serial.print("\n"); Serial.print(Gaspulse); Serial.print("\n"); } } if (Stato == 1) { //Calcolo Gaspulse = constrain (Slowlimit, Neutral, Maxspeed);//riduce valori dal canale gas Gain = map(Gaspulse, Neutral, Maxspeed, 0, Max_gain); Course = (Postdx - Postsx) ; //corsa in gradi da dx a sx Course = Course / 2 ; //dimezza la corsa in gradi per ciascun lato Course = Course * Gain / 100 ; //calcola i gradi di escursione in base all'accelleratore NewPos = map(Rxpulse, Antsx, Antdx, (Postsx + Course ), (Postdx - Course)); if (debug == 1) { Serial.print("------------ stato 1 "); Serial.print("\n"); Serial.print(Gaspulse); Serial.print("\n"); Serial.print(Gain); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); } } if (Stato == 2) { //scrittura if (OldPos != NewPos) { if (abs(NewPos - OldPos) > Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); if (debug == 1) { Serial.print("------------ stato 2 -maggiore "); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); } } if (abs(OldPos - NewPos ) < Tolerance) { OldPos = NewPos; myservo.write(NewPos + Center); if (debug == 1) { Serial.print("------------ stato 2 -minore "); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); } } } if (OldPos == NewPos) { OldPos = NewPos; myservo.write(NewPos + Center); if (debug == 1) { Serial.print("------------ stato 2 -uguale "); Serial.print("\n"); Serial.print(Course); Serial.print("\n"); Serial.print(OldPos); Serial.print("\n"); Serial.print(NewPos); Serial.print("\n"); } } } if (Stato == 3) { // riparte da 0 Stato = 0; Serial.print("stato 3 ------------"); Serial.print("\n"); Serial.print(Stato); Serial.print(" stato\n"); } //ritardo esecuzione cicli/stati delay(3); // Incrementa stato per il prossimo loop ++Stato; } -------------- Ora cerco una ricevente, la radio dovrebbe essere in qualche ripiano servi ne ho in giro qualcuno... |
| | |
![]() |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
| buggy da completare | BoBoPoP | Automodellismo Mot. Scoppio Off-Road | 41 | 18 maggio 16 17:56 |
| monster da completare...! | bronto_19 | Automodellismo Mot. Elettrico Off-Road | 2 | 22 giugno 10 17:35 |
| Sto costruendo uno schiumino (o tzagi), mi aiutate??? | crido96 | Aeromodellismo Principianti | 72 | 07 febbraio 10 02:26 |
| Come completare una associated B4? | ryan-j | Automodellismo Mot. Elettrico On-Road | 9 | 04 maggio 08 11:55 |