Paso 13: toques finales
Para terminar nuestra aplicación ahora necesitamos sólo añadimos controladores de tres eventos, uno para cada control deslizante que se llame a la función "UpdateMotors()" cada vez que se cambia el valor del control deslizante y otro para configurar el puerto COM. Para hacer esto, vaya a la diseñadora y seleccione el primer control deslizante y ubicar el evento Scroll de la lista y escriba "SliderOneChange" y pulse Intro. En el controlador de eventos recién creado agregue esta linea para hacer el regulador envía un mensaje de actualización a la TinyDuino: "UpdateMotors();".
Hacer lo mismo con el segundo control deslizante escribir "SliderTwoChange" en lugar de "SliderOneChange" esta vez.
Por último añadir un controlador de eventos en el evento SelectedIndexChanged a "ComboBox" llamado "OnComChange" y añadir este código:
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; namespace MotorController { public partial class MotorRemote : Form { //create serial port singleton SerialPort serial; //decalre a new class that will populate our combo box public class Port { public string Name { get; set; } public int Value { get; set; } public Port(string n, int i) { Name = n; Value = i; } } public MotorRemote() { InitializeComponent(); } private void OnWindowLoad(object sender, EventArgs e) { //populate combo box with avalable serial ports string[] avalablePorts = SerialPort.GetPortNames(); if (avalablePorts.Length > 0) { //create a list of objects to fill the combo box with List<Port> portsList = new List<Port>(); for (int i = 0; i < avalablePorts.Length; i++) { portsList.Add(new Port(avalablePorts[i], i)); } //populate the combo box with ports cbComPortChooser.DataSource = portsList; cbComPortChooser.DisplayMember = "Name"; cbComPortChooser.ValueMember = "Value"; } } void UpdateMotors() { //message size constent const byte messageType = 2; //read the sliders //motor 1 byte motorOneSpeed = (byte)tbMotorOne.Value; //motor 2 byte motorTwoSpeed = (byte)tbMotorTwo.Value; //create and fill a array of bytes as our message byte[] serialMessage = {messageType, motorOneSpeed, motorTwoSpeed}; //send Message serial.Write(serialMessage, 0, serialMessage.Length); } private void SliderOneChange(object sender, EventArgs e) { UpdateMotors(); } private void SliderTwoChange(object sender, EventArgs e) { UpdateMotors(); } private void OnComChange(object sender, EventArgs e) { if (serial != null && serial.IsOpen) { serial.Close(); } Port port = (Port)cbComPortChooser.SelectedItem; serial = new SerialPort(port.Name); serial.BaudRate = 9600; if (!serial.IsOpen) { serial.Open(); } } private void OnClose(object sender, FormClosedEventArgs e) { serial.Close(); } } }
Este código nos permitirá cambiar qué puerto com nosotros estamos transmitiendo datos a una vez comenzado el programa.
Nota: Esta aplicación es inestable, puede Agregar control de errores para que sea estable. Sin errores por favor siga este procedimiento para obtener mejores resultados:
- Enchufe TinyDuino
- Iniciar aplicación WinForms
- Seleccione el puerto que ocupa el TinyDuino
- SÓLO entonces cambiar los cursores