private void ConexionSerial_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { CheckForIllegalCrossThreadCalls = false; //Lee una cadena de BYTES ConexionSerial.Read(datos, 0, 5); while (datos[index] != 65) { //Este ciclo busca el bit se sincronia para evitar la lectura de bytes incompletos index = index + 1; // utiliza un index para poder ubicarse a lo largo del byte datos[4 + index] = (byte)ConexionSerial.ReadByte(); } if (datos[index] == 65 && datos[index + 1] == 67 && datos[index + 2] == 69) { //Cuando el se encuentra con la lectura del byte correcto verifica uno a uno el estado de los bits //if (datos[index + 4] == 0b11111111) //{ // lbconfirmacion.BackColor = Color.Gray; // lbconfirmacion.Text = "Correcto"; //} //if (datos[index + 4] == 0b00000000) //{ // lbconfirmacion.BackColor = Color.Red; // lbconfirmacion.Text = "Incorrecto"; //} lbconfirmacion.Text = Convert.ToString(datos[index + 4]); //Bit LSB Entrada 1 if ((datos[index + 3] & 0b00000001) == 0b00000001) { D14in.BackColor = Color.Red; D14in.ForeColor = Color.White; D14in.Text = "HIGH"; } else { D14in.BackColor = Color.Black; D14in.ForeColor = Color.White; D14in.Text = "LOW"; } //Bit Entrada 2 if ((datos[index + 3] & 0b00000010) == 0b00000010) { D15in.BackColor = Color.Red; D15in.ForeColor = Color.White; D15in.Text = "HIGH"; }
/*------------CONECTAR: establece o no una conexión----------------- */ /*Se conecta y desconecta. Abre y cierra el puerto, visualmente los botones * cambian de apariencia */ private void CONECTAR_DESCONECTAR_Click(object sender, EventArgs e) { try { // Para conectar. Evento que ocurre al presionar el boton para establecer conexion if (CONECTAR_DESCONECTAR.Text == "Conectar") { // Declaración de los parametros necerarios para la transmisión de datos ConexionSerial.PortName = PUERTO.Text; //Define el puerto. Adquiere el valor seleccionado en el combobox "PUERTO" ConexionSerial.BaudRate = Int32.Parse(VELOCIDAD.Text); //Define la velocidad de transmisión. Adquiere el valor seleccionado en el combobox "VELOCIDAD" ConexionSerial.Parity = System.IO.Ports.Parity.None; //Define la característica de Pariedad = NONE ConexionSerial.StopBits = System.IO.Ports.StopBits.One; //Define la característica de Bit de parada = ONE ConexionSerial.DataBits = 8; //Obtiene o establece la longitud estándar de los bits de datos por byte. ConexionSerial.Handshake = System.IO.Ports.Handshake.None; // Handshake = none ConexionSerial.Open(); //Se abre el puerto Temporizado.Enabled = true; //Se habilita el timer [cada cuánto se hará un envio de paquete] Programado desde el entorno gráfico a 500 ms. try { //Cambia la interfaz para desconectar CONECTAR_DESCONECTAR.Text = "Desconectar"; //Cambia el texto impreso en el botón de "Conexión/desconexión" CONECTAR_DESCONECTAR.BackColor = Color.Red; //Cambia el color del botón BUSCA_PUERTO.Enabled = false; //Inhabilita el boton de busqueda de puertos. } catch (Exception exc) { MessageBox.Show(exc.Message.ToString()); //En caso de no poder conectar [ej. Puerto ocupado] } } //Entra al dar click y que el boton tenga como texto "Desconectar" else if (CONECTAR_DESCONECTAR.Text == "Desconectar") { Temporizado.Enabled = false; //Deshabilita el timer de transmisión de datos. ConexionSerial.Close(); //Cierra el puerto CONECTAR_DESCONECTAR.Text = "Conectar"; //Cambia el texto del botón CONECTAR_DESCONECTAR.BackColor = Color.Lime; //Cambia el color del botón BUSCA_PUERTO.Enabled = true; //Habilita de nuevo el botón de busqueda de puertos. PUERTO.Text = "Puertos COM"; //Regresa el combobox de puertos a su estado inicial VELOCIDAD.Text = "Vel. Transmisión"; //Regresa el combobox de Velocidad a su estado inicial } } catch (Exception exc) { MessageBox.Show(exc.Message.ToString()); //En caso de no haber seleccionado las propiedades de transmisión (Puerto y velocidad) } }
/*Fin de seccion--------------------------------------------------------*/ /*--------------------------CIERRE DEL FORM------------------------------*/ private void FIRMATA_FormClosing(object sender, FormClosingEventArgs e) { ConexionSerial.Close(); // Al cerrar el form se asegura de cerrar el puerto serial }