Meddelande från en WinForms till en TinyDuino (14 / 14 steg)
Steg 14: Avslutande tankar och källa data överför
Hela koden bakom bör se ut ungefär så här:
med hjälp av systemet.
använder System.Collections.Generic;
använder System.ComponentModel;
med hjälp av System.Data;
med hjälp av System.Drawing;
använder System.Linq;
använder System.Text;
använder System.Threading.Tasks;
använder System.Windows.Forms;
använder System.IO.Ports;
namnområdet MotorController
{
offentliga partiell klass MotorRemote: Form
{
skapa serieport singleton
SerialPort seriell;
decalre en ny klass som befolkar vår kombinationsruta
allmän klass Port
{
sträng med offentlig namn {get, uppsättning;}
Public int värdet {get, uppsättning;}
offentliga Port (sträng n, int jag)
{
Namn = n;
Värde = i.
}
}
offentliga MotorRemote()
{
InitializeComponent();
}
privata void OnWindowLoad (objekt avsändare, EventArgs e)
{
kombinationsruta med bultsats seriella portar
string [] avalablePorts = SerialPort.GetPortNames();
om (avalablePorts.Length > 0)
{
skapa en lista över objekt att fylla kombinationsrutan med
Lista < Port > portsList = ny lista < Port > ();
för (int jag = 0; jag < avalablePorts.Length; i ++)
{
portsList.Add (ny hamn (avalablePorts [i], jag));
}
kombinationsruta med portar
cbComPortChooser.DataSource = portsList;
cbComPortChooser.DisplayMember = "Namn";
cbComPortChooser.ValueMember = "Värde";
}
}
void UpdateMotors()
{
meddelande storlek constent
CONST byte messageType = 2;
Läs reglagen
motor 1
byte motorOneSpeed = (byte)tbMotorOne.Value;
motor 2
byte motorTwoSpeed = (byte)tbMotorTwo.Value;
skapa och fylla en bytematris som vårt budskap
byte [] serialMessage = {messageType, motorOneSpeed, motorTwoSpeed};
Skicka meddelande
följetong. Skriva (serialMessage, 0, serialMessage.Length);
}
privata void SliderOneChange (objekt avsändare, EventArgs e)
{
UpdateMotors();
}
privata void SliderTwoChange (objekt avsändare, EventArgs e)
{
UpdateMotors();
}
privata void OnComChange (objekt avsändare, EventArgs e)
{
om (serial! = null & & följetong. IsOpen)
{
följetong. Close();
}
Port-port = (Port)cbComPortChooser.SelectedItem;
seriella = nya SerialPort (port. Namn);
följetong. Baud = 9600;
om (! följetong. IsOpen)
{
följetong. Open();
}
}
privata void VidStängning (objekt avsändare, FormClosedEventArgs e)
{
följetong. Close();
}
}
}
Meddelande: Händelsen OnClose() krävs inte på alla datorer. Men det hindrar programmet från att lämna en föräldralösa COM-port när användaren stänger den. Utan det är det möjligt måste du starta om datorn för att få åtkomst till den porten. För att lägga till händelsen VidStängning skapar en händelsehanterare av huvudformuläret som du gjorde för händelsen OnWindowLoad denna gång med händelsen FormClosed snarare än händelsen Load. Lägga till seriella inuti hanteraren. Close(); för att stänga alla öppna seriell anslutning.
Om du av misstag skapa ytterligare händelsehanterare du inte slutar använda oroa dig inte för mycket. De påverkar inte funktionen av ansökan och kan tas bort genom att klicka på tillhörande kontrollen och ta bort händelsehanterare från menyn lightning bolt.
WinForms projektet nedladdning: https://goo.gl/rop4zl