using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports; // No olvidar.
namespace Entrada_Arduino_AWF_3_CS
{
public partial class Form1 : Form
{
// Utilizaremos un string como buffer de recepción.
string Recibidos;
public Form1()
{
InitializeComponent();
if (!serialPort1.IsOpen)
{
try
{
serialPort1.Open();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
serialPort1.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
}
//Inicializar la lista, esto debe ocurrir DESPUES de InitializeComponent()
this.leds = new[] { this.pictureBox1, this.pictureBox2, this.pictureBox3, this.pictureBox4 }.ToList();
}
// Al recibir datos.
private void Recepcion(object sender, SerialDataReceivedEventArgs e)
{
// Acumula los caracteres recibidos a nuestro 'buffer' (string).
Recibidos += serialPort1.ReadExisting();
// Invocar o llamar al proceso de tramas.
Invoke(new EventHandler(Actualizar));
}
// Procesar los datos recibidos en el bufer y extraer tramas completas.
private void Actualizar(object sender, EventArgs e)
{
// Asignar el valor de la trama al richTextBox.
richTextBox1.Text += Recibidos;
// Selecciona la posición final para leer los mensajes entrantes.
richTextBox1.SelectionStart = richTextBox1.Text.Length;
// Mantiene el scroll en la entrada de cada mensaje.
richTextBox1.ScrollToCaret();
// char[] Delimitador = { ' ', '\r', '\n' };
// string[] Palabras = Recibidos.Split(Delimitador);
// foreach (string Comandos in Palabras)
// {
// switch (Comandos)
// {
// case "1=ON":
// pictureBox1.Image = Properties.Resources.Led_rojo_encendido;
// Recibidos = "";
// break;
// case "1=OFF":
// pictureBox1.Image = Properties.Resources.Led_rojo_apagado;
// Recibidos = "";
// break;
// case "2=ON":
// pictureBox2.Image = Properties.Resources.Led_rojo_encendido;
// Recibidos = "";
// break;
// case "2=OFF":
// pictureBox2.Image = Properties.Resources.Led_rojo_apagado;
// Recibidos = "";
// break;
// case "3=ON":
// pictureBox3.Image = Properties.Resources.Led_rojo_encendido;
// Recibidos = "";
// break;
// case "3=OFF":
// pictureBox3.Image = Properties.Resources.Led_rojo_apagado;
// Recibidos = "";
// break;
// case "4=ON":
// pictureBox4.Image = Properties.Resources.Led_rojo_encendido;
// Recibidos = "";
// break;
// case "4=OFF":
// pictureBox4.Image = Properties.Resources.Led_rojo_apagado;
// Recibidos = "";
// break;
// }
//}
var si = Properties.Resources.Led_rojo_encendido;
var no = Properties.Resources.Led_rojo_apagado;
var valores = Recibidos.Split(' ')
.Select(x => x.Split('='))
.Select(x => new
{
Index = int.Parse(x[0]),
Value = x[1] == "ON"
});
foreach (var v in valores)
{
this.leds[v.Index].Image = v.Value ? si : no;
}
//richTextBox1.Text += " " + DateTime.Now.ToString() + "\r";
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) // ¿El puerto está abierto?
{
serialPort1.Close(); // Puerto cerrado.
}
}
void Actualizar()
{
byte[] mBuffer = Encoding.ASCII.GetBytes("ACTUALIZAR"); // Envía comando ACTUALIZAR por el puerto.
serialPort1.Write(mBuffer, 0, mBuffer.Length);
}
private void button_Actualizar_Click(object sender, EventArgs e)
{
Actualizar();
}
private void Form1_Load(object sender, EventArgs e)
{
Actualizar();
}
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Clear(); // Limpiar contenido del richTextBox.
Recibidos = "";
}
}
}