Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

11/02/2012 #1


Enviar bytes por puerto serial
hola a todos, ojala alguien pueda ayudarme en este problema: estoy usando visual basic 2010 para enviar un dato por el puerto serial. Esta es la rutina que uso:


Sub SendSerialData(ByVal data As String)

Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1")
com1.WriteLine(data)
End Using

End Sub




pero mi problema es que el programa envía caracteres y yo necesito que envíe el valor hexadecimal de la variable. por ejemplo, si mi variable vale 0x09 en hexadecimal, mandar el valor 0000 1001. pero en lugar de mandar el valor hexadecimal, el programa manda el caracter '9'.

ya intenté cambiando el tipo de dato a byte, tanto de la subrutina como de la variable, incluso le indique que envie Val(data) pero igaul manda un caracter. si alguien sabe de alguna rutina que envíe un byte por el puerto serie le estaré muy agradecido.




edito: no es necesario que el programa sea en vb2010. si alguien sabe de algún programa que envíe bytes por el puerto serial sería de gran ayuda, solo necesito darle un valor, por ejemplo 127 y que el programa mande el valor 0x7f por el puerto serial. tan solo eso. no importa que sea en el lenguaje que fuere. agradezco de antemano cualquier ayuda o sugerencia.
11/02/2012 #2

Avatar de mdchaparror

El receptor es el que interpreta el dato recibido como un carácter, recuerda que cada letra es representada por un hexadecimal, ejemplo 0x41 =A.
Es decir si mandas una A por el puerto serie en si lo que estas mandando es 0x41.
17/02/2012 #3

Avatar de Meta

Hola:

manual serie Visual basic.
http://electronica-pic.blogspot.com/...ual-basic.html
Saludo.
12/04/2012 #4


el_patriarca: Tengo exactamente el mismo problema que tu, no logro enviar un BYTE. Por ejemplo, si hago:
dim dato as byte = 40.
Y luego si lo envio por serial, a juro lo tengo que convertir en VB a string porque si no me sale un error. Y no quiero enviar un string! quiero enviar el byte 40, es decir, 00101000.
12/04/2012 #5

Avatar de Meta

Código dentro de un botón.

Código:
Private Sub button_t_Click(sender As Object, e As EventArgs)
    serialPort1.Open()
    Dim mBuffer As Byte() = New Byte(0) {}
    mBuffer(0) = &H74 'ASCII letter "t".
    serialPort1.Write(mBuffer, 0, mBuffer.Length)
    serialPort1.Close()
End Sub
Este ejemplo puse el 74 que corresponde la letra t. El 40 lo harás usted mismo.

¿Te funciona?

Saludo.
12/04/2012 #6


Gracias por tu ayuda Meta. No tengo el metodo .Write en mi Visual Basic, no se por que =( Hay que incluir alguna libreria en especial???

Gracias
12/04/2012 #7

Avatar de Meta

Debes tener el Write si o si. Prueba con el Visual Basic 2010, para hacer una instalación nueva, ya nos contará.

Si no te viene, cosa rara, e Write es para enviar, el read para recibir.

Si no te aparece, algo le pasa el Visual Express 2008.
12/04/2012 #8


Creo que debo aclarar que estoy trabajando en Visual Basic Express 2008. Es muy raro porque por ejemplo para abrir el puerto yo uso serialPort1.portopen.

En que Visual Basic trabajas tu?
12/04/2012 #9

Avatar de Meta

Para abrir el puerto se usa el serialPort1.Open()
Para cerrarlo el serialPort1.Close()

Trabajo con el C#, el Visual Basic lo haré el año que viene, no lo manejo bien.

Prueba los ejemplos de arriba y nos cuentas.
12/04/2012 #10


Entiendo... si logro descifrar lo que sucede aviso por aqui. Gracias =)
12/04/2012 #11

Avatar de Meta

No te olvides de poner arriba del todo del programa este código.

Imports System.IO.Ports

Cuando lo pruebes me avisas.

Saludo.
16/04/2012 #12


andrea1708 dijo: Ver Mensaje
el_patriarca: Tengo exactamente el mismo problema que tu, no logro enviar un BYTE. Por ejemplo, si hago:
dim dato as byte = 40.
Y luego si lo envio por serial, a juro lo tengo que convertir en VB a string porque si no me sale un error. Y no quiero enviar un string! quiero enviar el byte 40, es decir, 00101000.


andrea, revisa tu inbox.


edito: andrea, lo siento mucho, me acabo de dar cuenta que el foro me pide 25 mensajes mínimo para enviar privados. dado que tenía 21 hasta la fecha, traté de escribir unos cuantos para cumplir ese requisito, pero el foro me sigue bloqueando y continúa diciéndome que solo tengo 21 mensajes, y me avisa que solo puedo escribirle a un cierto grupo de foreros, supongo que son los moderadores (para qué?). lamento de verdad que tengan que pedirme ese requisito irrisorio, a mi juicio perjudicial y molesto, ya que no pude ayudarte como desearía.

dicho esto, te digo que pude solucionar el problema del envío de datos por puerto serial y me funcione de maravilla. aquí te paso el código, no se colocar entre etiquetas de "code", así que irá como parte del post entre líneas punteadas:


--------------------------------------------------------------------------------


Private Sub Button_t_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_t.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = TextBox1.Text
' mBuffer(0) = &H86 '&H74 'ASCII letra "t".
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub

--------------------------------------------------------------------------



button_t es la etiqueta del botón, puedes cambiarlo a lo que deseas. y la línea que dice " mBuffer(0) = &H86 '&H74 'ASCII letra "t"" era para hacer mis pruebas, no interesa y puedes borrarla si gustas.

respecto a vb2008: un amigo lo probó y le funcionó y el usa vb2008 por lo que creo que no tendrás problemas en usar esa subrutina.
finalmente decirte que para nada es una molestia, aquí estamos todos para ayudarnos en lo que podemos. por el contrario, discúlpame por tardar en responder y espero que te haya servido, se nota que eres una persona muy educada.

suerte.







.
16/04/2012 #13

Avatar de Meta

el_patriarca dijo: Ver Mensaje
andrea, revisa tu inbox.
Hagan caso, lean. Les damos respuestas directas, no les funciona, algo no anda bien.

Enviar bytes por puerto serial



Saludo.
17/04/2012 #14


Meta dijo: Ver Mensaje
Hagan caso, lean. Les damos respuestas directas, no les funciona, algo no anda bien.

Enviar bytes por puerto serial



Saludo.
una respuesta directa sería la subrutina.

mi pregunta fue muy específica preguntando si alguien sabía de alguna subrutina que envíe un valor hexadecimal por el puerto serie. tu respuesta fue un curso de vb que no esta mal, no seré ingrato, y ahora te agradezco no solo por la ayuda y por tomarte tu tiempo en ayudarme. pero una respuesta concreta era "usa esta subrutina: ......... "

en lo que no estoy de acuerdo y es lo que me mueve a escribir este post es que no me gusta la manera en que ayudan algunos foreros de por aquí. ya tuve un problema cuando quería armar un grabador de pic's y un forero me respondió de una manera totalmente prepotente y soberbia cuando la respuesta era tan sencilla como cuatro palabras: "lee el post #1".

por favor no pienses que no me dio la gana de leer el tutorial , o no me dio la gana de hacerte caso, lo que ocurre es que ese tutorial abarca desde lo básico y mi necesidad era más específica.
17/04/2012 #15

Avatar de Meta

Hola:

Se que es específica, por esto te puse el código que puedes ver aquí.

Un saludo.
17/04/2012 #16


mira amigo, no tiene sentido entrar en detalles, pues si hilamos así de fino yo te diría que tu primera respuesta es demasiado general y hace apenas 4 días diste una respuesta específica. pero ya lo dije, no es el propósito de este foro.

quedate con la última palabra si deseas. saludos.
17/04/2012 #17

Avatar de Meta

Ok, entonces error rmío, disculpe usted.
26/04/2013 #18


Hola sumo esta información para los que tengan el mismo problema que tuve y se pierdan tres días buscando una información que no figura en ningún lado, para enviar un byte entero (0-255) por visual:

BOTÓN DE CONEXIÓN
SerialPort.BaudRate = ComboVelocidad.Text
SerialPort.PortName = "COM" & Txtpuerto.Text
SerialPort.Encoding = System.Text.Encoding.Default 'ESTA FUNCIÓN HABILITA EL CÓDIGO ASCII EXTENDIDO, QUE NOS DA LA LIBERTAD DE ENVIAR CUALQUIER DATO
SerialPort.Open() 'CONECTA AL PUERTO

BOTÓN DE ENVIAR:
Dim Dato As Byte
Dato = Int(Txtdato.Text)
SerialPort.Write(Chr(Dato))


Saludos
22/07/2013 #19


recibir byte del pic a c#
hola estoy desarrollando un proyecto enviando datos del ADC del pic al pc la interfaz es C# mi duda es la siguiente: estoy construyendo la funcion para recibir datos creo que este es el codigo
pero quiero guardarla en un .txt para luego graficarla.

en la class creo un string.

streamWrite.Archivo = new streamWrite(@"C:\archivo1\\sens.txt", true);

luego abro el puerto y lo limpio (no coloco el codigo por que se hace muy largo)

string recibido;
list<byte> recibido = new list<byte>();
// funcion para recibir
private void serialport_dataReceived(objeto sender, system.IO.ports.serialDataReceived EventArgs e)
{
int bytes =serialport.byteTo.read;
if(byte < N) //recibo N datos (en el programa real colocare si es necesario el numero de datos)
{
return;
byte[] buffers = new byte [bytes];
serialport.read(buffers, 0, bytes);
forrach(byte elem in buffer) //guardo los datos recibidos
{
recibido.add(elem);
quiero saber si esta bien
23/08/2013 #20


Hola Soy nueva en el foro, pero igual eh trabajado con comunicación CDC y tenía ese problema.
Enviaba un dato desde Visual y en el PIC lo recibía como si fuera un codigo ASCII
Pero con el aporte de: arielrodolfodiaz me funciono a la perfección GRACIAS

BOTÓN DE CONEXIÓN
SerialPort.BaudRate = ComboVelocidad.Text
SerialPort.PortName = "COM" & Txtpuerto.Text
SerialPort.Encoding = System.Text.Encoding.Default 'ESTA FUNCIÓN HABILITA EL CÓDIGO ASCII EXTENDIDO, QUE NOS DA LA LIBERTAD DE ENVIAR CUALQUIER DATO
SerialPort.Open() 'CONECTA AL PUERTO

BOTÓN DE ENVIAR:
Dim Dato As Byte
Dato = Int(Txtdato.Text)
SerialPort.Write(Chr(Dato))"
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.