Italian [RISOLTO]Temporizzazione invio dati su bluetooth

Luciano Veneziano

Active Member
Licensed User
Longtime User
Buongiorno.

Invio dei dati ad un device con una porta bluetooth (che per funziona perfettamente
per tutti gli altri tipi di messaggi, inviati e ricevuti) purtroppo non posso inviarli senza
che si sia un minimo di stacco temporale.

Ho creato una ruotine support.wait() che però è assolutamente inefficace.

Esiste un modo per fermare l'esecuzione per xxx millisecondi come si faceva con il C?

Grazie a tutti


Routines di invio dati:
Private Sub sendHeader(item As TItemData, prog As Int)
    Dim s As String = item.caption
    
    Do While s.Length < 18
        s = s&" "
    Loop
    
    s = support.Sprintf("A3%d%02d%03d%s",Array As Object(prog,item.index,255,s.ToUpperCase))
    sendString(s)
    support.wait(150)
End Sub

Private Sub sendFreqs(items As String, prog As Int)
    Dim divs() As String = Regex.split("\;",items)
    Dim freqs() As String = Regex.split("\|",divs(3))

    Dim s As String

    Dim p As Int
    Dim d As Int
    Dim f As Long

    p = 0   
    For i = 0 To freqs.Length-2 Step 2
        d = freqs(i+1)
        f = freqs(i)
        f = 10.73741824*f
        
        p = p+1
        s = support.Sprintf("A4%d%02d%07d%03d",Array As Object(prog,p,f,d))
        
        sendString(s)
        support.wait(150)
    Next
    
End Sub
 

MarcoRome

Expert
Licensed User
Longtime User
Grazie XFood, penso che dovrei comprare un libro... ne esiste uno in italiano?
In italiano esisteva un testo risalente a molte release fa....
In ogni caso puoi vedere questa sezione "LEARN" che trovi qui in B4X ( guarda i menu nella pagina )

Se non ti è sufficiente puoi acquistare:

 

Sagenut

Expert
Licensed User
Longtime User
Con lo Sleep devi solo fare attenzione al fatto che il flusso del programma verrà rimandato al punto di chiamata.
Quindi la tua Sub dovrà diventare qualcosa così per attendere che abbia compiuto tutto, compreso la pausa, prima di procedere
B4X:
Private Sub sendHeader(item As TItemData, prog As Int) as ResumableSub
    Dim s As String = item.caption
 
    Do While s.Length < 18
        s = s&" "
    Loop
 
    s = support.Sprintf("A3%d%02d%03d%s",Array As Object(prog,item.index,255,s.ToUpperCase))
    sendString(s)
    Sleep(150) 'Pausa
    Return Null 'Questo restituisce qualcosa alla chiamata Wait For per farla terminare e proseguire
End Sub
e dovrai chiamarla con
B4X:
Wait For (sendHeader(item, prog)) complete (Unused as Object)
 
Last edited:

Luciano Veneziano

Active Member
Licensed User
Longtime User
Con lo Sleep devi solo fare attenzione al fatto che il flusso del programma verrà rimandato al punto di chiamata.
Quindi la tua Sub dovrà diventare qualcosa così per attendere che abbia compiuto tutto, compreso la pausa, prima di procedere
B4X:
Private Sub sendHeader(item As TItemData, prog As Int) as ResumableSub
    Dim s As String = item.caption
 
    Do While s.Length < 18
        s = s&" "
    Loop
 
    s = support.Sprintf("A3%d%02d%03d%s",Array As Object(prog,item.index,255,s.ToUpperCase))
    sendString(s)
    Sleep(150) 'Pausa
    Return Null 'Questo restituisce qualcosa alla chiamata Wait For per farla terminare e proseguire
End Sub
e dovrai chiamarla con
B4X:
Wait For (sendHeader(item, prog)) complete (Unused as Object)
Grazie! notavo che il l flusso prosegue dopo l'uscita dalla sub, questo è un problema se si mette un waitdialog, perchè si chiude prima che il flusso dati verso l'apparecchio sia terminato.
 

Sagenut

Expert
Licensed User
Longtime User
Grazie! notavo che il l flusso prosegue dopo l'uscita dalla sub, questo è un problema se si mette un waitdialog, perchè si chiude prima che il flusso dati verso l'apparecchio sia terminato.
Intendi tipo una animazione che la comunicazione è in corso?
È tutto un gioco di Wait For.
All'inizio sembrano complicati, ma se li capisci e li gestisci bene aiutano tantissimo.
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
Intendi tipo una animazione che la comunicazione è in corso?
È tutto un gioco di Wait For.
All'inizio sembrano complicati, ma se li capisci e li gestisci bene aiutano tantissimo.
No, modificherò il codice oggi, appena torno da lavoro. mi riferisco a quello originale. sul log mi appaiono i comandi che invio e ricevo dalla seriale anche dopo l'uscita dalla sub.
 

Sagenut

Expert
Licensed User
Longtime User
Quando avrai fatto saremo qui per aiutarti se avrai ancora bisogno.
 
Top