How do I get label.text servomotor angle position when I use button.touchdown or touchup?

Hello everybody! In a sketch I use char to send command to move servo axis...
I want to know how to get servo angle position in a label...
Thanks

image

Dear Angelo,
welcome to the community (are you Italian ?).
By what means do you communicate to the servo ? A BT line ? Is the servo connected to an Arduino or to a proprietary hardware. If yes, is it already working and you want only to kow how to receive the servo position and to display it into a label ?
Or something more ?
Keep in mind that the more details you provide, the better help you will get.
Ciao.

Hello! Thanks for your reply! Yes i m Italian. Yes BT line...i m working on Arduino project... robot arm 5 dof with 6 servo (i use pca9685 ). My app works greatly but i want to add that funtion. I don t use sliders but button touchdown and touchup

OK Angelo,
(I'm Italian, too, but) I'll continue in English, so to allow also other colleagues to help you.
If you search a bit in the community you'll find a lot of topics related to the BT comm's toward Arduino (are you using a HC05/6 or an ESP32 ?).
In few words, to receive from Arduino on a BT line, you need a clock that shall poll the incoming BT line with a frequency, at least, double of the transmission one (i.e. if your Arduino sends every 100 ms, your app shall poll every 50 ms to be sure not to lose data).
Please also keep in mind that whenever you send a command from your app to Arduino, the response takes time to become available, therefore you cannot put in a sequence both the command sending and the response waiting. To receive anything you shall always use a clock.
So, typically, you shall set a clock that will fire (for example) every 10 milliseconds, supposing that your Arduino is not that fast, and whenever it receives a frame, it splits the contents and fills the label(s) accordingly. This is the theory, but for ready made examples you can have a look to @Juan_Antonio's web site (KIO4.COM) or the one of @ChrisWard (professorcad.co.uk).
You will also find a lot of other example by searching the forum tagging the words "bluetooth" or "arduino".
Or take a look to this post of mine, where you can find some help (I hope).
App not responding - #25 by uskiara
You'll find in that topic both an .ino and an .aia files together with a schematic diagram.
Best wishes for your project,
Ugo.

HC05... Ok i ll try to look around...anyway if u can give me a example piece of MIT code , It shoud be Better for me . Thanks again for your kindness

Dear @angelo,
as I said in my previous answer, take a look to the link I posted. You'll find the code for both ai2 and Arduino.
Cheers.

Hi! I followed your suggestions, I ve seen a lot of snippes code but with no luck. When I click button.touchdown (I send char via BT) my servo moves perfectly ok. . I want to show its angle position in a label. It s easy with sliders but i want to do it with button touchdown

Ok Angelo, but when you say that you want to display the servo angle, do you mean that you want to display the "effective" angle reached by the servo ? This means that Arduino shall send back to the app the angle. Is this what you want ? Does it work with the slider ? In other words the slider sends a new angle position to Arduino, the servo moves and sends back the value ? Or simply you are in "open loop" i.e. the app sends an angle, the servo moves, but the displayed vaule is the one set by the slider and not the feedback from Arduino ?
If what you want is to simulate a slider movement with the touchdown, please take a look to the following blocks (it simulates a continuous keyclick): The .aia is annexed here also:
Touchdown.aia (3.1 KB)

thanks for the time you are dedicating to me...Look again my piece of code. When I click touchdown buttons I send char "u" or maiusc "U" to increase or decrease angle and servo moves. When It moves label should show these angles (just like a slider). I tried to adapt your code in my app without success. Can u try to adjust code for my specific problem?

Ciao Angelo, facciamo che parlare italiano così ci capiamo :slight_smile:

Hai visto che se usi il blocco TouchDown, questo manda una sola volta il carattere, quindi non è ripetitivo, come fa uno slider.
Se vuoi simulare il comportamento di uno slider che, finchè muovi, manda in continuazione la nuova posizione dello slider, il codice che ti ho mandato con il precedente post fa proprio quello, solo che, siccome ho messo il clock di ripetizione a 20 millisecondi, non ho messo l'invio del niuovo valore nel clock a 20 millisecondi perché non so se il tuo Arduino ce la fa a stargli dietro. Altrimenti se sai che il tuo Arduino e il motore gli stanno dietro, sposta la trasmissione sul BT direttamente nel clock e visualizzi il valore nella label che ti interessa.
Se invece quello che vuoi visualizzare è l'angolo raggiunto dal motore (quindi un controllo a loop chiuso), devi inviare il comando e aspettare che Arduino ti risponda. Ma se dici che con lo slider tutto già funziona, vuol dire che stai già lavorando a loop chiuso ?
Quindi rifaccio la prima domanda: tu vuoi visualizzare l'effettiva posizione angolare raggiunta dal motore ? o ti accontenti di visualizzare la posizione che hai impostato nell'app ? cominciamo a chiarire questo ... :thinking:

:smile: in label voglio visualizzare semplicemente ogni posizione raggiunta dal servo. Se clicco una volta e il servo per esempio ruota da 180° va a 100° vorrei visualizzare 100... se invece mantengo la pressione sul pulsante ovviamente vorrei visualizzare le posizioni parziali....180...179....178 ecc fino a 100 proprio come uno slider.
Quindi appenda invio il carattere ("u" oppure "U" voglio visualizzare tutte le posizioni angolari parziali e finali nel campo label . Mi auguro di essere stato più chiaro nell'esposizione del problema. E' una funzione fondamentalmente superflua. La mia app funziona perfettamente vorrei semplicemente arricchirla. Ripeto l'ideale sarebbe un pezzo di codice ad hoc per questo caso specifico...invio "u" leggo l'angolo

in label voglio visualizzare semplicemente ogni posizione raggiunta dal servo.
Quindi in loop chiuso: l'app manda un comando via BT ad Arduino, il servo muove e raggiunge l'angolo, si ferma, manda la posizione raggiunta via BT all'app che visualizza il valore nella label.

Ora, quando dici che con lo slider tutto funziona, tutto quanto detto sopra già ce l'hai funzionante ?
Cioè Arduino spedisce indietro all'app tutti i valori che man mano lo slider invia ad Arduino e che raggiunge con il servo? e questi valori li visualizzi nella label ?

nella mia app non ho sliders...ma ho già utilizzato sliders in altre mie applicazioni. Ad ogni modo è più semplice lavorare con gli sliders poiché fondamentalmente il "label" è legato alla posizione del cursore (invio il comando il servo ruota e il label mostra la posizione del cursore definito dal min e max ad esempio con set angle.text to get ...thumbPosition). Con il button touchdown credo che sia un pò diverso.

e dunque "set angle.text to".... to a cosa??

Angelo,
scusa, ma continuiamo a girare intorno al quesito fondamentale: Arduino manda indietro i valori raggiunti, o no ?
Perché se hai già un codice che fa quello, la risposta alla tua ultima domanda è set angle.text = valore ricevuto da Arduino. Tutto lì. (ma non credo, se no non faresti la domanda)

It s easy with sliders but i want to do it with button touchdown
Quindi questa frase non vuol dire che hai già una versione con gli slider che funziona ! Ma sai che gli slider, che hai usato in altre app, ti danno immediatamente il valore raggiunto dallo slider mentre lo muovi. Ma questo sarebbe solo il valore impostato (non quello raggiunto effettivamente dal servo!).
Se metto assieme le due frasi precedenti mi viene da dire: attualmente il tuo Arduino non trasmette ad AI2 ma riceve solo i comandi ?
Ti faccio adesso la domanda che avrei dovuto farti subito: posta il tuo .aia ed il tuo .ino che gli do un'occhiata, se no non ne veniamo fuori.

Se è solo questo che vuoi, l'aia che ti ho mandato fa esattamente quello, cioè visualizza in una label ogni valore ottenuto tenendo premuto il tasto Incrementa o Decrementa.

sì è cio che desidero fare e sarebbe comunque la posizione effettiva raggiunta dal servo poiché il char nello sketch è ovviamente legato ad una mappatura (e questo anche nel caso di uno slider). Nel tuo codice dove figura il carattere "u" oppure "U"?

I was sending 1 byte over the bluetooth, 0..255. Where from 0 to 180 was responsible for the servo rotation, and from 181 to 255 was the motor speed, and from a separate manipulator. Here's the logic

Attenzione, quando ti ho mandato il mio codice non sapevo ancora che i comandi sono u e U ed M per fermare e, paragonando il comportamento degli slider (che tu hai detto che già usavi), pensavo che tu mandassi dei valori numerici .
Comunque adesso l'aia allegato fa questo:
Se premi il tasto Increase e lo tieni premuto, ogni 50 millisecondi invia U al servo e incrementa il valore angolare (a loop aperto). Quando lo rilasci, manda M per fermare il servo.
Se premi il tasto Decrease e lo tieni premuto, ogni 50 millisecondi invia u al servo e decrementa il valore angolare (a loop aperto). Quando lo rilasci, manda M per fermare il servo.
Ho portato il clock da 20 milli a 50 milli perché se trasmetti ad ogni incremento, bisogna dare il tempo al BT di trasmettere il nuovo comando ed al servo di attuare.
Resta da capire come fai a sincronizzare lo 0 la prima volta se non mandi valori numerici ma solo u U e M.
Onestamente, se non posti il tuo aia e soprattutto il tuo .ino non riesco più a seguirti.
Touchdown.aia (3.3 KB)
Ciao e buona notte :hugs:

i vari "char" sono legati ad una mappatura che tengono conto delle larghezze d'impulso min e max (rapportate a 4096 poichè uso PCA9685 a 12 bit...).
Comunque davvero grazie domani provo il tuo codice :wink: