මම අද කතා කරන්න යන්නේ අපේ මූළික පාඩම් මාලා වලින් පොඩ්ඩකට මිදිල ඔයාලට වැදගත් වේවි කියල හිතෙන codes ගැන කතා කරන්නයි. මටත් මේ ගැන යොයන්න වුනේ මගේ යාළුවෙකුගේ අවශ්ය තාවයකට program එකක් ලියන්න වුන නිසියි. ඉතින් මම හිතුවා ඔයාලත් එක්කත් ඒ දේවල් බෙදා ගන්න.
ඇයි අපිට Port Programming අවශ්යය
සමහර programs වලදි අපිට අපේ computer එකට පිටතින් ඇති hardware එකකින් data ගන්න සහ ඒවාට data යවන්න අවශ්ය වෙනව. මේ සඳහා අපිට computer එකේ තිබෙන විවිධ වූ ports භාවිතා කරන්න පුළුවන් වුනත් අපි අතර ජනප්රිය වුන port එකක් තියෙනව ඒ සඳහා, ඒ තමයි Serial Port එක. නමුත් දැන් නම් ගොඩක් computers වල මේ port එක එන්නේ නෑ. නමුත් භාවිතයේ සරල බව නිසාම (USB වලට සාපේක්ෂව) අදටත් භාවිතා වෙනව. ඒ නිසා මම හිතුව ඒ ගැන කතා කරන්න.
Program එක ගැන
මම code කරන්න තෝර ගත්තේ C#.Net කියන programming language එක, ඒ සඳහා විශේෂ හේතුවක් නැති වුවත් C# කියන්නේ මගේ ප්රියතම programming language එක නිසා තොරගත්ත. .Net වලදි නම් මෙය ඉතා පහසු කරල තියෙනව Framework එක මගින්.
අපි මුලින්ම කරන්න ඕන අවශ්ය කරන system classes ටික import කර ගන්න ඒක,
using System.IO.Ports;
using System.Threading;
දැන් අපි serial port object එකක් අවශ්ය කරන parameters දීල හදාගන්න ඕන.
SerialPort myserialPort = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
myserialPort.Handshake = Handshake.None;
ඊළගට අපි event handler එකක් හඳා ගන්න ඕන serial port එකට data ලැබුනම run වෙන්න,
myserialPort.DataReceived += new SerialDataReceivedEventHandler(SP_DataReceived);
දැන් අපි හදා ගත්ත serial port එක open කරන්න ඕන ඒක භාවිතා කරන්න කලින්.
myserialPort.Open();
දැන් අපි අපේ computer එකේ serial port එක හරහා data ලබා ගන්න සහ යවන්න සූදානම්. අපිට serial port එකෙන් ලැබෙන data, UI එකට ගන්න delegate භාවිතා කරන්න වෙනව. ඒ .Net framework එක cross-thread actions වලට ඉඩ ලබා නොදෙන නිසා. අපි delegate භාවිතා කරන්නෙ Non-UI Thread එකක ඉදල UI Thread එකට data ලියන්නයි.
private delegate void SetTextDeleg(string text);
දැන් අපි කලින් හදා ගත්ත event handler එකට ලබා දුන්න method එක code කරන්න ඕන data ලැබුනම run වෙන්න.
void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
string data = _serialPort.ReadLine();
this.BeginInvoke(new SetTextDeleg(SI_DataReceived), new object[] { data });
}
දැන් SI_DataReceived method එක code කරන්න ඕන අපිට ලැබෙව data UI එකට ලියන්න.
private void si_DataReceived(string data)
{
textBox1.Text = data.Trim();
}
Data ගන්න වැඩේ හරි දැන්, අපි බලමු කොහොමද data යවන්නේ කියල, ඒ සඳහාත් අපි පොඩි method එකක් ලියමු. data ලියන්න කලින් අනිවාර්යයෙන්ම port එක open කරල තියෙන්න ඕන.
try
{
if(!(myserialPort.IsOpen))
myserialPort.Open();
myserialPort.Write("SI\r\n");
}
catch (Exception ex)
{
MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
}
දැන් ඔක්කොම වැඩ ටික හරි. අවසානයටම ඔයාලගේ program එක close වෙන කොට port එක close කරන්න.
myserialPort.Close();
මම මේ code එක ඉතාමත් සරල අන්දමින් කලේ ඔයාලට අවශ්ය නම් මේක තව සංකීර්ණ ලෙස ඔයාලගේ අවශ්යතාවවය අනුව යොදාගන්න පුළුවන්.