En ésta aplicación se muestra el procedimiento para leer el ADC y graficar el dato obtenido.
Para este ejemplo se requiere preguntar por el valor del ADC en todo momento, por lo que utilizaremos un hilo o subproceso (Thread) que esté trabajando en segundo plano.
Vamos a la pestaña Project > Add Existing Item… y seleccionamos el archivo Hilo.cs.
Ahora debemos agregar la librería Threading.
using LibMetodosSade; using System.IO.Ports; using System.Threading;
Creamos los objetos hilo y t.
public partial class Form1 : Form { Thread t; Hilo hilo; ... ... ... public Form1() { InitializeComponent(); hilo = new Hilo(this); t = new Thread(hilo.Metodo); ... ... ...
Colocamos un botón a nuestro diseño, damos doble click para crear un evento, así al presionarlo se ejecutará el hilo.
Agregamos un Chart en donde se graficará el valor digital que manda el ADC. Como el Chart lo vamos a modificar desde la clase Hilo hay que volverlo un objeto público. En las propiedades cambiamos el valor de Modifiers de Private a Public.
Para evitar la restricción de poder modificar los elementos de la interfaz de usuario mediante un hilo, debemos agregar la siguiente instrucción.
public partial class Form1 : Form { Thread t; Hilo hilo; public LibMetodosSade.MetodosSADE ms = new LibMetodosSADE.MetodosSADE(); SerialPort sp = new SerialPort(); string[] nombre_puertos = SerialPort.GetPortNames(); ... ... ...
De manera opcional podemos definir el valor de los ejes o dejar que se ajusten automáticamente.
Definimos los ejes donde el eje X es el número de muestra (puede ir de 0 a 100 por ejemplo) y el eje Y el valor en digital (de 0 a 255).
Lo que sigue es editar el código de la classe Hilo. Damos click a la pestaña Solution Explorer, expandimos Hilo.cs y abrimos Hilo.
Ya en la clase colocamos el código que se ejecutará en segundo plano en un while infinito dentro de Metodo(). Para mandar a llamar un elemento de la clase Form1 desde la clase Hilo utilizamos el objeto form1.
public void Metodo() { int i = 0; //Definimos el tipo de gráfico que se mostrará en el Chart. form1.chart1.Series["Series1"].CharType = System.Windows.Forms.DataVisualization.Charting.SeriesCharType.Line; while(true) { int ValDigital = form1.ms.ADC(1); //Leemos el ADC del canal 1. float Voltaje = (float) (ValDigital * 3.3)/255; //Calculamos el voltaje. form1.label1.Text = "Voltaje: " + Voltaje.ToString() + " V"; //Se manda el valor a la etiqueta en Volts. form1.chart1.Series[0].Points.AddXY(i, ValDigital); //Enviamos los datos al Chart. i++; if(i == 100) { i = 0; form1.chart1.Series[0].Points.Clear(); } Thread.Sleep(100); } }
La condición if(i==100) se utiliza para limpiar el Chart cuando se hayan obtenido 100 muestras, aunque si se dejó el ajuste de los ejes en automático no es necesario declararla.
Nótese como utilizamos el form1 para mandar a llamar a la etiqueta label1, al Chart1 y también a los métodos de SADE ms.
Por último ejecutamos nuestra aplicación presionando el botón START.
¡Gracias por su interés en SADE!
Cualquier duda o información pueden contactarnos en: [email protected]