Escrito originalmente por hhpp
Hola amigos, que pasaria si yo recibo los datos continuamento como los separo, sigue el mismo formato, pero ahora es continuamento como separa los datos para que se vayan a sus respectivos lugares.
HP.}
Los datos no se envían contínuamente (o la menos no es conveniente), se envían de a rafagas. O sea, se envían en conjuntos de longitud fija o en conjuntos con un retorno de carro al final.
Si se enviaran continuamente no habría forma de saber dónde empieza uno y termina el otro.
Entonces:
Si los datos tienen una longitud fija, por ejemplo 4 bytes, entonces bastará con poner:
mscomm1.Rthreshold = 4
Con esto cada 4 caracteres que lleguen al puerto de activará el evento OnComm.
Entonces, supongamos que querés recibir los valores de 5 potenciómetros con el ADC del Pic. Los 5 ADC"s los identificás con A, B, C, D, E.
Entonces desde el Pic enviás "B231"... esto quiere decir que el potenciometro B tiene un valor de 231. Facil!
Ahora, para separar la "B" del resto de los números tenés que:
(dentro del evento On_Comm)
Dim dato as string
Dim pote as string
Dim valor as byte
dato = mscomm1.input
pote = Left(dato, 1)
valor = CByte(Right(dato, 3)
Select Case pote
Case "A":
"resto del codigo para A.
Case "B":
"resto del codigo para B.
.....
.....
End Select
Eso es con buffer de longitud fija. Cuidado porque no es lo mismo "B231" que "B23", este último tiene 3 caracteres. Tendría que ser "B023".
La otra forma es con un retorno de carro al final, sin setear Rthreshold. Es el método que explique unos post mas atrás. La forma de separar los caracteres es la misma, salvo que (creo) hay que hacer:
dato = mscomm1.input
dato = trim(dato)
Con trim se sacan los caracteres invalidos o no legibles. Con esto sacamos el simbolo de retorno de carro, que aunque no lo veamos está. De otra forma después salen errores por todos lados al separar los datos.
PD: el codigo que postee puede tener algun error menor. Pasa cuando uno escribe codigo sin el editor (no está probado) y pasa mucho tiempo sin tocar VB

Espero que sirva.