none
Recibiendo ASCII RRS feed

  • Pregunta

  • Hola:

    Haciendo un programa (Visual C# 2010) de prueba, en la Interfaz pongo una foto de un Led apagado y otro encendido, también puede ser un texto.

     

    Por ejemplo:

    En un puerto serie me entra un carácter ASCII como puedes ver en la tabla de arriba. En el puerto serie tengo conectado un PIC16F84A , en él tiene 4 pulsadores (no interruptores), puede enviar al puerto serie un caracter por cada pulsador que perfectamente bien entiende y lo recibe por la Interfaz.

    El envío se hace mediante HEX, si pulso el primer pulsador del PIC, envía este caracter de la tabla ASCCI, por ejemplo, la letra A , en hexadecimal es el 41. En el otro pulsador se le envía la letra a ,  en hex sería el 61. Perfectamente bien, la interfaz Visual C# recibe estos carácteres en ASCII, al detectarlo sea con un componente como el picture, más fácil aún, un label1 muestra en el Form1 que ha llegado la A o la a . (La A mayúscula o la a minúscula).

    ¿Cómo se hace esto?

    Para recibir datos, por ahora he hecho esto.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    
    namespace Puerto_Serie
    {
      public partial class Form1 : Form
      {
        // Utilizaremos un string como buffer de recepcion
        string Recibidos;
    
        public Form1()
        {
          InitializeComponent();
          // Abrir puerto mientra se ejecute la aplicación
          if (!serialPort1.IsOpen)
          {
            try
            {
              serialPort1.Open();
            }
            catch (System.Exception ex)
            {
              MessageBox.Show(ex.ToString());
            }
          }
          // Ejecutar la funcion Recepcion por disparo del Evento 'DataReived'
          serialPort1.DataReceived += new
          System.IO.Ports.SerialDataReceivedEventHandler(Recepcion);
        }
        // Al recibir los datos
        private void Recepcion(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
          // Acumular los carácteres recibidos a nuestro 'buffer' (string)
          Recibidos += serialPort1.ReadExisting();
          // Invocar o llamar al proceso de tramas
          this.Invoke(new EventHandler(Actualizar));
        }
        // Procesar los datos recibidos en el buffer y extraer tramas completas
        private void Actualizar(object s, EventArgs e)
        {
          // Asignar el valor de la trama al textBox
          richTextBox1.Text = Recibidos;
        }
      }
    }
    
    

    Saludo.


    http://electronica-pic.blogspot.com
    lunes, 14 de marzo de 2011 13:45

Respuestas

  • byte b = 0x61;
    Char c = Convert.ToChar(b);
    
    if (Char.IsLower(c)) MessageBox.Show("Minúscula"); 
    
    
    • Marcado como respuesta Metaconta martes, 15 de marzo de 2011 22:04
    • Desmarcado como respuesta Metaconta martes, 15 de marzo de 2011 22:04
    • Marcado como respuesta Metaconta martes, 15 de marzo de 2011 22:04
    martes, 15 de marzo de 2011 18:33

Todas las respuestas

  • Buenas:

     

    En un ejemplo me han dado este código, no se si servirá para lo que quiero.

    private void textBox1_TextChanged(object sender, EventArgs e)
        {
          char[] charNum;
          if (textBox1.Text.Length > 0)
          {
            string Str = textBox1.Text;
            charNum = Str.ToCharArray();
            switch ((int)charNum[0])
            {
              case 65:  // 'A'
              case 66:  // 'B'
              case 67:  // 'C'
              case 68:  // 'D'
              case 69:  // 'E'
              case 70:  // 'F'
                MessageBox.Show("Mayuscula" + charNum[0]);
                break;
              case 97:  // 'a'
              case 98:  // 'b'
              case 99:  // 'c'
              case 100:  // 'd'
              case 101:  // 'e'
              case 102:  // 'f'
                MessageBox.Show("Minuscula" + charNum[0]);
                break;
            }
          }
        }
    
    
    Parece ser que debo coger en la variable Recibidos los bytes y luego hacer el código de arriba. Voy hacer pruebas. Cualquier sugerencia bienvenida.


    http://electronica-pic.blogspot.com
    martes, 15 de marzo de 2011 15:59
  • byte b = 0x61;
    Char c = Convert.ToChar(b);
    
    if (Char.IsLower(c)) MessageBox.Show("Minúscula"); 
    
    
    • Marcado como respuesta Metaconta martes, 15 de marzo de 2011 22:04
    • Desmarcado como respuesta Metaconta martes, 15 de marzo de 2011 22:04
    • Marcado como respuesta Metaconta martes, 15 de marzo de 2011 22:04
    martes, 15 de marzo de 2011 18:33