Visualizza messaggio singolo
Vecchio 03 maggio 20, 14:56   #48 (permalink)  Top
nicolap
User
 
L'avatar di nicolap
 
Data registr.: 02-10-2019
Residenza: Orvieto
Messaggi: 388
Citazione:
Originalmente inviato da nicolap Visualizza messaggio
Ciao, ho potuto dare un'occhiata piu approfondita allo sketch e ho notato queste cose:



1)

il ciclo if else scritto come riportato non esegue nessuna operazione, andrebbe invece scritto così:



if (Gaspulse > Slowlimit)

{

operazione da eseguire

}

else

{

operazione da eseguire

}




il ciclo if else comunque non è necessario perché con il comando "constrain" ,il valore di "Gaspulse", rimane sempre entro i limiti da te imposti...e qui ho notato un altro problema, che è probabilmente la causa del cambiamento di valori indesiderato



2)

l'operazione "constrain" per essere utilizzata come vuoi tu dovrebbe essere scritto come segue



Gaspulse = constrain (Gaspulse, Neutral, Maxspeed);



ho sostituito la variabile "Slowlimit" con "Gaspulse" perchè è quest'ultimo valore che deve essere contenuto entro certi limiti...ho scritto variabile riferendomi a "Slowlimit" perché effettivamente lo è...con #define assegni un valore costante a quella variabile ogni volta che compili lo sketch o ogni volta che resetti/avvii l'arduino.





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);

}

}



Ora devo andare a pranzo...
Avevi letto questo messaggio? Se hai sostituito Slowlimit con Gaspulse come avevo scritto non dovresti avere variazioni indesiderate.
Se metti 100 su max_gain significa che imposti 100 gradi come correzione massima su un lato e 200 gradi tra dx e sx...

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