uControl
Mayo 22, 2013, 11:00:36 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Problema al visualizar datos  (Leído 591 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 589



WWW
« : Abril 26, 2012, 07:57:22 »

Hola a todos  Grin

Esta vez vengo con un problema bastante extraño que me tiene dando vueltas hace varias horas..

Yo tengo la siguiente aplicación:


Al conectar el puerto COM1, por ejemplo, y darle clic a LED 1, me genera la siguiente trama.


Para enviar la trama de esa manera, tengo el siguiente código:

Código:
private void LED1_Button_Click(object sender, EventArgs e)
        {
            buffer[0] = 0x31; // Envía primero el comando -> 0x01 -> Led's.
            buffer[1] = 0x2C; // Coloca una coma para separar los datos.
            buffer[2] = 0x31; // Envía el dato -> 0x01 -> LED1.
            buffer[3] = 0x2C; // Coloca una coma para separar los datos.
            buffer[4] = 0x31; // Envía el dato -> 0x01 -> ESTADO: encendido.
            buffer[5] = 0x2C; // Coloca una coma para separar los datos.
            buffer[6] = 0x2A; // Fin de instrucción.
           
            Arduino.Write(buffer,offset,7); // Envía el paquete.
        }

Ahora si quiero por ejemplo mover la barra de desplazamiento para generar un valor de PWM, me genera la siguiente trama:


El código que me genera la trama para este caso es el siguiente:

Código:
private void hScrollBar1_ValueChanged(object sender, EventArgs e)
        {
            buffer[0] = 0x32; // Envía primero el comando -> 0x02 -> Analógico de salida.
            buffer[1] = 0x2C; // Coloca una coma para separar los datos.
            buffer[2] = 0x31; // Envía el dato -> 0x01 -> PWM.
            buffer[3] = 0x2C; // Coloca una coma para separar los datos.
            buffer[4] = Convert.ToByte(PWM.Value); // Envía el dato.
            buffer[5] = 0x2C; // Coloca una coma para separar los datos.
            buffer[6] = 0x2A; // Fin de instrucción.
            debug.Text = Convert.ToString(PWM.Value); // Muestra el valor real de la barra de desplazamiento.
            Arduino.Write(buffer, offset, 7); // Envía el paquete.
        }

Por lo tanto mi problema es que necesito que al mover la barra de desplazamiento no me imprima el código ascci correspondiente al dato, sino que me imprima el valor numérico de 0 a 255 correspondiente a la posición de la barra.

Alguien tiene alguna idea de como puedo llegar a solucionar este problema ?  duda
En línea
Felixls
Moderador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 3025



WWW
« Respuesta #1 : Abril 26, 2012, 08:04:33 »

y... si los valores de la barra son menores a 10 podría ser


 buffer[4] = 48 + Convert.ToByte(PWM.Value); // Envía el dato.

Si el valor es mayor a 10 cada dígito te va a ocupar un lugar en el buffer, sabiendo que no puede ser mayor a 4 dígitos lo que podrías hacer es rellenar siempre el valor con 0 o espacios a la izquierda y convertir el valor a string con

PWM.Value.ToString()
« Última modificación: Abril 26, 2012, 08:07:37 por Felixls » En línea
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 589



WWW
« Respuesta #2 : Abril 26, 2012, 08:24:19 »

Citar
y... si los valores de la barra son menores a 10 podría ser


 buffer[4] = 48 + Convert.ToByte(PWM.Value); // Envía el dato.

En una de las últimas pruebas hice justamente eso, pero como vos decís solamente funciona para valores entre 0 y 10.

Código:
buffer[4] = Convert.ToByte(PWM.Value+48); // Envía el dato.

Citar
sabiendo que no puede ser mayor a 4 dígitos lo que podrías hacer es rellenar siempre el valor con 0 o espacios a la izquierda y convertir el valor a string con

PWM.Value.ToString()

No entendí a que referís con ese planteo  duda
En línea
Felixls
Moderador
PIC24F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 3025



WWW
« Respuesta #3 : Abril 26, 2012, 08:26:56 »

Me refiero a que en un byte no es posible expresar (en ASCII) valores superiores a 9, por ello tu buffer debería tener lugar para cada uno de los dígitos del valor del PWM.
En línea
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 589



WWW
« Respuesta #4 : Abril 26, 2012, 08:32:18 »

Citar
Me refiero a que en un byte no es posible expresar (en ASCII) valores superiores a 9, por ello tu buffer debería tener lugar para cada uno de los dígitos del valor del PWM.

Tenés razón, mejor investigo un poco más a ver si puedo plantear el código que puse de otra manera.

igual , gracias por la ayuda sergio  rolleyes2
En línea
Moyano Jonathan
Amigo de uControl
PIC16F
******
Desconectado Desconectado

Mensajes: 589



WWW
« Respuesta #5 : Abril 26, 2012, 08:59:18 »

Solucionado  bang

Código:
            string buffer2 = "";
            buffer2 = "2" + "," + "1" + "," + Convert.ToString(PWM.Value) + "," + "*";
            debug.Text = Convert.ToString(PWM.Value);
            Arduino.Write(buffer2); // Envía el paquete.

En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.18 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.088 segundos con 29 consultas. (Pretty URLs adds 0.011s, 3q)
loggkey