Stap 13: afwerking
Tot slot onze applicatie moeten nu we alleen toevoegen drie gebeurtenis-handlers, één voor elke schuifregelaar die zal de "UpdateMotors()"-functie wordt aangeroepen telkens wanneer de waarde van de schuifregelaar wordt gewijzigd en één aan de COM-poort instellen. Om te doen deze Ga terug naar de ontwerper en selecteer de eerste schuif en zoek de gebeurtenis Scroll uit de lijst en voer "SliderOneChange" en druk op enter. In de zojuist gemaakte gebeurtenis-handler toevoegen deze lijn zodat de schuifregelaar een update sturen naar de TinyDuino: "UpdateMotors();".
Doe hetzelfde voor de tweede schuifregelaar te typen "SliderTwoChange" in plaats van "SliderOneChange" dit keer.
Tot slot een gebeurtenis-handler onder de SelectedIndexChanged gebeurtenis aan de "ComboBox" genaamd "OnComChange" toevoegen en voeg deze code toe:
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(); } } }
Deze code zal ons in staat stellen om te wijzigen welke com-poort die we zijn toezending van gegevens aan zodra het programma gestart heeft.
Let op: Deze toepassing is instabiel, kunt u foutafhandeling zodat het stabiel. Volg deze procedure voor het beste resultaat zonder foutafhandeling:
- Plug in TinyDuino
- WinForms toepassing starten
- Selecteer de COMpoort de TinyDuino bezet
- ALLEEN dan veranderen de schuifregelaars