Dim strDaInviare2 As String = "I2CR" & Chr(30) & Chr(1)
SComm.Begin()
Write #SComm, strDaInviare2
SComm.Send()
Sleep intervSleep
Dim valZoom As String = ""
Try Read #SComm, valZoom, Lof(SComm)
valZoom = Replace(valZoom, "\r", "")
Dim valZoom As String = ""
Try Read #SComm, valZoom, Lof(SComm)
valZoom = Replace(valZoom, "\r", "")
Select Case valZoom
Case "\x01"
valZoom = "1"
Case "\x02"
valZoom = "2"
Case "\x03"
valZoom = "3"
End Select
cioè adesso mi va bene perchè 01 02 e 03 coincidono... ma se avessi "3D"?Dunque provando a ricapitolare.
farei convertire prima il 3 e poi la D per concatenarle?
Dim s As String
Dim i As Integer
......
......
Read #portaseriale, s, 4 ' Impone una lettura fissa di soli 4 byte per volta
' Ricrea il reale valore-byte che il dispositivo esterno ha inteso trasmettere:
i = Val("&" & s[2, 2])
' Mostra il valore numerico in formato decimale e il carattere ASCII corrispondenti al valore-byte reale ricreato:
Print i, Chr(i)
Dim strDaInviare2 As String = "I2CR" & Chr(ModuloGenerale.settaggioCorrente.I2Cindirizzo) & Chr(1)
SComm.Begin()
Write #SComm, strDaInviare2
SComm.Send()
Sleep intervSleep
Dim valZoom As String = ""
Try Read #SComm, valZoom, Lof(SComm)
valZoom = Replace(valZoom, "\r", "")
Select Case valZoom
Case "\x01"
valZoom = "1"
Case "\x02"
valZoom = "2"
Case "\x03"
valZoom = "3"
End SelectPublic Sub SerialPort1_Read() 'Lettura dalla seriale
Dim Rx As String
Sleep 0.020
Read #SerialPort1, Rx, Lof(SerialPort1)
Split_byte(Rx) 'chiamata alla subroutine Split_byte
End
Public Sub Split_byte(ss As String) ' SUB_RICEZIONE: Splitta la stringa RX in Byte
Dim RXss As String
HE1 = Asc(Mid$(ss, 1, 1)) 'Inizio operazione di split
HE2 = Asc(Mid$(ss, 2, 1))
HE3 = Asc(Mid$(ss, 3, 1))
HE4 = Asc(Mid$(ss, 4, 1))
ID1 = Asc(Mid$(ss, 5, 1))
ID2 = Asc(Mid$(ss, 6, 1))
ID3 = Asc(Mid$(ss, 7, 1))
ID4 = Asc(Mid$(ss, 8, 1))
HE5 = Asc(Mid$(ss, 9, 1))
HE6 = Asc(Mid$(ss, 10, 1))
HE7 = Asc(Mid$(ss, 11, 1))
HE8 = Asc(Mid$(ss, 12, 1))
HE9 = Asc(Mid$(ss, 13, 1))
PR1 = Asc(Mid$(ss, 14, 1))
PR2 = Asc(Mid$(ss, 15, 1))
PR3 = Asc(Mid$(ss, 16, 1)) 'fine operazione di split
ss = "" ' vuoto la stringa
End
Dim valLettura As String = ""
Try Read #SComm, valLettura, Lof(SComm)
valLettura = Replace(valLettura, "\r", "")
Dim p1 As String = valLettura[1]
Dim p2 As String = valLettura[0]
Dim i1 As Integer = Asc(p1)
Dim i2 As Integer = Asc(p2)
Dim e1 As String = Hex$(i1, 2)
Dim e2 As String = Hex$(i2, 2)
Dim invertita As String = e1 & e2
Dim out As Integer = Val("&H" & invertita)Scusami, ma io non ho capito perché hai accennato nei post precedenti alla presenza dell'istruzione "\x" seguita da due caratteri alfanumerici. :rolleyes:
Puoi chiarire come è composto un singolo flusso di dati ricevuto attraverso la porta ?
lo "\x" che leggevo nel debugger è una rappresentazione su schermo, leggibile, di un carattere non rappresentabile graficamente, visivamente.Cioè tu dici che è semplicemente e soltanto il debugger che ti fa vedere in console anche i due caratteri "\x", ma che in realtà il dispositivo esterno non ti invia.
Quindi "\x05" corrisponde al carattere il cui codice ASCII in esadecimale è "05".
Cioè tu dici che è semplicemente e soltanto il debugger che ti fa vedere in console anche i due caratteri "\x", ma che in realtà il dispositivo esterno non ti invia.
Ossia, tu dici che il dispositivo ti invia il valore (esadecimale) 05 proprio come valore numerico e non composto dai due caratteri dello zero e del cinque ?
Faccio un esempio:
se in console vedessi "\x05\x00", in realtà dalla porta è arrivato &05 &00, e NON: &5C &78 &30 &35 &5C &78 &30 &30 ?
Dim valLettura As Short
' Sposta il puntatore del flusso al secondo byte (indice 1) del flusso di dati ricevuti:
Seek #SComm, 1
' Legge due byte e li memorizza in una variabile di tipo "Short":
Try Read #SComm, valLettura