Mettere in pausa fino a che servi non hanno concluso la rotazione senza delay.

Eccomi con un’altra questione.

Oltre agli altri problemi che ho per il mio progetto ne sto affrontando uno particolarmente fastidioso.

Mi trovo a passare a 2 servi una serie di angoli perchè il mio manipolatorino 2 DOF segua una certa traiettoria. Avrò quindi una sequenza di angoli per ogni punto della traiettoria che ho definito.

La mia domanda è: c’è un modo per dire al programma di aspettare che i servi arrivino in posizione prima di passargli gli angoli successivi senza usare la funzione delay? Non voglio usarla perchè non tutti i movimenti sono uguali, quindi potrei dare il tempo corretto per certi spostamenti ma errato per altri. Chiedo questo perchè ho un movimento scattoso del puntatore e vorrei che invece divenisse fluido.

Concettualmente vorrei questo:

angolo->servo va in posizione->appena in posizione angolo successivo->servo va in posizione… e così via fino all’ultimo angolo.

Non voglio che il puntatore sosti sui punti intermedi ma nemmeno che non riesca a concludere il movimento tra un punto e il successivo. Questo rende difficoltoso l’utilizzo della funzione delay.

Il tuo problema principale, secondo me’, e’ di tipo hardware … cioe’, i servi che usi hanno un feedback ? … perche’ la vedo un po dura, che il micro “senta” quando il servo e’ in posizione, senza un qualche tipo di feedback … :wink:

La soluzione è semplice. Basta un pulsante da premere manualmente quando il servo è arrivato a fine corsa ;)

Etemenanki: Il tuo problema principale, secondo me', e' di tipo hardware ... cioe', i servi che usi hanno un feedback ? ... perche' la vedo un po dura, che il micro "senta" quando il servo e' in posizione, senza un qualche tipo di feedback ... ;)

No, me ne procurerò due con un feedback di posizione infatti. Volevo sapere se esisteva qualche giochetto software da poter fare o se ci sono metodi alternativi a quelli che ho pensato io.

Avendo un feedback come potrei fare? Metterei un if ma qual'è il comando per mettere in pausa un programma finchè è soddisfatta la condizione dell'if?

leo72: La soluzione è semplice. Basta un pulsante da premere manualmente quando il servo è arrivato a fine corsa ;)

Non posso mica fare una cosa del genere. XD

Devo far andare il puntatore su un punto, poi su quello dopo e così via, tutto questo deve avvenire fluidamente e automaticamente. I servi devono passare dall'angolo al successivo a una certa velocità senza dare l'impressione di arrestarsi su di un punto intermedio.

D4NI3L3:

leo72: La soluzione è semplice. Basta un pulsante da premere manualmente quando il servo è arrivato a fine corsa ;)

Non posso mica fare una cosa del genere. XD

Lo so, ma mi scappava la battuta e l'ho scritta :stuck_out_tongue_closed_eyes:

D4NI3L3: Avendo un feedback come potrei fare? Metterei un if ma qual'è il comando per mettere in pausa un programma finchè è soddisfatta la condizione dell'if?

while(feedback[numeservo] == true);

Ti mancano le basi di programmazione. Dai una bella lettura qui --> http://www.html.it/guide/guida-c/ Soprattutto da 11 a 24.

PaoloP:

D4NI3L3: Avendo un feedback come potrei fare? Metterei un if ma qual'è il comando per mettere in pausa un programma finchè è soddisfatta la condizione dell'if?

while(feedback[numeservo] == true);

Ti mancano le basi di programmazione. Dai una bella lettura qui --> http://www.html.it/guide/guida-c/ Soprattutto da 11 a 24.

Hai ragione, che stupido. Tra l'altro ho usato il while anche in altri casi per fare cose simili, sarà la stanchezza. Se mi mancassero le basi di programmazione non sarei nemmeno stato in grado di scrivere il codice che ho scritto fin'ora. Ho fatto un esame sul C. :grin:

Diciamo che non ho molta esperienza e quindi non collego sempre le cose, la stanchezza poi fa il resto. All'interno del ciclo While non metterei nulla giusto? Semplicemente lo metto nel mezzo e rimango dentro finchè la condizione è verificata (se voglio usarlo solo come pausa chiaramente).

Comunque mi serve per forza un feedback per fare questo. Vabbè, provvederò con i nuovi servi.