Étape 13 : finitions
Pour terminer notre application maintenant nous avons seulement ajouter des gestionnaires d’événements de trois, un pour chaque curseur qui appelle la fonction « UpdateMotors() » chaque fois que la valeur du curseur est modifiée et l’autre pour configurer le port COM. Pour ce faire, allez vers le concepteur et sélectionnez le curseur d’abord, recherchez l’événement de défilement de la liste et entrez "SliderOneChange" et appuyez sur entrent. Dans le gestionnaire d’événements nouvellement créé, ajoutez cette ligne pour rendre le curseur à envoyer un message de mise à jour à la TinyDuino: « UpdateMotors(); ».
Faites de même pour le deuxième curseur taper "SliderTwoChange" plutôt que "SliderOneChange" cette fois.
Enfin, ajoutez un gestionnaire d’événements dans l’événement SelectedIndexChanged de la « ComboBox » appelé « OnComChange » et ajoutez ce code :
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(); } } }
Ce code va nous permettre de changer ce port com nous transmettons des données une fois que le programme a commencé.
S’il vous plaît noter : Cette application est instable, vous pouvez ajouter la gestion des erreurs pour la rendre stable. Sans la gestion des erreurs, veuillez suivre cette procédure pour obtenir les meilleurs résultats :
- Brancher TinyDuino
- Démarrez l’application WinForms
- Sélectionnez le compotier qu'occupe le TinyDuino
- SEULEMENT ensuite changer les curseurs