Showing posts with label sinhala arduino. Show all posts
Showing posts with label sinhala arduino. Show all posts

IoT සිංහලෙන් 3 - NodeMCU වැඩ ඇල්ලීම.

9:18 AM 5 Comments

පසුගිය කොටසින් අපි සාකච්ඡා කලේ IoT project වලට තියෙන තියෙන development boards/platform මොනවාද සහ අපේ ප්‍රොජෙක්ට් එකට ගැලපෙන platform එකක් තෝරාගන්නේ කොහොමද කියලා.

අද මම කියලා දෙන්න හදන්නේ භාවිතා කරන්න පහසු,බලසම්පන්න වගේම මිලෙනුත් අඩු platform එකක් වන NodeMCU ගැන. කොහොම උනත් අද මම IoT වලට සම්බන්ධ දෙයක් නම් කියලා දෙන්නේ නෑ. අද කියලා දෙන්නේ NodeMCU වල configuration කරගන්න හැටි සහ basic example එකක් ලියන හැටි ගැනයි.

NodeMCU විශේෂාංග මොනවද කියලා මම පහුගිය කොටසින් සාකච්ඡා කලා. මෙතනින් පසුගිය කොටස බලන්න.

ඉතින් මම පසුගිය කොටසින් කිව්වා වගේ මේ NodeMCU board එකේ තියෙන esp 8266 කියන්න WiFi chip එක Java, C/C++, Phython, Lua script වගේ languages ගොඩකින් program කරන්න පුලුවන්. ඉතින් ඒ නිසා අපි කාටත් ලේසි වෙන්න මම තොරගන්නේ C/C++ language එක, එතකොට අපිට Arduino IDE එක යොදාගෙන ඉතාම පහසුවෙන් program කරන්න පුලුවන්.ඉතින් ඔයා මේ වෙනකොට Arduino වැඩ කරන කෙනෙක් නම් NodeMCU program කියන එක ලොකු දෙයක් නෙමෙයි.

නමුත් මම IoT පඩම තුලදී නම් මම coding වල basic වල ඉදන් කරන්න බලාපොරොත්තු වෙන්නේ නෑ. මොකද Softwarelanthaya අපි මේ වෙන කොටත් Arduino Programming පාඩමක් කරන් යන නිසා. ඒක නිසා ඔයාට ලොකු programming දැනුමක් නැත්නම් මෙතැනින් ගිහින් ඒ පාඩම් ටිකත් බලල එන්න, මොකද Arduino වල ඉගෙන ගන්න ඒවා කිසි වෙනසක් නැතුව NodeMCU වලදීත් භාවිතා කරන්න පුලුවන්.

දැන් අපි පියවරෙන් පියවර බලමු කොහොමද පළමු NodeMCU වැඩසටහන ලියන්නෙ කියලා ..


1st Step

NodeMCU එක program කරන්න අපිට programming IDE එකක් ඕනෙ වෙනවා. අපි මෙතැනදී programming IDE එක විදිහට භාවිත කරන්නේ Arduino IDE එක. hhttps://www.arduino.cc/en/Main/Software කියන site එකට ගිහින් මුලින්ම Arduino IDE එක download කරගෙන install කරග්න්න ඕනේ.

2nd Step

Arduino IDE එක install කරගත්තට පස්සේ අපි NodeMCU වලින් වැඩ කරන්න කලින් අපි මුලින්ම ArduinoIDE එකට NodeMCU board එක install කරගන්න ඕනේ. ඒ කට මුලින්ම arduinoIDE එක open කරගෙන File > Preference වලට යන්න ඕනේ..
ඊට පස්සේ පහල තියෙන විදිහෙ window එකක් එනවා. එතන Additional boards manager URL කියන තැන ඉස්සහින් http://arduino.esp8266.com/stable/package_esp8266com_index.json කියන text එක paste කරලා OK කරන්න.


මෙතන ඉදලා කරන්න ඕනෙ වැඩ ටිකට internet ඕනේ, දැන් එහෙන්ම් internet connect කරාට පස්සේ Tools > Boards > Boards manager යන්න.



ඊට පස්සේ open වෙන Boards Manager window එකෙන්  esp8266 කියන එක තෝරලා install කියන button එක ඔබන්න.


මේ විදිහට board එක install උනාට පස්සේ Tools > Boards වලදී NodeMCU board එක install වෙලා තියෙනවා බලාගන්න පුලුවන්.


Hello World !

අපි දැන් හදන්නේ NodeMCU වල අපේ මුල්ම program එක ලියන්නයි. මුලින්ම NodeMCU board එක USB cable එකකින් computer එකට සම්බන්ධ කරගෙන Tools>boards > NodeMCU 1.0 select කරන්න ඕනෙ.

ඊට පස්සේ Tools > Port වලට ගිහින NodeMCU board එක හයි කරලා තියෙන port එක තෝරන්න ඕන්නේ. Port කිහිපයක් තියෙනවානම් හරි එක තෝරගන්න My Computer icon උඩ Right click කරල එන menu එකෙන් manage තෝරන්න. ඊළගට open වෙන්නේ Computer management window එක. 

ඒ Window එකේ වම් තීරුවෙ තියෙන System Tool කියන group එක expand කරාට පස්සේ Device manager තෝරන්න. ඊළගට මැද තීරුවේ Port යටතේ ඔයාගෙ com ports ඔක්කොම පෙන්නනවා. එතන USB-Serial කියන නමට ඉස්සරහින් තියෙන්නෙ NodeMCU එක connect කරලා තියෙන COM port එකයි.

ඊට පස්සේ File > New ගිහින් අලුත් code window එකක් අරගෙන පහල තියෙන code එක type කරන්න.

code එක type කරලා ඊලඟට Sketch > Upload වලට ගිහින් program එක upload කරන්න ඕනෙ.

මම මෙත 2 කියන පින් එක use කරන්නෙ NodeMCU board එකේ pin 2 වලට හයි කරපු LED(inverse) එකක් තියෙනවා. මේ code එක upload කලහම LED එක blink වෙනවා බලගන්න පුලුවන්.

මේ code එක ගැන explain එකක් මෙතැනින් බලගන්න පුලුවන්.



එහෙනම්අපි ඊලඟ පාඩමෙන් හම්බවෙමු. ඔයාලගෙ අදහස් දක්වන්නත් අමතක කරන්නත් එපා !

article එක හොදයි නම් යාළුවන්ටත් බලන්න share කරන්න.!

Arduino පාඩම 15 - I2C ප්‍රොටොකෝලය

10:38 PM 4 Comments

මේ ලිපියෙන් මම බලාපොරොත්තු වෙන්නේ I2C protocol එක ගැන කතා කරන්නයි. Arduino කරන ගොඩක් අය දැන හෝ නොදැන මේ Protocol එක use කරනවා ඇති මේවෙනකොටත්. මේ ලිපිය  මම protocol  එකක් ගැන කතාකරන පලවෙනි අවස්ථාව නිසා අපි මුලින්ම බලමු මොකක්ද මේ protocol කියන්නේ කියලා.

මොකක්ද  protocol කියන්නේ ?

 protocol කියන්නෙ නීති පද්ධතියකට. උදාහරණකින් පැහැදිලි කලොත් මෙහෙමයි. A හා B කියලා ඒ දෙක අතර communicate කරන device 2ක් තියෙනවා, ඒ වගේම මේ දෙක අතර data transfer වෙන්නේ x කියන  protocol එකෙන් කියලා හිතමු.

මේ x කියන  protocol එකෙන් වෙන්නේ මෙහෙම දෙයක්, අපි හැමෝම දන්නවා machine වලට තේරුම් ගන්න පුලුවන් 1  හා 0 කියන අවස්ථා විතරයි. ඒ කියන්නේ අපිට මේ device දෙක අතර communication එකේදී දාන සෙල්ලම් ඔක්කොම දාන්න වෙන්නෙ මේ 1  හා 0 වෙන් විතරයි. ඉතින් මේ 1  හා 0 තමන්ට කැමති විදිහට භාවිතා කරන්න පුලුවන්නේ ඉතින් මේ නිසා ඇතිවෙන අපහසුතා මගහරවා ගන්න අපිට protocol භාවිතා කරන්න පුලුවන්.

මෙතනදී අපි protocol එකක් හදනකොට එකේදී මෙ 1 හා 0 තේරුම ගන්නේ කොහොමද කියලා තමයි අර්ථ දක්වෙන්නේ. උදාහරණයක් විදිහට අපි හිතමු A device එකෙන් B device එකට x protocol එක හරහා "begin" කියලා command එකක් එනවා. ඉතින් මේ command එක එන්නේ 10001011 කියන  bit pattern කියලා, මේ bit pattern එක x protocol එකෙන් define කරලා තියෙන්නේ 10001011 කියන්නේ "begin" කියන වචනය කියලා. ඉතින් අර  A device එකෙන් B device එකට 10001011 කියලා pattern එක ආවහම B කියනා device එක දැන ගන්නවා 10001011 කියන්නේ "begin" කියන command එක කියලා, ඉතින් ඒ අනුව B device එක වැඩ කරනවා.

ඕක තමයි protocol කියන්නෙ මොකක්ද කියලා කියන්න පුලුවන් සරලම විදිහ. ඒත් ඇත්තටම මේ protocol වැඩකරන්නෙ මීට වඩා ගොඩක් සංකීර්ණ විදිහකට, ඊට අමතරව මේ protocol වැඩකරන විදිහ protocol එක අනුවත් වෙනස් වෙනවා.

protocol එකක් තෝරා ගැනීම

අපි මොකක් හරි project එකක් කරනකොට වඩා වැදගත් දෙයක් තමයි project එකට ගැලපෙන protocol එකක් තෝරාගන්නඑ එක. මේ වෙන කොට protocol විශාල ප්‍රමාණයක් තියෙනවා.ඒවා අතරින් කිහිපයක් තමයි,
  • UART (Serial protocol)
  • I2C
  • ISP
  • CAN
  • 4-20mA current loop
  • RS485
  • RS422
  • RS232 කියන්නේ.
UART කියන්නෙ අපි arduino වලදී නිතර භාවිත කරන Serial protocol එක.(හැම තිස්සෙම Serial.begin කියලා ගහන කෝඩ් එක), I2C ගැන අද අපි කතා කරමු, ICSP කියන්නෙ micro control අතර, ඒ වගේම Sensor-micro control අතර communication වලට භාවිතා කරන protocol එකක්, RS485,RS232 කියන්නේ ගොඩක්ම industrial වැඩ වලට ගැලෙපෙන device,sensor විශාල ප්‍රමාණයක් එකට සම්බන්ධ කරන්න පුලුවන් protocol  එකක්.

මම පසුගිය ලිපියක UART protocol එක use කරන හැටි ගැන කියලා දීලා තියෙනවා. මෙතනින් ඒ පාඩම බලන්න. අද මම කතා කරන්න යන්නේ I2C protocol එක ගැන.

I2C protocol 

I2C කියන්නෙ inter integrated circuit එකට. මේ protocol එකට power pin 2ක හැරුනහම SCL හා SDA කියලා තව pin 2ක් තියෙනවා. SCL pin එකෙන් කරනේ microcontroller එකේ ඉදලා වෙන microcontroller එකකට හරි sensor එකකට හරි clock signal එක යවන එක. SDA pin එකෙන් කෙරෙන්නේ data යවන එක. සාමාන්‍යයෙන් I2C protocol එකකට I2C device කිහිපයක් එකිනෙකට සම්බන්ධ කරන්න පුලුවන්. ඒ කියන්නේ මේ SCL,SDA pin වලට i2c device කිහිපයක්ම සම්බන්ධ කරන්න පුලුවන්. ඒ වගේම මේ වගේ device කිහිපයක් එකිනෙකට සම්බන්ධ කරහම ප්‍රධාන(Master) device එකට සම්බන්ධ කරලා තියෙන අනිත්(slave) device එකිනෙකින් වෙන් කරලා හදුනා ගන්න ID එකක් තියෙනවා. මේ කට අපි I2C address කියලා හදුන්වනවා. ඒ වගේම තමයි මේ master device එක සෑම විටම වගේ microcontroller එකක් සහිත device එකක් වෙනවා.

සාමාන්‍යයෙන් PCB එකක හදපු I2C device අතර twisted pair හෝ shielded cable යොදාගෙන 100m වගේ දුරකට data transmit කරන්න පුලුවන් කියලා සදහන් වෙනවා. කොහොම උනත් ප්‍රායෝගික තත්වයන් අනුව සත්‍ය දුර 100m වඩා අඩු වෙන්න ඉඩ තියෙනවා.

සාමනයෙන් අපිට මොකක් හරි device එකක් I2C connect කරන්න ඕනෙ උනොත් ප්‍රධාන වශයෙන් ක්‍රම 2ක් තියෙනවා.
  1. microcontroller එකක් භාවිතය
  2. I2C expander ic එකක් භාවිතය.
 ඒවගේම තමයි බොහොමයක් sensor සහ module වල I2C සදහා භාවිත වෙන්නෙ මේ I2C expander ic.

Micro-Controller එකක් භාවිතය

මෙතනදී මම microcontroller එකක් භාවිතය කියලා අදහස් කලේ Master device එක වගේම slave devices සදහාත් microcontroller එකක් භාවිතා කිරීමයි. 
example එකකින්ම මේක පැහැදිලි කරන්නයි සූදානම.

Send Data to Slave from Master


මේවැඩේට arduino board 3ක් ඕනේ වෙනවා. මම මෙතන්දී කරන්න හදන්නේ Arduino master device එකකට හයි කරපු potentiometer 2කින් arduino salve device 2කට වෙන වෙනම හයි කරපු LED 2ක brightness control කරන එක. 

Arduino mega/uno/nano/pro mini  වගෙ board වල A4 pin එක SDA විදිහටත් A5 pin එක SCL pin එකත් වෙනවා.

circuit diagram එක මෙහෙම හදා ගන්න. potentiometer විදිහට 10k වගේ එකක් දාන්න. ඒ වගේම arduino board වලට වෙන වෙනම power supply කරනවා නම් arduino boards සියල්ලෙහිම GND පින් එකට connect කරන්න


මීලගට පහත් දැක්වෙන codes වෙන වෙනම අදාල arduino boards වෙත upload කරන්න.


Code explain

මම මෙතනදී කරන්න හදන්නේ master device එකට හයි කරපු potentiometer දෙකෙන් වෙන වෙනම slave device 2 කට හයි කරපු LED දෙකේ brightness control කරන එකයි.

Master code - Send Data to Slave from Master

උඩම පේලියෙන් කරලා තියෙන්නෙ wire කියන library එක import කරගන්න එකයි. මේ library එකේ තමයි I2C වලට අදාල data ටික.

ඊළඟ පේලි දේකේ තියෙන්නේ A0, A1 කියන arduino analog pin දෙක define කරලා තියෙනවා. මේ පින් දෙකට තමයි potentiometer දෙක හයි කරලා තියෙන්නේ.

ඊට පස්සේ address1,address2 කියන define දෙකෙන් තියෙන්නෙ slave device දෙකේ address. 1 කියන්නේ පලවෙනි slave device එකේ address එක 2 ක කියලා තියෙන්නේ දෙවෙනි slave device එකේ addres.


ඊට පස්සේ තියෙන්නේ setup එක, Wire.begin(); කියන line එකෙන් තමයි I2C connection එක start කරන්නේ. ඊට පස්සේ ඉතින් analog pin 2 ක setup කරලා තියෙනවා.

ඊට පස්සේ තියෙන්නෙ loop එක. loop එක ඇතුලේ ලියන ඕනම code එකක් cycle එකක් වගේ power දීලා තියෙනකන් වැඩ කරනවා.

int pot1=analogRead(pot1)/4; කියන line එකෙන් int කියන type එකේ pot1 කියන නමින් variable එකක් හදලා එතනම ඒ variable එකට පලවෙනි potentiometer එකේ data read කරලා 4න් බෙදලා සමාන කරලා තියෙනවා. 4 න් බෙදලා තියෙන්නේ අපිට analog read එකක් 5v වලින් 1024 පන්ගුවක් විදිහට ලැබුනත් අපිට arduino වලදී analog write කරන්න පුලුවන් 5v වලින් 256 න් පංගුවක් විදිහට විතරක් නිසයි.

Wire.beginTransmission(address1);  මේ ලයින් එකෙන් කරන්නේ address1 කියන device එක I2C network එකෙන් හොයාගෙන එයත් එක්ක communication එක ආරම්භ කරන එකයි.

Wire.write(pot1);  මෙතනදී pot1 කියන value එක අදාල device එකට යවනවා. ඊට පස්සේ පේලියෙන් අදාල device එක අතර communication එක නවත්තනවා.

ඊට පස්සේ තියෙන්නෙත් දෙවෙනි  device එකට අදාල මේ code කොටසමයි. අන්තිමේදී 500 ms delay එකක් තියලා තියෙනවා.

Slave Code- Send Data to Slave from Master

Send data to Master from Slave

අපි කලින් කතාකලේ I2C හරහා master device එකේ ඉදලා slave device වලට data යවන්නේ කොහොමද කියන එකයි.
දැන් මම කියන්න හදන්නේ Salve device වල ඉදලා master device එකට data එවන්නේ කොහොමද කියන එකයි.

ඒ කට පහල තියෙන විදිහට circuit එක හදාගන්න, board 3 ම GND පින් එකට සම්බන්ධ කරන්න.



ක්‍රියාවලිය

මම මෙතනදී මුලිනම code explain කරන්න කලින් I2C හරහා slave device එකේ data master device එක read කිරීමේ ක්‍රියාවලිය පැහැදිලි කරන්න හිතුවා. 
මොකද මේ ක්‍රියාවලිය master එකෙන් slave එකට data send ක්‍රියාවලියට වඩා පොඩ්ඩක් වෙනස්.

master එකෙන් slave එකට data send කරනකොට උනේ master අපි දෙන data set එක අපි යවන්න ඕනේ slave device එකේ device address එකේ header එකකුත් එක්ක යවන එක. slave device එක හැමතිස්සෙම master එකෙන් data එනවද කීය කිය බල බල ඉන්නවා. එහෙම master එකෙන් data packet එකක් අවොත් එකේ තියෙන device address එක තමන්ගෙ address එකනම් ඒ packet එක read කරනව එහෙම නැත්නම් නොසලකා හරිනවා.

නමුත් slave එකෙන් එන data master එකෙන් read කරන්නේ පොඩ්ඩක් වෙනස් විදිහකට.

ඇත්තටමමෙතනදී වෙන්නේ slave device එකකින් එන data එකක් read කරගන්න ඕනේ උනහම කරන්නේ අදාලා slave device එකට request එකක් ගහන එක එහෙම්ත් නැත්නම් master device එකෙන් slave device එකකට ඉල්ලීමක් කරන්වා data එවන්න කියලා. 
මෙහෙම request එකක් ගැහුවට පස්සේ අදාල slave device එකෙන් data එවනවා, ඊටපස්සේ තමයි master එකෙන් slave device එකේ data read කරන්නේ.

Code Explain

මම මෙතන කරන්න හදන්නේ salve device 2කට වෙන වෙනම හයි කරපු pot 2 ක values master device එකට එවලා. master device එකේ serial monitor එක හරහා බලන එකයි.

Master code - Send Data to Master from Slave

මෙතනදීත් මම මුලින්ම Wire library එක import කරගෙන තියෙනව. ඊට පස්සේ මම කලින් වගේම Wire.begin(); එකෙන් I2C communication එක initialize කරගෙන තියෙනවා, ඊට පස්සේ Serial.begin(9600); කියන code එකෙන්  line එකෙන් serial communication එක 9600 ක baudRate එකක් සහිතව initialize කරගෙන තියෙනවා.

ඊටපස්සේ තියෙන්නේ loop එක. loop එක ඇතුලෙ තියෙන 
Wire.requestFrom(1, 4); 
    while (Wire.available()) {
    char c = Wire.read();
    Serial.print(c);        
}

code කොටස තමයි slave එකෙන් එන data read කරන්නේ.

Wire.requestFrom(1, 4);  මේ code එකෙන් තමයි slave device එකට request එක ගහන්නේ. වරහන් ඇතුලේ තියෙන 1 කියන ඉලක්කමෙන් කියවෙන්නේ slave device එකේ address එක. 4 කියන ඉලක්කමෙන් කියවෙනේ slave device එක එවන byte ගනන. මේ අගය slave device එක එවන data ප්‍රමාණය අනුව වෙනස් වෙනා .

video coming soon......

ඊලඟ කොටසින් I2C ගැන තව කතා කරමු.  article එක හොදයි නම් අනිත් අයටත් බලන්න share කරන්න. comment එකකුත් දාගෙන යන්න.



Arduino පාඩම 14 - පින් 3 කින් පින් 8 ක වැඩ.

8:56 PM 3 Comments

ගොඩ කාලෙකට පස්සේ තමයි arduino ගැන post එකක් ලියන්න පුලුවන් උනේ. මේ පාර පාඩමෙන් මම කතා කරන්න යන්නේ decoders ගැන.

Decoders කියන්නේ මොකක්ද ?

decoders කියන්නේ අපි ලබාදෙන bit කියපයක් තවත් bit කිහිපයකට වෙන් කරලා output එකක් ලබාදෙන්න පුලුවන් දෙයකට. උදාහරණයක් විදිහට කිව්වොත් අපිට arduino එකේ pin 3 භාවිතා කරලා වෙන වෙනම LED 8 ක් control කරන්න බැහැ. නමුත් decoder එකක් use කලොත් අපිට decoder එකට arduino එකේ pin 3 කින් input ලබාදීලා decoder එකෙන් pin 8 කින් output ගන්න පුලුවන්. තවත් විදියකට කිව්වොත් arduino එකේ pin 3 ක් විතරක් use කරලා වෙන වෙනම LED 8 ක් කොන්ට්‍රොල් කරන්න පුලුවන්.

මන් කලින් විස්තර කලේ pin 3 කින් input දීලා pin 8 කින් output ගන්න පුලුවන් decoder එකක් ගැන. මේ වගේ decoder වලට 3 bit to 8 bit decoder කියලා කියනවා. මේ වගේ තවත් decoders වර්ග තියෙනවා.

2 bit to 4 bit decoder       - input 2 කින් output 4 ක්
4 bit to 16 bit decoder     - input 4 කින් output 16 ක්
5 bit to 32 bit decoder     - input 5 කින් output 32 ක්

Decoders වැඩ කරන්නේ කොහොමද ?

decoders වර්ග කිහිපයක්ම තිබුනත් මේවා හැම එකක්ම වගේ වැඩ කරන්නේ පොදු ආකෘතියකට. මේ ආකෘතිය තේරුම් ගත්තහම ඕනේම decoder එකකින් වැඩ කරන්න පුලුවන්. 
මන් මෙතන කියලා දෙන්නේ 74HC237 කියන 3 bit to 8 bit decoder එක use කරන්නේ කොහොමද කියලා.74HC238 IC එකත් කිසිම වෙනසක් නැතුව use කරන්න පුලුවන්.  IC එක රු. 60-80 ත් අතර ගානකට ලංකාවේ මිලදී ගන්න තියෙනවා.

මේ decoder තවත් විශේෂත්වයක් තියෙනවා. ඒ මේ pin 8 න් අපි HIGH කරන පින් එක ඇරුනහම අනිත් pin ඔක්කොම LOW වෙනවා. ඒ කියන්නෙ අපිට වෙලාවකට output ගන්න පුලුවන් එක පින් එකකින් විතරයි.

  • සාමාන්‍ය විදිහට මේ IC එකට GND, VCC pin වලට power එක දෙන්න ඕනේ. 
  • Y0-Y7 වෙනකන් තියෙන්නේ Output pin 8
  • A0-A2 වෙනකන් තියෙන්නේ Inout pin 3
  • E1, E2, E3 කියන්නේ enable pin (සාමාන්‍යයෙන් E1, E2 ground කරලා E3 vcc connect කරනාවා)






සාමාන්‍යයෙන් decoder වැඩ වලදී මේ 4,5 පින් ground කරලා 6 pin එක 5v වලට connect කරනව. උඩ වගුවේ තියෙන්නේ input pin වල voltage level, HIGH සහ LOW කරහම output pin වල voltage වෙනස් වෙන විදිහ.

Arduino සමග decoder

මම මෙතනදී කරන්න යන්නේ push button එකක් ඔබන වාරයක් ගානේ LED එක එක on කරන්න යන්නේ. මේවගේ වැඩක් කරන්න LED 8 කට arduino ouputs 8 ක් ඕනෙ උනත් මම decoder එකක් භාවිතා කරලා arduino ouputs 3 කින් මේක කරලා තියෙන්නේ.

Components

Arduino              x1
74HC238 IC       x1
LED                   x8
680Ohm Resi.    x2
Push button        x1

Diagram


Arduino Sketch


Code explain 

setup එකේදී සාමාන්‍ය විදිහට 4,5,6 pin output විදිහටත්, push button එකට හයි කරපු 11 pin එක input විදිහටත් setup කරගෙන තියෙනවා.

ඊට පස්සේ මම LEDon කියලා function එකක හදාගෙන තියෙනවා. මේක තමයි මෙතන තියෙන වැදගත්ම code කොටස. LEDon කියන function එක call කරන තැන d1,d2,d3 කියන parameters වලට ලබාදෙන අගයන් අනුව 4,5,6 කියන pin වල status වෙනස් වෙනවා. ඒ කියන්නේ pin HIGH ද ? LOW ද ? කියලා තීරණය වෙන්නේ d1,d2,d3 කියන parameters වලට ලබාදෙන අගයන් අනුව.

උදාහරණයක් විදිහට  LEDon(0,0,0); විදිහට function එක call කලා කියලා හිතමු. එතකොට වෙන්නේ 4,5,6 කියන pin 3 ම low වෙන එක. එතකොට comment එකේ තියෙනවා වගේ පළවෙනි LED එක විතරක් on වෙලා අනිත් LED 7 ම off වෙනවා.
LEDon(0,0,1); විදිහට function එක call කලා කියලා හිතමු. එතකොට වෙන්නේ 4,5 කියන pin 2 low වෙලා 6 pin එක high වෙන එක. එතකොට දෙවෙනි LED එක විතරක් on වෙලා අනිත් LED 7 ම off වෙනවා.

මේක හරියට වැඩ කරන්නේ truth table එකක් වගේ. මේ විදිහටම තමයි ඕනම decoder එකක් වැඩ කරන්නෙ.

ඊට පස්සේ loop එකේදී මුලින්ම බලනවා ll පින් එක high වෙලාද කියලා. 11 pin එක high වෙලා නම් counter කියන variable එකේ අගය 8 ට අසමානද කියලා බලනවා. අසමාන නම් counter කියන variable එකේ දැන් තියෙන අගයට තව එකක් එකතු වෙනවා. variable එකේ අගය 8 ට අසමාන නැත්නම් ඒ කියන්නේ අගය 8 නම්, variable එකේ අගය 1 කරනවා.

ඊට පස්සේ case statement එකක් දාලා counter එකේ තියෙන අගය අනුව අදාල LED එක on කරනවා. article එක හොදයි නම් අනිත් අයටත් බලන්න share කරන්න.

demo





Arduino පාඩම 5 - If සහ case යොදාගෙන කොන්දේසි පරික්ෂා කිරීම.

5:59 PM 24 Comments


Arduino එකත් එක්ක වැඩ කරන ඕනෑම කෙනෙක් අනිවාර්යයෙන් දැනගෙන තියෙන්න ඕනෙ දෙයක් තමයි If සහ case කියන්නේ. මේ දෙකෙන්ම කරන්නේ කොන්දේසි පරීක්ෂා කරන එක තමයි. උදාහරණයක් විදිහට අපි හිතමු Arduino එකට පිටින් හයි කරලා තියෙන බට්න් එකක් එබුවොත් LED එකක් පත්තු වෙන්න ඕනෙ බට්න් එක අතහැරියොත් LED එක නිමෙන්න ඕනේ. මේ වගේ අවස්ථාවලට පාවිච්චි කරන්නේ if හරි case හරි තමයි. If සහ case යන දෙකම කොන්දේසි පරීක්ෂා කරන්න භාවිත කලත් මේ දෙක ටිකක් වෙනස්.

කලින් පාඩම් ටික බැලුවෙ නැත්නම් මෙතනින් ගිහින් බලන්න

if වැඩිපුරම භාවිතා වෙන්නේ එකිනෙකට වෙනස් කොන්දේසි කිහිපයක් පරීක්ෂා කරල ඒ අනුව මොනව හරි කරන්න. උදාහරණයක් විදිහට Arduino එකට පිටින් හයි කරලා තියෙන බට්න් එකක් එබුවොත් එකදෙයක් වෙන්න, LDR එකට එලිය වැටුනොත් තවදෙයක් වෙන්න, serial data වලින් මොකක් හරි අගයක් ලැබුනොත් මොකක් හරි වෙන්න වගේ එකිනෙකට කිසිම සම්බන්ධයක් නැති කොන්දේසි කිහිපයක් පරීක්ෂා කරලා ඒ අනුව තීරණයක් ගන්න If යොදගන්න පුළුවන් ඒ වගේම තනි කොන්දේසියක් පරීක්ෂා කරල බලන්නත් හොදම විදිහ තමයි If භාවිතා කරන එක.

case එක වැඩිපුරම භාවිත වෙන්නේ එකිනෙකට සම්බන්ධයක් තියෙන කොන්දේසි පරීක්ෂා කරල බලලා තීරණයක් ගන්න ඕනෙ උනාම. උදාහරණයක් විදිහට කිව්වොත් serial data වලින් 1, 5, 4, 9, 20, 52 වගෙ අගයන් ටික විතරක් ආවොත් විතරක් ඒ ඒ අගයන් වලට අදාළ මොනවා හරි ක්‍රියාවලි කිහිපයක් වෙන්න ඕනෙයි කියල හිතන්නෙකො, ඒ වගේ වෙලවට case එක වැදගත් වෙනවා, මේකට If භාවිතා කරන්න පුලුවන් උනත් ඒක ටිකක් කරදර කාර වැඩක් ඒ වගේම If එකට වඩා වේගයෙන් case එක ක්‍රියාත්මක වෙන එකත් වාසියක්.

නමුත් බොහොමයක් වෙලාවට if එක වෙනුවට case එකත් case එක වෙනුවට if එකත් භාවිත කරන්න පුළුවන්. If සහ case ගැන ඉගෙන්ගන්න කලින් Arduino වලදී භාවිතා වන logical opraters ගැන ඉගෙන ගන්න ඕනෙ.

Arduino logical Operators වර්ග.

Arduino වලදී භාවිතා වන logical Operatorsපහත පරිදිවේ.

Comparison Operators
== (equal to) - සමානයි.
!= (not equal to) - අසමානයි.
< (less than) - අඩුයි.
> (greater than) - වැඩියි.
<= (less than or equal to) - සමානයි හෝ අඩුයි.
>= (greater than or equal to) - සමානයි හෝ වැඩියි.

Boolean Operators

&& (and)
|| (or)
! (not)

if ගැන කතා කරනකොට ඒකේ ආකාර 2 ක් තියෙනවා. if සහ if-else තමයි ඒ  ආකාර 2 ක. මුලින්ම අපි if ගැන කතා කරමු.

If ආකාරය.

පහලින් දැක්වෙන්නේ if වල තියෙන පොදු  ආකෘතිය.

if(කොන්දේසිය){
      කොන්දේසිය සත්‍ය නම් සිදු විය යුතු කාර්යය
 }

මේ ගැන හරියට තේරුම් ගන්න අපි පොඩි circuit එකක් හදමු. මම මෙතන්දී කරන්න යන්නේ Arduino වලට Serial input වලින් On කියලා command එකක් අවහම Arduino එකට හයි කරලා තියෙන් LED එකක් ON වෙන්නයි. ඒ කට පහල තියෙන විදිහය circuit එක හදාගෙන පහල තියෙන code එක upload කරන්න.

void setup() {
pinMode(9,OUTPUT); // Set pin 9 as output pin
Serial.begin(9600); // Start serial communication
}
void loop() {
  if(Serial.readString()=="ON"){  // Check condition
    digitalWrite(9,HIGH);  // On led
  }
}

2 සහ 3 වෙනි පේලි වලින් කරලා තියෙන්නේ 9 වෙනි pin එක output pin එකක් කිරීම සහ serial communication එක start කිරීමයි. loop එක ඇතුලෙ තියෙන 6 වෙනි පේලියෙන් කරලා තියෙන්නේ Serial communication වලින් ලැබෙන data එක වචනයක් විදිහට කියවලා ඒ වචනය ON ද කියලා check කරන එකයි. අපි මෙතනදී සැසදමක් අරන නිසා තනි සමාන ලකුණ වෙනුවට සමාන ලකුණු 2ක් පාවිච්චි කරන්න ඕනෙ. 7 වෙනි පේලියෙන් කරලා තියෙන්නේ උඩින් තියෙන කොන්දේසිය සත්‍ය නම් 9 පින් එකේ voltage එක high කිරීමයි.

මෙතනදී Serial.readString() කියන function එක භාවිතා කරලා තියෙන නිසා අපි serial monitor එකට ඉන්පුට් කරපු වචනය හරි, අගයහරි ඒ විදිහටම කියව ගන්න පුලුවන.

කෝඩ් එක upload කරලා Serial monitor එක open කරන ඒකේ ON කියලා type කරලා send කරන්න එතකොට LED එක ඔන් වෙයි. ඒ වගේම මොන දේ Type කරලා send කලත් LED එක off කරගන්න බැරිවෙයි.

if-else ආකාරය.

පහලින් දැක්වෙන්නේ if-else වල තියෙන පොදු  ආකෘතිය.

if(කොන්දේසිය){
කොන්දේසිය සත්‍ය නම් සිදු විය යුතු කාර්යය
  } else {
කොන්දේසිය අසත්‍ය නම් සිදු විය යුතු කාර්යය
}


මේ ක්‍රමයත් තේරුම් ගන්න තියෙන හොදම විදිහ තමයි පොඩි ප්‍රෝග්‍රෑම් එකක් ලියන එක. ඒකටත් කලින් circuit එකම හදාගන්න, මෙතනදී මම කරන්න හදන්නේ ON කියලා type කලොත් LED එක ON වෙන්න, වෙන මොකක් හරි type කලොත් LED එක Off වෙන්න. ඒ කට පහල code එක ලියලා upload කරන්න.

void setup() {
pinMode(9,OUTPUT); // Set pin 9 as output pin
Serial.begin(9600); // Start serial communication
}
void loop() {
  if(Serial.available()>0){
    if(Serial.readString()=="ON"){
    digitalWrite(9,HIGH);
  }else{
    digitalWrite(9,LOW);
  }
  }
  }
1 සහ 2 පේලි වලින් වෙන්නේ කලින් කියපු දේමයි. 6 වෙනි පේලියෙන් කරන්නේ serial වල තියෙන data එක 0 වඩා විශාලද කියලා බලන එකයි. 0 ට වඩා විශාල නම් ඊළඟ කොන්දේසිය check කරන්වා. 7 වෙනි පේලියෙන් කරන්නේ ඒක. එතනදී කරල  තියෙන්නේ Serial communication වලින් ලැබෙන data එක වචනයක් විදිහට කියවලා ඒ වචනය ON ද කියලා check කරන එකයි. data එක ON නම් LED එක on වෙනවා, data එක ON නෙමෙයි නම් LED එක off වෙනවා. දැන් කෝඩ් එක upload කරලා Serial monitor එක open කරලා check කරලා බලන්න.

මෙතන්දී මම මුලින්ම if condition එක දාලා serial වල තියෙන data එක 0 වඩා විශාලද කියලා බැලුවෙ Arduino එකට අපි data එකක් send  නොකර තියෙන කොට තත්පරයකට vවතාවක් විතර auto ම 0 කියලා ලැබෙනවා, ON කියන වචනය නොවන data ගොඩට 0 ත් අයිති වෙන නිසා ප්‍රෝග්‍රෑම් එක අවුල් නොයන්නයි if condition එක දාලා serial වල තියෙන data එක 0 වඩා විශාලද කියලා බැලුවෙ.

Case ආකාරය.

පහලින් දැක්වෙන්නේ case හි පොදු ආකෘතියයි.

switch (int වර්ගයේ විචල්‍යක් ) {
      case විච්ල්‍යයේ_යම්_අගයක්  :
ඉහත අගය සත්‍ය නම් වියයුතු කාර්යය.
        break;
      case විච්ල්‍යයේ_යම්_අගයක්  :
ඉහත අගය සත්‍ය නම් වියයුතු කාර්යය.
        break;
      case විච්ල්‍යයේ_යම්_අගයක්  :
ඉහත අගය සත්‍ය නම් වියයුතු කාර්යය.
        break;
      default:
        විච්ල්‍යයේ අගය ඉහත එකක් වත් නොවේ නම් සිදුවිය යුතු කාර්යය.
    }

(විචල්‍යයේ අගය ඉහත එකක් වත් නොවේ නම් සිදුවියයුතු කාර්යයන් කිසිවක් නැත්නම් උඩදී නිල් පාටින් තියෙන කෝඩ් කොටස ලියන්න අවශ්‍ය නෑ, ඒ වගේම ඉහත විදිහට කැමති කොන්දේසි ගානක් එකතු කරගන්නත් පුළුවන්.)

case එක වැඩ කරන විදිහ තේරුම් ගන්න පොඩි circuit එකක් හදමු, ඒ කට පහල රූපයේ තියෙන විදිහට ciruit එක හදගන්නේ පස්සේ පහල තියෙන කෝඩ් එක upload කරන්න.

void setup() {
 Serial.begin(9600);
 pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop() {
 if(Serial.available()>0){
 int intByte=Serial.read();
  switch(intByte){
  case 'a':
  digitalWrite(9,HIGH);
  break;
  case 'b':
  digitalWrite(10,HIGH);
  break;
  case 'c':
  digitalWrite(11,HIGH);
  break;
  default:
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
    digitalWrite(11,LOW);
  }

මම මෙතනදී 8 පේලියෙන් කරලා තියෙන්නේ  serial communication හරහා data එකක් එනවද කියලා බලන එක. data එකක් එනවනම් ප්‍රෝග්‍රෑම් එක ඊළඟ පියවරට යනවා.

9 වෙනි පේලියෙදී කරලා තියෙන්නේ intByte කියලා integer(Int) වර්ගයේ variable එකක් define කරලා  serial communication හරහා එන data එක read කරලා intByte වලට යොමු කරපු එක.

10 වෙනි පේලියෙදි මම විචල්‍ය විදිහට යොදගත්තේ intByte කියන වේරියබල් එක තමයි.

11 පේලියේදී බලනවා intByte වලට ආපු data එක a ද කියලා, a කියන්නේ අකුරක් උනත් "a" නැතුව 'a' විදිහට ලියලා තියෙන්නේ  Serial.read(); කියන function එක හරහා intByte වලට ලැබෙන්නේ a අක්ෂරයේ ASCII අගය නිසා ඒකට ගැලපෙන්නේ a හි ASCII අගය නිසා a හි ASCII අගය ලබා ගැනීමට "a" නැතුව 'a' විදිහට ලියනවා.

තේරුනේ නැත්නම් මෙහෙම හිතන්නකෝ ඔයා Serial monitor එක open කරලා a කියන අකුර type කරලා send කරනවා ඔයා Serial.read(); කියන function එක භාවිතා කරලා ඒ අකුර read කරන්න ගියොත් ඔයාට ලැබෙන්නේ a අකුර වෙනුවට a අකුරට අදාල ASCII අගයයි.

ASCII කියන්නේ HEX, Decimal වගේ සංඛ්‍යා පද්ධතියක් මේ පද්ධතියේ අපි භාවිතා කරන හැම සංකේතයකටම ASCII අගයක් තියෙනවා, පහලින් තියෙන වගුවේ තියෙනේ ඒ අගයන් වලින් කිහිපයක්.
ඒ ත් තවම තේරුනේ නැත්නම් උඩලියපු කෝඩ් එකේ 'a' වෙනුවට 97, 'b' වෙනුවට 98, 'c' වෙනුවට 99 ත් දාලා බලන්නකෝ ඒත් කෝඩ් එක වැඩකරනවා.


අපි දැන් ආයේ කෝඩ් එකට යමු, මේ විදිහට 19 වෙනි පේලියට වෙනකන් කරලා තියෙන්නේ serial communication වලින් ලැබෙන්නේ a ද,  b ද,  c ද කියලා චෙක් කරලා ඒ ඒ අකුරට අදාල LED එක පත්තු කරන එක.

20 පේලියේදී   default: කියන කෝඩ් එකට පහලි ලියලා තියෙන කෝඩ් එකෙන් කරන්නේ serial communication වලින් a, b, c නැතුව වෙනත් අකුරක් හරි ඉලක්කමක් හරි ලැබුනොත් LED ඔක්කොම OFF කරන එක.
දැන ප්‍රෝග්‍රෑම් එක run කරලා බලන්න.

article එකේ අඩුපාඩු හරි අදහස් හරි තියෙනවනම් කමෙන්ට් කරගෙන යන්න.



Arduino පාඩම 4 - Variable භාවිතා කරන හැටි.

2:40 PM 5 Comments

මෙවර Arduino ලිපියෙන් මම ඉදිරිපත් කරන්නේ Arduino වලදී Variable භාවිතා කරන ආකාරය හා variable යොදාගෙන pin declaration කරන ආකාරයයි. Arduino වලින් දක්ෂ විදිහට ප්‍රොග්‍රෑම් කරන්න ආස ඕනෑම කෙනෙක් අනිවාර්යයෙන් ඉගෙන ගන්න ඕන දෙයක් තමයි Variable කියන්නේ. Variable යොදාගෙන වැඩසටහන් පහසුවෙන් ලියා ගන්න පුළුවන් ඒ වගේම අනවශ්‍ය විදිහට Variable යොදාගත්තොත් එය වැඩසටහන මන්දගාමී වීමට බලපාන්න පුලුවන්. ඒ නිසා ප්‍රොග්‍රෑම් කරන ඕනෑම කෙනෙක් Variable ගැන ඉගෙන ගන්නම ඕනේ. මේ ගැන ඉගෙන ගන්න කලින් අපි Variable එකක් කියන්නේ මොකක්ද කියලා හදුනාගනිමු.

පසුගිය පාඩම් සියල්ල  මෙතනින් බලන්න.

Variable එකක්  කියන්නේ මොකක්ද ?

අපි Arduino වලදී Variable ගැන කතාකලත් Variable කියන්නේ ඉලෙක්ට්‍රොනික් වලට සම්බන්ධ දෙයක් නෙමෙයි. නමුත් ඒක Arduino වලට සම්බන්ධ වෙන්නේ කෝඩ් ලිවීමේදී යි. සරලවම Variable කියන්නේ මොකක්ද කියලා කිව්වොත් Arduino ප්‍රෝග්‍රෑම් එකක් ධාවනය වන විට Arduino තුල තියෙන RAM එකෙන් කොටසක් ඒ සඳහා යොදා ගන්නවා. Variable එකක් කියන්නේ ප්‍රෝග්‍රෑම් එකට පිටින් ගිහින් Arduino තුල තියෙන RAM එක තුල තාවකාලිකව දත්ත තැන්පත් කරන ක්‍රමවේදයක්. Variable සෑම පරිගණක භාෂාවකම භාවිතා උනත් භාෂාවෙන් භාෂාවට ඒවා නම් කරන හැටි තරමක් වෙනස්. Arduino තුලදී භාවිතා වෙන්නේ C++ භාෂාව නිසා මේ ලිපියෙන් මම ඉදිරිපත් කරන්නේ C++ භාෂාවේ තියෙන Arduino වලට අදාල Variable පමණයි.


Variable වර්ග.

Variable තුලදී යොදාගත හැකි අගය පරාසය, දත්ත වර්ගය, අනුලක්ෂණ හෙවත් characters ප්‍රමාණය හා RAM එකෙන් අත් කරගන්නා ඉඩ ප්‍රමාණය අනුව Variable වර්ග කිහිපයක් තියෙනවා. පහල රූපයේ දැක්වෙන්නේ Variable පිළිබඳ විස්තරයි.



Variable භාවිතයේදී සැලකිලිමත් විය යුතු කරුනු.

  • Variable තුල ගබඩා කිරීමට බලාපොරොත්තුවෙන දත්ත වර්ගය හා ප්‍රමාණය අනුව Data type  එක තෝරා ගත යුතුය.
  • සෑම විටම RAM එක අඩුවෙන් භාවිතා වන Data type එකක් තෝරාගත යුතුයි. එවිට ප්‍රෝග්‍රෑම් එක සුමටව ධාවනය කල හැක.
  • සෑමවිටම අඩු Variable ගණනකින් ප්‍රෝග්‍රෑම් එක ලිවීමට වගබලා ගත යුතුය.
  • එකම ප්‍රොජෙක්ට් එකතුල එකම නමින් වේරියබල් දෙකක් සැකසිය නොහැක.
  • වේරියබල් එකෙහි නම ආරම්භ කළ යුත්තේ අකුරකිනි, අවශ්‍ය නම නෙමේ මැද කොටස සදහා ඉලක්කම් භාවිතා කලහැක.
  • වේරියබල් එකක වචන දෙකක් අතර හිස් ඉඩක් නොතැබිය යුතුය. එසේ අවශ්‍ය නම් ඒවෙනුවට අන්ඩර්ස්කෝ ලකුණ ( _ ) භාවිතා කලහැක.
  • වේරියබල් එක සදහා නමක් ලබා දීමේදී %, &, !, #, $ යන සලකුණු භාවිතා කළ නොහැක.
  •  වේරියබල් එකක නමක් සදහා භාවිතා කලහැකි උපරිම අකුරු ගණන 255 කි.
  •  ගණිත කර්ම සදහා boolean, String, array වැනි data types භාවිතා කල නොහැක.
  • දශමස්ථාන සහිත අගයන් භාවිතා කරන විට ඒ සඳහා float, double වැනි data types භාවිතා කල යුතුය.



Variable නම් කිරීම.

ඕනෑම Variable එකක් නම් කීරීමේ පොදු  අකෘතිය පහත පරිදි වේ.

[ඩේටා ටයිප් එක] [Variable එකෙහි නම];

උදාහරණ :

int Age;
boolean pass;
String MyName;
double resault;

Variable තුලට Data input කිරීම.

ඕනෑම Variable එකක් තුලට අවස්ථා දෙකකදී Data input කිරීම සිදුකල හැක. එනම් Variable එක සාදන අවස්ථාවේදී හා වෙනත් අවස්ථාවකදී. මේ සඳහා උදාහරණ ලෙස ඉහත සැකසූ Variable තුලට දත්ත  ඇතුලත් කරන ආකාරය බලමු.

සාදන අවස්ථාවේදී-----

int Age = 27;
boolean pass = true;
String MyName = "Arduino";
double resault = 85.78;

වෙනත් අවස්ථාවකදී------


Age = 27;
pass = true;
MyName = "Arduino";
resault = 85.78;

Data Read කිරීම.

මේ සදහා ඉහත සාදාගත් MyName නම් Variable එකතුල ඇති දත්තය Serial monitor එකතුල ප්‍රින්ට් කරන ආකරයේ වැඩසටහනක් සාදමු.
String MyName;

void setup() {
Serial.begin(9600);
MyName = "Arduino";
}

void loop() {
Serial.println(MyName);
}
මෙහිදී Arduino යන්න ප්‍රින්ට් කිරීමට MyName නම් Variable එක yodhaagena යොදාගෙන ඇත.

Arduino pin declaration (පින් නම් කිරීම).

Arduino තුලදී pin declaration කිරීම ප්‍රධාන වශයෙන් ක්‍රම 3 ක් තියෙනවා, එනම් Direct declaration, Variable declaration හා #define tag වශයෙනුයි.

Direct declaration

මෙහිදී කෙලින්ම පින් එකෙහි අංකය යොදා ගෙන නම් කිරිම සිදුකරයි. අනෙක් ආකාර දෙකට සාපේක්ෂව මෙහි ඇති අවාසිය වන්නේ වැඩි වාරගණනක් එකම පින් අංකය විවිධ තැන් වල යෙදී  ඇති විට යම් හෙයකින් පින් අංකයේ වෙනසක් සිදු කිරීමට අවශ්‍ය වුවහොත් එම සෑම තැනක්ම එකින් එක වෙනස්  කල යුතු වීමයි.
උදාහරණයක් ලෙස LED blink ප්‍රෝග්‍රෑම් එකක් සලකමු.
void setup() {.
  pinMode(13, OUTPUT);
}
void loop() {
  digitalWrite(13, HIGH);  
  delay(1000);              
  digitalWrite(13, LOW);    
  delay(1000);              
}
මෙහි 13 වෙනි පින් එක වෙනුවට 12 පින් එක භාවිතා කල යුතුයැයි සිතන්න. එවිට 13 ලෙස යෙදී ඇති සෑම තැනක්ම 12 ලෙස වෙන් වෙන්ව ලිවිය  යුතුය. මෙය කරදර කාරී වැඩකි.

#define tag

මෙහිදී සිදුකරනුයේ පින් අංකය වෙනුවට වෙනත් නමක් යොදාගෙන එම නම පින් අංකය යෙදිය යුතු ස්ථානවලට ආදේශ කිරීමයි. නමුත් මෙහි  ඇති අවාසිය වන්නේ define  tag එක යොදන අවස්ථාවේදී පින් අංකය හදුන්වා දිය යුතූ අතර වෙනත් ස්ථානයකදී පින් අංකය වෙනස් කල නොහැකි වීමයි.
මේ සඳහා ඉහත උදාහරණයම සලකමු

#define ledpin 13
void setup() {
  pinMode(ledpin, OUTPUT);
}
void loop() {
  digitalWrite(ledpin, HIGH);  
  delay(1000);              
  digitalWrite(ledpin, LOW);    
  delay(1000);              
}
මෙහි 13 වෙනි පින් එක වෙනුවට 12 පින් එක භාවිතා කල යුතුයැයි සිතන්න. එවිට කලයුත්තේ  #define ledpin 13 වෙනුවට #define ledpin 12 ලෙස ලිවීමයි.

Variable declaration

මෙහිදීද  සිදුකරනුයේ පින් අංකය වෙනුවට වෙනත් නමක් යොදාගෙන එම නම පින් අංකය යෙදිය යුතු ස්ථානවලට ආදේශ කිරීමයි. නමුත් මෙහිදී #define tag හි මෙන් නොව Variable එක  declaration කරන අවස්ථාවේදී මෙන්ම වෙනත් අවස්ථාවකදීද පින් අංකය වෙනස් කිරීමට හැකි වීමයි.
මේ සඳහාද  ඉහත උදාහරණයම සලකමු

char ledpin;
void setup() {
ledpin=13;
  pinMode(ledpin, OUTPUT);
}
void loop() {
  digitalWrite(ledpin, HIGH);  
  delay(1000);              
  digitalWrite(ledpin, LOW);    
  delay(1000);              
}

මෙහි 13 වෙනි පින් එක වෙනුවට 12 පින් එක භාවිතා කල යුතුයැයි සිතන්න. එවිට කලයුත්තේ  ledpin=13; වෙනුවට ledpin=12; ලෙස ලිවීමයි. මෙයද පහසු ආකාරයකි.
නැවතත් මෙවැනිම ලිපියකින් මුනගැහෙමු.