Arduino Lesson 02 – LED Blink කිරීම.

ඔබට ඔබගේ අදහසකට නව නිර්මාණයක් කිරීමට අවශ්‍ය නම් මෙම පාඩම් මාලාව සහ ඒ සමග ඔබට ලැබෙන උපාංග කට්ටලය ඔබට ගොඩක් වැදගත් වේවි. ඔබ මීට කලින් ආර්ඩුයිනෝ ගැන ආසා ඇතැයි සිතමි. අසා නැතිනම් ඒ ගැන කරදර වෙන්න අවශ්‍ය නැති අතර මෙය භාවිතයෙන් ඔයාට නිර්මාණාත්මක ආර්ඩුයිනෝ ව්‍යාපෘති 30 කට අසන්න ප්‍රමාණයක් ලේසියෙන් ඉගනගන්න අවස්ථාව හිමි වන අතර එමගින් ඔබට ආර්ඩුයිනෝ  පිලිබදව හොද අවබෝධයක් ලබා ගත හැකිය.

ආර්ඩුයිනෝ යනු පහසුවෙන් භාවිතා කළ හැකි hardware (දෘඩාංග) සහ software (මෘදුකාංග) මත පදනම් වූ විවෘත මෘදුකාංග (Open Source)  ඉලෙක්ට්‍රොනික් ෆ්ලැට්ෆෝම් එකක්. මෙය භාවිතා කර ඕනෑම කෙනෙකුට නව ව්‍යාපෘති, උපාංග නිර්මාණය කළ හැකියි. ආර්ඩුයිනෝ වලට කැමති බොහෝ පිරිසක් ලෝකයේ සිටි. ඒ වගේම අපේ රටෙත් ගොඩක් දෙනෙක් දැන් ආර්ඩුයිනෝ භාවිතා කරනු ලබන අතර ඔවුන් හැමදාම නව ගුණාත්මක විවෘත කේත (codes) හා පරිපථ (circuit) සකස් කිරීමට දායක වේ. එබැවින් අපගේ නිර්මාණශීලීත්වය සාක්ෂාත් කර ගැනීම සඳහා එම නිදහස් කේත සහ පරිපථ වඩාත් කාර්යක්ෂම විදියට භාවිතා කිරීමට අවස්ථාව හිමිවේ..

සාමාන්‍යයෙන් ආර්ඩුයිනෝ ව්‍යාපෘති කේත (programming code) සහ පරිපථ වලින් සමන්විත වේ. ඔබ කවදාවත් යම් කේත හා පරිපථය සමඟ කටයුතු නොකළේ නම්, ඒ ගැන වද වීමට අවශ්‍යය නැත. මෙම පාඩම් මාලාවෙන් ක්‍රමානුකූලව C ක්‍රමලේකන භාෂාව (programming language) සහ ඉලෙක්ට්‍රොනික් පිළිබඳ මූලික දැනුම හඳුන්වා දෙනු ඇත. එමගින් ඔබට පරිපථ නිර්මාණය කිරීම පහසු කරවන අතර මෙම උපාංග කට්ටලයට අවශ්‍ය සියලු ඉලෙක්ට්‍රොනික් components සහ මොඩියුල (Module) අඩංගු වේ. එමගින් ඔබට ව්‍යාපෘති සම්පූර්ණ කිරීමේ අවස්ථාව හිමි වේ. ඔබට ඕනෑම මොහොතක ක්ෂණික සහ නොමිලේ තාක්ෂණික සහාය ලබා ගත හැකිය. මෙම පාඩම් මාලාව අලුතෙන් ආර්ඩුයිනෝ ඉගෙන ගන්න ඔබට එය ගොඩක් වැදගත් වේවි.

Push Button එකකින් LED බල්බ් එකක් පාලනය කිරීම.

මෙම ව්‍යාපෘතියේදි අපි Push Button එකක් භාවිතා කර LED බල්බ් එකක් ON/OFF කරන ආකාරය විමසා බලමු. මෙහි දී  අපි කිසිදු කේතයක් භාවිතා නොකරයි.

අවශ්‍යය උපාංග

පරිපථ සම්බන්ධ දැනුම

සාමාන්‍යයෙන් ඉලෙක්ට්‍රොනික් පරිපථ සදහා සෘජු ධාරා (DC) විදුලි බලයක් භාවිතා කරයි. එම නිසා අපගේ නිවසට ලැබෙන විදුලි සැපයුම වන ප්‍රත්‍යාවර්ථ ධාරා- (AC) විදුලිය සෘජු ධාරා (DC) විදුලි බලයක් ලෙස පරිවර්තනය කර භාවිතයට ගනී.(rectifiers to convert) ඒ වගේම බැටරි හෝ බැටරි බල සැපයුමක් පරිපථ සටහන් වල දැක්වීමේදී පහත සංකේත යොදා ගනී.ජව සැපයුම් (Power supply) ක් මගින් අපගේ මෙම පරිපථ සදහා ශක්තිය ලබා දේ. එය සෘජු ධාරාව (DC) සහ ප්‍රත්‍යාවර්ථ ධාරාව (AC) ලෙස ආකාර දෙකක් ලෙස පවතින අතර අපට අවශ්‍යය ආකරයක් ගැලපෙන අවස්ථාවේදී යොදාගන්න පුළුවන්. වෝල්ටීයතාව (V) සහ ධාරාව (A) සැම වෙලාවකදීම එකම විදියට පවතී නම් එය සෘජු ධාරා (DC) විදුලි බලයකි. සාමාන්‍යයෙන් බැටරි, ජව සැපයුම් (power adapter) වලින් සෘජු ධාරා (DC) විදුලි බලයක් ලබා ගන්න පුළුවන්. වෝල්ටීයතාව (V) සහ ධාරාව (A) කාලයත් සමග පහත දැක්වෙන ආකාරයට සයින් වක්‍රයක් මෙන් වෙනස්වේ නම් එය ප්‍රත්‍යාවර්ථ ධාරා (AC) ගණයට අයත් වේ. ගොඩක් දුර විදුලි බලය සැපයීමේදී එනම් දුර ගෙනයාමේදී (Transmit) විදුලිය ප්‍රත්‍යාවර්ථ ධාරා(AC) විදුලි බලයක් ලෙස පරිවර්තනය කර සිදු කරයි. අපේ නිවසට ලැබෙන්නේද 230v කින් යුත් ප්‍රත්‍යාවර්ථ ධාරා (AC) විදුලි බලය විදුලි සැපයුමකි.

සාමාන්‍යයෙන් ඉලෙක්ට්‍රොනික් පරිපථ සදහා සෘජු ධාරා (DC) විදුලි බලයක් භාවිතා කරයි. එම නිසා අපගේ නිවසට ලැබෙන විදුලි සැපයුම වන ප්‍රත්‍යාවර්ථ ධාරා (AC) විදුලිය සෘජු ධාරා (DC) විදුලි බලයක් ලෙස පරිවර්තනය කර භාවිතයට ගනී.(rectifiers to convert) ඒ වගේම බැටරි හෝ බැටරි බල සැපයුමක් පරිපථ සටහන් වල දැක්වීමේදී පහත සංකේත යොදා ගනී.

බැටරියක ධන(+) සහ ඍණ(-) අග්‍ර දෙකක් පවතී. ඒවා කෙලින්ම එකට සම්බන්ධ නොකළ යුතුයි. එසේ කිරීමෙන් බැටරිය භාවිතයට ගත නොහැකි සේ විනාශ වේ.

Voltage(වෝල්ටීයතාව)

වෝල්ටීයතාව මනින ඒකකය හදුන්වන්නේ Volt(වෝල්ට්) ලෙසයි. එය V අකුරෙන් සංකේතවත් කරයි.

  • 1KV = 1000V
  • 1V = 1000mV
  • 1mV = 1000μv

වෝල්ටීයතාව සාපේක්ෂයි. වියලි කෝෂ බැටරියක “1.5V” ලෙස දක්වා තිබේ. එනම් ඍණ(-) වෝල්ටීයතාව සාපේක්ෂව එහි ධන(+) වෝල්ටීයතාව 1.5V ලෙස ගනු ලබන අතර. සාමාන්‍යයෙන් ඍණ(-) වෝල්ටීයතාව 0V ලෙස දැක්වේ.

බැටරි දෙකක් ශ්‍රේණිගතව සම්බන්ධ කිරීමෙන් ලබා ගන්න වෝල්ටීයතාව වැඩි කරගන්න පුළුවන්. එය පහත රූප සටහනේ දක්වා තිබේ.

සාමාන්‍යය භාවිතයේදී ඍණ(-) වෝල්ටීයතාව එනම් 0V අපි GROUND ලෙස දක්වයි. එය GND ලෙස ආර්ඩුයිනෝ බෝර්ඩ් වල සදහන් කර තිබේ. ධන(+) වෝල්ටීයතාව VCC ලෙස දක්වා තිබේ. පරිපථ සටහන් වලදී එය දැක්වීමට පහත දැක්වෙන සංකේත භාවිතා කරයි.

Positive(VCC)

Negative(Ground)

Current (I) ධාරාව

ධාරාව (I) ගණනය කිරීම ප්‍රධාන එකකය ලෙස ඇම්පියර් යන ඒකකය භාවිතා කරනු ලැබේ. එය A සංකේතවත් කරයි.

  • 1A = 1000mA
  • 1mA = 1000μA.

ධාරාවක් පරිපථයක් තුලින් ගමන් කිරීමට සංවෘත වී එනම් එකිනෙකට සම්බන්ධ වී තිබිය යුතුයි.

පහත වම් පස පින්තුරයේ දැක්වෙන්නේ එක දිගට ධාරාවක් ගලා යන සංවෘත පරිපථ සටහනක් වන අතර දකුණු පස දැක්වෙන්නේ ධාරාවක් ගලා නොයන විවෘත පරිපථ සටහනකි.

Resistor (ප්‍රතිරෝධය)

ප්‍රතිරෝධය (R) මැනීමේ ඒකකය ඔම් (Ω) ලෙස හැදින්වේ. එය Ω ලෙස සංකේතවත් කරයි.

  • 1mΩ = 1000kΩ
  • 1kΩ = 1000Ω.

පරිපථයක් හරහා ධාරාව ගලා යෑම සිමා කිරීම (regulates) සදහා ප්‍රතිරෝධක (Resistor) භාවිතා කරයි. ප්‍රතිරෝධක යනු ඉලෙක්ට්‍රොනික් පරිපථ වල බහුලව භාවිතා වන උපාංගය වලින් එකකි. පහත රූපයේ වම් පස දැක්වෙන්නේ ප්‍රතිරෝධකයක් වන අතර දකුණු පස දැක්වෙන්නේ එය සංකේතවත් කිරීමට යොදා ගන්නා සංකේතයයි.

විවිධ පාටවලින් දැක්වෙන වළලු වලින් ප්‍රතිරෝධක වල ප්‍රතිරෝධය දැක්වේ. එය ගණනය කිරීමට අදාල වගුව මෙම පොතෙහි උපග්‍රන්ථය සමග අමුණා ඇත. එය භාවිතා කර ප්‍රතිරෝධක වල ප්‍රතිරෝධය සොයා ගත හැක.

වෝල්ටීයතාව නියතව පවත්වා ගනිමින් ධාරාව අඩු කිරීමෙන් වැඩි ප්‍රතිරෝධයක් ලබා ගත හැකියි. ඒ සදහා වෝල්ටීයතාව, ධාරාව, හා ප්‍රතිරෝධය අතර සම්බන්ධතා පහත සමීකරණ වලින් දැක්වේ.

පහත සටහනේ අනුව R1 හරහා ගලන ධාරාව : I=V/R=5V/10kΩ=0.0005A=0.5mA.

අවවාදයයි – කිසිවිටෙකවත් අඩු ප්‍රතිරෝධයක් හරහා බැටරියක හෝ බල සැපයුමක ධන හා ඍණ අග්‍ර සම්බන්ධ කිරීමෙන් වලකින්න. ඒ විට ඔබ භාවිත කරන ඉලෙක්ට්‍රොනික් උපාංග හෝ පරිපථයම පිලිස්සී යාමට හැකියි.

උපාංග පිලිබද දැනුම

ජම්පර් වයර්

ජම්පර් වයර් ලෙස හදුන්වන්නේ අපි සම්බන්ධක ලෙස භාවිතා කරන වයර් වලටයි. මේවා සකස් කර තිබෙන්නේ ඉලෙක්ට්‍රොනික උපාංග දෙකක් එකිනෙක සම්බන්ධ කිරීමටයි. උදාහණයක් ලෙස ආර්ඩුයිනෝ බෝර්ඩ් එක සහ බ්‍රෙඩ්බෝර්ඩ් එක එකිනෙක සම්බන්ධ කිරීමට මේවා භාවිතා කර හැකියි.

Jumper වයර්, ජම්පර් වයර් වල male පින් (pin) සහ  female ස්ලොට් (slot) පවති. ඒවා පදනම්  කරගෙන ජම්පර් වයර් වර්ග 3ක් පවතී. එවා පහත දැක්වේ.

Jumper M/M
Jumper F/F
Jumper F/M

Breadboard

විවිධ වර්ගයේ බ්‍රෙඩ්බොර්ඩ් ඔබට වෙළදපොළෙන් ලබා ගන්න පුළුවන්. මෙහි දැක්වෙන්නේ බහුල වශයෙන් භාවිතා වන 400 පින් (සිදුරු) සහිත කුඩා බ්‍රෙඩ්බොර්ඩ් එකකි. ජම්පර් වයර් මගින් සම්බන්ධ කිරීමට මෙහි කුඩා සිදුරු විශාල ප්‍රමාණයක් පවතී.

එම සිදුරු ඇතුළතින් එකිනෙක සම්බන්ධ වී පවතී. එම සම්බන්ධ වන ආකාරය පහත රූපයේ දැක්වේ.

breadboard සම්බන්ධ තව ඉගන ගන්න මෙම ලිපිය වෙත පිවිසෙන්න : Breadboard ගැන දැනගනිමු

Push button

Push button එකක පින් 4 ක් තිබේ. වම්පස රූපයේ පරිදි පින් දෙකක් එකිනෙකට සම්බන්ධ වී පවති. Push button අපිට වෙළදපොළෙන් විවිධ ප්‍රමාණයෙන් මිලදී ගන්න පුළුවන්. පරිපථයක් සංවෘත (ON) හෝ විවෘත (OFF) කර ගැනිම සදහා push  button භවිතා කරයි.

pushbutton සම්බන්ධ තව ඉගන ගන්න මෙම ලිපිය වෙත පිවිසෙන්න : Push Button එකක් ආර්ඩුයිනෝ සමග භාවිතා කරන ආකාරය,

LED

LED එකක් යනු ඩයොඩ් එකකි. LED එකේ දිග පින් එක ධන(+) අග්‍රය වන අතර කොට පින් එක ඍණ(-) අග්‍රය වේ. මෙම සාමාන්‍යය ඩයෝඩයක් පරිදි ක්‍රියා කරයි. එනම් LED බල්බ් එකක් හරහා ධාරාව ගලා යන්නේ එක පැත්තකට පමණි. එනම් ඩයෝඩයක ධාරාව ගල යාමට සැමවිටම ඍණ පැත්තේ වෝල්ටීයතාවට වඩා ධන පැත්තේ වෝල්ටීයතාව වැඩි විය යුතුයි.

LED එකක් අපි කෙලින්ම බැටරියකට හෝ විදුලි සැපයුමකට සම්බන්ධ නොකළ යුතුයි. එමගින් එය හානි විය හැකියි. සැමවිටම ශ්‍රේණිගතව ගැලපෙන ප්‍රතිරෝධකයක් යොදා සම්බන්ධ කළ යුතුයි.

පරිපථ සැකැස්ම

මෙම අත්හදා බැලීමේදී අපි කරනුයේ Push Button එකක් භාවිතා කර LED බල්බ් එකක් කොන්ට්‍රෝල් කිරීමයි. මෙහිදී පරිපථය සදහා විදිලි බලය ආර්ඩුයිනෝ බෝර්ඩ් එකෙන් ලබා දේ.

පළමුව පහත රූපයේ පරිදි අදාළ උපාංග සමග ජම්පර් වයර් භාවිතා කර පරිපථය සකස් කරගන්න. පසුව රූපයේ පරිදි නිවැරදිව පරිපථය සම්බන්ධ කර තිබේදැයි හොදින් පරීක්ෂා කර බලන්න. ඉන් පසු ඔබගේ ආර්ඩුයිනෝ බොර්ඩ් එක USB කේබල් එක හරහා පරිගණකයට සම්බන්ධ කරන්න.

Schematic Diagram

Hardware Connection

දැන් Push button එක ඔබන්න. අතාරින්න එවිට LED බල්බ් එක දැල්වී නිවෙන ආකාරය දැක ගන්න පුළුවන්. Push button එක ඔබා ගෙන සිටින විට පමණක් බල්බය දැල්වේ.

මෙහිදි සාමන්‍යය පරිදි LED බල්බ් එකට විදුලිය ලබා දීමයි. මෙහිදී කිසිම කේතයක් යොදා නොගත් අතර ආර්ඩුයිනෝ බොර්ඩ් එක යොදා ගත්තේ එයට විදුලිය සැපයිමටයි. මෙහි 220Ω ප්‍රතිරෝධයක් හරහා සම්බන්ධ කරනු ලබන්නේ ආර්ඩුයිනෝ බොර්ඩ් එක මගින් එන 5V වෝල්ටීයතාව බල්බයට ගැලපෙන පරිදි අඩු කර ගැනිමටයි. .සාමාන්‍යයෙන් LED බල්බ් එකක් 1.5V සහ 3.5V අතර පරාසයක් වැඩ කරයි. එය ප්‍රමාණය හා පාට අනුව වෙනස් වේ.

Arduino මගින් LED පාලනය කිරීම.

අවශ්‍යය උපාංග

දැන් අපි ආර්ඩුයිනෝ මගින් LED blink කරන්න ප්‍රෝග්‍රෑම් නිර්මාණය කරමු.

කලින් පාඩමේදී භාවිතා කරන ලද උපාංග මෙයට භාවිතා කල හැකියි. Push Button එක මෙහිදී අවශ්‍ය නොවේ.

පරිපථ සම්බන්ධ දැනුම

ඇනලොග් සිග්නල් සහ ඩිජිටල් සිග්නල්

ඇනලොග් සිග්නල් එකකදී කාලයත් සමග එහි වොල්ටියතා අගය (value) වෙනස් වේ. එය අඛණ්ඩ සංඥාවක් ලෙස යම් අගයන් පරාසයක විචලනය වන අතර. මීට ප්‍රතිවිරුද්ධව, ඩිජිටල් සිග්නල් වලදී කාලයත් සමග එහි වෝල්ටීයතා අගය (value) නියත අගයක් ගනී.

අපට ජීවිතයේ නිතරම හමුවන ඇනලොග් සිග්නල් වලට උදාහරණයක් ලෙස දිනකදී උෂ්ණත්වය එක දිගට වෙන්වීම ගත හැකියි.(continuously changing) එහි අගය නියත අගයක් නොවේ. ඒ අගය කිසි විටකත් එහි අගය 0 ℃ සිට 10 ℃ සිට ඍජු වෙනස්වීමක් නොවනු ඇත. ඩිජිටල් සිග්නල් වලදී අගය ඍජුවම 1 සිට 0 දක්වා කෙලින්ම වෙනස් වේ. එහි ඇත්තේ ද 1 සහ 0 අවස්ථා දෙක පමණි. පහත පින්තූරයේ දැක්වෙන ප්‍රස්ථාරයේ දක්වා තියෙන්නේ ඇනලොග් සිග්නල් සහ  ඩිජිටල් සිග්නල් අතර වෙනසයි .

කලින් පෙන්වා දුන් ආකාරයට ප්‍රයෝගිකව යොදා ගන්න විට, ඩිජිටල් සිග්නල් වලදී නිතරම භාවිතයට ගන්නේ 0 සහ 1 යන අගයන් පමණි. මෙහිදි දෙකේ පාදයෙන් ගණනය කිරීම් සිදු කරයි. ඩිජිටල් සිග්නල් වලට හොද ස්ථාවරත්වයක් ඇත. ඒ වගේම  ඩිජිටල් සිග්නල් එකක් ඇනලොග් සිග්නල් එකටත් ඇනලොග් සිග්නල් එකක්   ඩිජිටල් සිග්නල් බවටත් පරිවර්තනය කල හැකිය.

Low level සහ High level

මෙම 0 සහ 1 අගයන් low level සහ  high level ලෙස හදුන්වනු ලැබේ.

සාමාන්‍යයෙන් අපි පරිපථයකදී Low level එනම් අඩුම අගය Ground voltage (0V) ලෙස ගනු ලැබේ. High level උපරිම අගය ලෙස පරිපථයේ ධන (+) වෝල්ටීයතාවහි උපරිම අගය භාවිතා කරයි.

ආර්ඩුයිනෝ බෝර්ඩ් එකේදී Low level ලෙස 0V සහ  High level ලෙස 5V භාවිතා කරයි., එය පහත පින්තුරයේ පරිදි දැක්විය හැකිය. එනම් ආර්ඩුයිනෝ බෝර්ඩ් එකේ IO පින් වලදී High level ලෙස ප්‍රතිදානයක් ලබා දීමේදී 5V නිකුත් වන අතර එමගින් අපගේ පරිපථයේ LED බල්බය දැල්වේ.

කේතකරණය පිලිබද දැනුම

දැන් අපි අපේ පරිපථයට අදාළ ප්‍රෝග්‍රෑම් එක නිර්මාණය කිරීම ආරම්භ කරමු. එමගින් ඔබට ආර්ඩුයිනෝ කේතකරණය සම්බන්ධව මනා අවබෝධයක් ලබා ගත හැකියි.

Comments (කමෙන්ට්)

අපේ sketches එකේ ප්‍රෝග්‍රෑම් එකේ අදාළ කේත පේළි හෝ කොටස් ගැන පසුව මතක් කරගැනීමට හෝ හැදින්වීමක් යෙදීමට කමෙන්ට් භාවිතා කරයි. කමෙන්ට් ලෙස යොදන විස්තරය අපගේ ප්‍රෝග්‍රෑම් එක රන් වීමට අදාල නොවේ. එය කම්පයිලර් එකෙන් මගහරී.

ආර්ඩුයිනෝ Sketches එකකදී අපිට ක්‍රම දෙකකට කමෙන්ට් යෙදිය හැකියි.

1.Symbol “//”

“//” තනි පේළියක කමෙන්ට් එකක් යෙදීමේදී මෙය භාවිතා කරයි.

// this is a comment area in this line.

code පේළියක ඉදිරියෙන් “//” යොදා කමෙන්ට් යෙදිය හැකියි.

delay(1000);      // wait for a second

2.Symbol “/*”and “*/”

“/*” සහ “*/” – මෙම සංකේත දෙක අතර කමෙන්ට් එක යෙදිය යුතුයි. පේළි කිහිපයක කමෙන්ට් එකක් යෙදීමේදී මෙය භාවිතා කරයි.

/* This is a comment area. */

/*
this is a comment line.
this is a comment line.
*/

Data type (දත්ත වර්ග)

ආර්ඩුයිනෝ ප්‍රෝග්‍රෑම් එකක් නිර්මාණය කිරීමේදී විවිධ ආකාරයේ දත්ත වර්ග භාවිතා කිරීමට සිදුවේ. උදාහරණ ලෙස වචන, වාක්‍යය, අකුරු, ඉලක්කම්, සංකේත සහ තවත් බොහෝ දේවල් හැදින්වීමට හැකි අතර C කේතකරණ භාෂාවේ මුලික දත්ත වර්ග කිහිපයක් පවතී. ආර්ඩුයිනෝ කේතකරණයට ආදාල කේතකරණ භාෂාව නිර්මාණය කර ඇත්තේ C කේතකරණ භාෂාව යොදා ගෙනය. එම නිසා එවා අතර බොහෝ සමානකම් තිබේ.

මුලික දත්ත වර්ග 3 පහත ආකාරයට දැක්විය හැකියි.

  • int: ගණිතමය ක්‍රියාකාරකම් සහිතව පුර්ණ අගයන් යෙදීමේදී මෙය භාවිතා කරයි. උදා 0, 12, -1;
  • float: ගණිතමය ක්‍රියාකාරකම් සහිතව දශම, භාග සහිත අගයන් නිරුපණය කිරීමට භාවිතා කරයි. උදා 0.1, -1.2;
  • char: අකුරු සංකේත යොදා ගැනීමේදී මෙය භාවිතා කරයි, උදා: ‘a’, ‘@’, ‘0’;

දත්ත වර්ග ගැන තවත් දේවල් දැනගන්න මෙම වෙබ් පිටුවට යන්න https://www.arduino.cc/Learning-Reference-Data Types.

Constant (නියත)

Constant ලෙස යොදාගන්නේ එම අගය නියතයක් ලෙස නිරුපණය කිරීමටයි. එහි අගය වෙනස් නොවේ,  මේ සදහා const කියන පදය භාවිතා කරයි. එය භවිතා කරන ආකාරය පහත දැක්වේ.

const float pi = 3.14; 
const int pi = 3; 
const char chr = 'A';

විචල්‍යයක් යනු අපි යොදාගන්නා අගයක් වෙනස් කළ හැකි ආකාරයේ දත්තයකි. එයට නමක්(name) වර්ගයක් (type) සහ අදාල අගයක් (value) පවතී. විචල්‍යය භාවිතයට පෙර එයට නමක් හා වර්ගයක් ලබා දී නිර්මාණය කර ගත යුතුයි, එය පහත පහත පරිදි අර්ථ දැක්විය හැකියි: Variable (විචල්‍යය)

int i;

විචල්‍යයක් අර්ථ දැක්වීමෙන් පස්සේ එයට අගයක් යෙදිය හැකියි. එය පහත පරිදි සිදු කල හැකියි. මෙහිදි සිදුවන්නේ විචල්‍යයයේ නමට ආදාල අගය සාමාන කිරිමයි.”int” ලෙස දක්වා තිබෙන්නේ විචල්‍යයයේ වර්ගයයි. එනම් අපි කලින් ඉගනගත් දත්ත වර්ග වලින් එකකි. විචල්‍යයක් අර්ථ දක්වා අවසානයේ “;” එකක් යොදා අවසන් කළ යුතුයි. විචල්‍යයක් සාමාන්‍යයයෙන් තනි පේලියකින් දක්වනු ලබයි. ඒ වගේම අවසානයේ ; එකක් යොදනු ලබයි.

i = 0;            // after the execution, the value of i is 0

අපිට අවශ්‍ය නම්  තනි පේළියක විචල්‍යය කිහිපයක් වුනත් අර්ථ දැක්විය හැකියි. එමගින් අපේ ප්‍රෝග්‍රෑම් එකේ කේත පේළි ප්‍රමාණය අඩු කරගත හැකිය. විචල්‍යයක් ඒ විදියට අර්ථ දක්වා පස්සේ එයට අගයක් යෙදිය හැකියි.  ඒ සදහා අපි ‘=’ ලකුණ යොදා ගනි. එහිදී වම් පස විචල්‍යයයේහි නමත් දකුණු පස එයට යොදන අගයක් යොදා කේත කිරිම කල යුතුයි. එහි අගය අපට අවශ්‍ය තැන් වලදී යොදන අගය වෙනස් කල හැකියි. එය යොදා ගන්නා ආකාරය පහත දක්වා තිබේ.

int i, j; 
i = 0;           // after the execution,the value of i is 0 
i = 1;           // after the execution,the value of i is 1 
j = i;           // after the execution,the value of j is 1

ප්‍රෝග්‍රෑම් එකක් කේත කිරීමේදී එය පහසුවෙන් සිදු කිරීමට අපි ෆන්ෂන් භාවිතා කරනු ලැබේ. ෆන්ෂන් එකක් යනු අපි කර ගන්න ඕන වැඩේට (task) එකට අදාලව ක්‍රමානුකුලව ලියන ලද කේත පේලි ගොඩක එකතුවක් කියලා හදුන්වන්න පුළුවන්. දැන් අපි උදාහරණය විදියට පහත දැක්වෙන void blink () ෆන්ෂන් එක සලකා බලමු.

Function

ප්‍රෝග්‍රෑම් එකක් කේත කිරීමේදී එය පහසුවෙන් සිදු කිරීමට අපි ෆන්ෂන් භාවිතා කරනු ලැබේ. ෆන්ෂන් එකක් යනු අපි කර ගන්න ඕන වැඩේට(task) එකට අදාලව ක්‍රමානුකුලව ලියන ලද කේත පේලි ගොඩක එකතුවක් කියලා හදුන්වන්න පුළුවන්. දැන් අපි උදාහරණය විදියට පහත දැක්වෙන void blink () ෆන්ෂන් එක සලකා බලමු.

void blink() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

“void” මගින් දැක්වෙන්නේ අදාල ෆන්ෂන් එකෙන් යම් අගයක් ආපසු ෆන්ෂන් එකෙන් පිටතට ලබා නොදෙන බවයි. එනම් අදාල ෆන්ෂන් එකෙන් ආපසු (return) ලබා දෙන අගයක් නොමැති බවයි. (3 වන පාඩමේදී ෆන්ෂන් එකක return value භාවිතය ගැන වැඩිදුර ඉගෙන ගනිමු. Blink යනු මෙම ෆන්ෂන් එකේ නමයි. ෆන්ෂන් එකකට අනිවාර්යයෙන් නමක් යෙදිය යුතුය. එම නම් ආර්ඩුයිනෝ වල ඇති විශේෂ පද වලට අදාළ නැති අපට කැමති නමක් භාවිතා කළ හැකියි.

“()” මෙම වරහන් යොදාගන්නේ අදාල ෆන්ෂන් එකට අවශ්‍යය යම් අගයක් හෝ අගයන් කිහිපයක් පිටතින් ලබා ගන්නේ නම් එය අර්ථ දැක්වීමටයි. එම අගයන් විචල්‍යයක් ආකාරයට මෙම වරහන් තුළ යොදනු ලබයි. එවැනි අගයක් නොමැති නම් අපි වරහන් හිස්ව () යොදනු ලබයි. එම යොදන විචල්‍යයක  අපි ෆන්ෂන් එකට අදාල පැරාමීටර්ස්(parameters) ලෙස හදුන්වයි. (ඉදිරියේදි අපි ෆන්ෂන් වලට අදාල පැරාමීටර්ස් ගැන වැඩිදුර ඉගනගනිමු ).

“{}” තුළ ෆන්ෂන් එකට අදාල සියලු කේත පේළි මේ තුළ ලියනු ලබයි.

ෆන්ෂන් එකක් නිර්මාණය කළ පමණින් එයින් වැඩක් නොවේ. එම කේත රන් නොවේ. නිර්මාණය කළ අවසන් කර පසු අපි ෆන්ෂන් එක අදාල අවස්ථා වලදී කතා(call) කල යුතුයි. void blink() ෆන්ෂන් එක රන් කිරිමට කතා කරන ආකාරය පහත දක්වා තිබේ,

blink();

ෆන්ෂන් එකකට කතා (call) කළ විට පමණක් එයට අදාල කේත ක්‍රියාත්මක වේ, එනම් එයට කතා කරන අවස්ථාවේදී පමණක් ෆන්ෂන් එකට අදාල කේත කොටස run වේ. ෆන්ෂන් එකට අදාල කේත ක්‍රියාත්මක වීමෙන් පසු ප්‍රධන ලූප් එකේ ඊලග කේත පේලිය ක්‍රියාත්මක වීම පටන්ගනී. එය පහත රූපයෙන් ඔබට හොදින් අවබෝධ කරගන්න පුළුවන්.

සමහර ෆන්ෂන් වල පැරාමීටර්ස් එකක් හෝ කිහිපයක් තිබෙන්න පුළුවන්. එම අවස්ථා වලදී එය අපි ෆන්ෂන් එකට කතා කරන විට () තුළ යෙදිය යුතු වේ.


මෙහිදි අපිට මෙය ක්‍රියත්මක කිරිමට ප්‍රධාන වශයෙන් ෆන්ෂන් 5 නිර්මාණය කර ගත යුතු වේ. එනම් ඉඩිරියට යාමට, පසුපසට යාමට, වමට හැරවිමට, දකුණට හැරවිමට සහ නැවත්විමටයි. එය අපිට forward, backward, turn left, turn right, stop ලෙස යොදා ගත හැකිය. මෙහිදී එක එක ෆන්ෂන් එක සදහා එය තුළ මෝටර් ක්‍රියාත්මක  විය යුතු ආකාරය සකස් කර ගත හැකිය. ඊට පසු බ්ලූටූත් මගින් සිග්නල් එකක් යවා අදාල අවස්ථාවේ එම එක් එක් ෆන්ෂන් කෝල් කිරිම මගින් කාර් එක පාලනය කළ හැකිය.

මෙම ආකාරය අපිට ඕනැම නිර්මාණයක් කිරිමේදී ඊට අදාල මූලික ක්‍රියාකාරකම් ෆන්ෂන් සකස් කර ගැනීමෙන් අපිට එක පහසුවෙන් සිදු කර ගත හැකිය.

පරිපථ සැකැස්ම

දැන් අපි අදාන ප්‍රතිදාන පින් භාවිතා කරලා LED එකක්  Blink කරන්නේ කොහොමද කියලා බලමු.  D13 ලෙස නම් කරලා තියෙන්නේ ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඩිජිටල් පින් එකක් වන් අතර එය අපිට high level සහ low level බවට පත් කළ හැකිය. එනම් ON සහ OFF කිරිමයි. එමගින් අපිට LED බල්බ් එක කොන්ට්‍රෝල් කළ හැකි වේ.

Schematic diagram

Hardware connection

Sketch 1.2.1

පහත දැක්වෙන්නේ LED බල්බ් එකක් blink කිරීමට අදාල sketch එකයි. මෙහිදී අපිට ආර්ඩුයිනෝ බෝර්ඩ් එකේ ඩිජිටල් 13 පින් (D13) එක ප්‍රතිදානයක් විදියට සකස් කර එය  HIGH සහ LOW කළ යුතුයි. ඔබගේ කේතකරණය පිලිබද නිපුණත්වය වැඩි කරගැනීමට නම් ඔබ මෙහි දැක්වෙන කේත කේතනය කරන්න. copying and pasting කිරීම කේතකරණය ඉගෙන ගැනීමට හොද ක්‍රමයක් නොවන බව මතක තබා ගන්න. ඔබම කේත නිර්මාණකරණය මගින් ඔබගේ කුසලතා වැඩිදියුණු කර වැඩි දැනුමක් ලබා ගත හැකිය.

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output
pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH);  // turn the LED on (HIGH is the voltage level)
delay(1000);             // wait for a second
digitalWrite(13, LOW);   // turn the LED off by making the voltage LOW
delay(1000);              // wait for a second
}
LED_BUILTIN
බොහෝ ආර්ඩුයිනෝ පුවරුවල ප්‍රතිරෝධකයක් සහිත ශ්‍රේණියේ LED එකක් පුවරුවකට සම්බන්ධ කර ඇත. නියත LED_BUILTIN යනු පුවරුවේ ඇති LED සම්බන්ධ කර ඇති පින් එකයි. බොහෝ පුවරු වල මෙම LED ඩිජිටල් පින් 13 සමඟ සම්බන්ධ කර ඇත. එනම් D13 භාවිතා කරන තැන් වලට මෙය භාවිතා කළ හැකියි.

ආර්ඩුයිනෝ කේත වලදී: void setup () සහ void loop () ප්‍රධාන ෆන්ෂන් දෙකක් භාවිතා කරයි. ආර්ඩුයිනෝ බොර්ඩ් එක රිසෙට් (reset) කළ පසු setup  () ෆන්ෂන් එක මුලින් ක්‍රියත්මක වේ. ඊට පස්සේ loop () ෆන්ෂන් එක ක්‍රියත්මක වේ. සාමාන්‍යයෙන් setup () ෆන්ෂන් එක භාවිතා කරන්නේ බොර්ඩ් එක හා සම්බන්ධ කර ඇති දෘඩාංග හදුනාගෙන එවායේ සෙටින්ග්ස් සකස්  කිරීමටයි. එනම් අපි  ප්‍රෝග්‍රෑම් එක හරහා මොන මොන උපාංග  එක්ක සම්බන්ධ වනවාද යන්නයි. loop () ෆන්ෂන් එක භාවිතා කරන්නේ අපගේ  ප්‍රෝග්‍රෑම්  එකට අදාළ අනෙකුත් කේත සහ ෆන්ෂන් ලිවීමටයි. එය එක දිගට චක්‍රයක් සේ සේ ක්‍රියත්මක වේ. එනම් ප්‍රෝග්‍රෑම් එක මුල සිට අවසානයේ දක්වාත් නැවතත් මුල ඉදන් අවසානයේ තෙක් දිගටම රන් වෙන්න පටන් ගනී.

රීසෙට් (Reset) කිරීමේදී ප්‍රෝග්‍රෑම් එක නැවත මුල සිට ක්‍රියාත්මක වෙන්න පටන් ගනී. ආර්ඩුයිනෝ බොර්ඩ් එක  විදුලිය විසන්ධි කළ  අවස්ථාවේත්, අප්ලෝඩ් කරන අවස්ථාවේත්. රීසෙට් (Reset) බටන් එක එබු විටත් මෙය ක්‍රියාත්මක වේ.

setup () ෆන්ෂන් එකේදී මුලින්ම අපි බොර්ඩ් එකේ ඩිජිටල් 13 පින් එක ප්‍රතිදානයක් බවට පත් කර ගත යුතුයි. ඉන් පසු එය high level සහ low level බවට පත් කර ගත යුතුයි.

// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);

ඉන්පසු loop () ෆන්ෂන් එකේදී අපි බොර්ඩ් එකේ ඩිජිටල් 13 පින් එක high level (5V) ලෙස  ප්‍රතිදාන කිරීම මගින්  LED බල්බ් එක දැල්වේ.

digitalWrite(13, HIGH);  // turn the LED on (HIGH is the voltage level)

ඉන් පසු පහත දැකෙවෙන ආකාරය අපි තත්පර එකක් බල්බ් එක දැල්වී පවතින ලෙස සකස් කළ යුතුය. එයට අපි delay () ෆන්ෂන් එක භවිතා කරනු ලැබේ. මෙහිදි කාලය මිලි තත්පර වලින් පැරාමිටර් එකක් ලෙස ලබා දිය යුතුය. අපි එය දක්වන්නේ 1000 ලෙසයි. මිලි තත්පර 1000 ක් තත්පර 1 ට සමාන වේ. delay() ෆන්ෂන් එක භාවිතයෙන් ඊලග පේළිය ධාවනය වීමට යම් කාලයක් ලබා දී පමා කිරිම සිදුකරයි.

delay(1000);            // wait for a second

දැන් අපි නැවතත් ඩිජිටල් 13 පින් එක low level ලෙස එනම් OFF ලෙස ප්‍රතිදාන කරනු ලබන අතර එහිදී LED බල්බ් එක නිවී යයි. නැවතත් ඉහත පරිදි තත්පර 1 ක් පමා වෙන ආකාරයට delay () ෆන්ෂන් එක භාවිතා කරයි. ඒවා ධාවනය වීමෙන් පස්සේ   loop () ෆන්ෂන් එක අවසාන වන අතර නැවතත් මුල සිට  ක්‍රියාත්මක වේ.

digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000);           // wait for a second

දැන් loop () ෆන්ෂන් එක එක දිගට වැඩ කරන නිසා අපිට LED බල්බ් එක නිවී නිවී දැල්වෙන ආකාරයට දිස් වේ.

ඉහත අපි භාවිතා කරේ ආර්ඩුයිනෝ වල මුලික ෆන්ෂන් කිහිපයක්, ඒවා ආර්ඩුයිනෝ සොෆ්ට්වෙයා එක තුළ අන්තර්ගත වේ. එම නිසා අපිට ඒවා කෙලින්ම භාවිතා කළ හැකියි. ඉදිරි පාඩම් වලිදී ඔබට තවත් මුලික ආර්ඩුයිනෝ ෆන්ෂන් ගැන වැඩි දුර ඉගෙන ගැනීමට අවස්ථාව හිමිවේ. ඔබට ඒ ගැන වැඩිදුර දැනගැනීමට අවශ්‍ය නම්  මෙම වෙබ් පිටුවට වෙත පිවිසෙන්න  https://www.arduino.cc/LearningReference-Functions.

ඔබගේ ප්‍රෝග්‍රෑම් එක Verify ක්ල්ක් කර නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසු අප්ලෝඩ් කර ගන්න. එවිට LED blink වෙන ආකාරය ඔබට දැක ගත හැකිය.

ඔබට කලින් ප්‍රොජෙට් එකේදි LED එකක් නිවී දැවෙන ආකාරයේ පරිපථයක් ප්‍රෝග්‍රෑම් කරන්නේ කෙසේද යන්න ඉගෙන ගන්න අවස්ථාව හිමි විය. දැන් අපි ආර්ඩුයිනෝ බෝර්ඩ් එකක් භාවිතයෙන් LED දෙකක් blink කිරීම සදහා ප්‍රෝග්‍රෑම් එකක් නිර්මාණය කරන ආකාරය පිලිබදව සොයා බලමු.

 ක්‍රියාකාරකම 1.2
  1. ඔබේ LED ෆ්ලෑෂ් වීම වේගවත් හෝ මන්දගාමී වන ලෙස සිදුකරන්න.
  2. ඔබේ LED ෆ්ලෑෂ් වීම විවිධ රටා කිහිපයක් නිර්මාණය කරන්න.

LED බල්බ් දෙකක් පාලනය කිරීම

අවශ්‍යය උපාංග

කේතකරණය පිළිබද දැනුම

අවසාන පාඩමේදී අපි පහත ආකාරයට පරාමිතීන් (parameter) යොදා delay ෆන්ෂන් එකක් භාවිතා කර ආකාරය මතක ඇතැයි සිතමි.

delay(1000); // wait for a second

දැන් අපි එවැනි ෆන්ෂන් එකක් තුළ පරාමිතීන් (parameter) භාවිතා වන ආකාරය බලමු. එය පහත පරිදි අර්ථ දක්වන්න පුළුවන්.

void functionA (int i) {
i = i + 1;
} 

function A ලෙස දක්වා ඇත්තේ එම ෆන්ෂන් එකේ නමයි. “i” ලෙස හදුන්වා තිබෙන්නේ ඉහත ෆන්ෂන් එකේ පරාමිති(parameter)යයි. “Int” ලෙස දක්වා තිබෙන්නේ i පරාමිතියේ භාවිතා වන දත්ත (Data type) වර්ගයයි. ෆන්ෂන් එකට කතා කිරීමේදී අදාළ පරාමිතිය යෙදිය යුත්තේ එම වර්ගයට ගැලපෙන විදියටයි.

functionA (1);

පරාමිතීයක් විදියට ආදාන වන අගය ඊට පසු  i ට ඇතුළත් වේ. ඉන් පසු එම අගය functionA(int i) තුළ භාවිතා කළ හැකියි. එය වැඩ කරන ආකාරය පහත දක්වා දැක්වේ.

ෆන්ෂන් එකක් තුළ පරාමිතීන් එකක් හෝ ඊට වඩා භාවිතා කල හැකියි. ඒ වගේම එම පරාමිතීන් වලට එකිනෙක වෙනස් දත්ත වර්ගයන්(data types) භාවිතා කරන්න පුළුවන්.

void functionB (int i, char j) {
char k = 'a';
i = i + 1;
k = j;
}

බූලියන් දත්ත වර්ගය (Boolean data type)

බූලියන් ලෙස නම් කර ඇති දත්ත වර්ගය භාවිතා කරන්නේ “true” සහ “false” භාවිතා කරන්න අවශ්‍ය විටයි. එනම් සරලව කිව්වොත් මෙයින් කියවෙන්නේ ඇත හා නැත යන අවස්ථා 2 පමණි. දෙකේ පදයෙන් ගත්තොත් true යන්න 1 ලෙසද false යන්න 0 ද දැක්විය හැකියි. එය පහත පරිදි භාවිතා කරන්න පුළුවන්.

boolean isTrue;
isTrue = true;   // after the execution, "isTrue" is assigned to true.
isTrue = false;  // after the execution, "isTrue" is assigned to false.

තාර්කික ක්‍රියාකරු (Logical operator)

මූලිකව තාර්කික ක්‍රියාවන් සිදුකිරීමට ක්‍රියාකරුවන් 3ක් අපට හමුවේ. ඒවා නම්  “&&” (and), “||” (or), “!” (non), බූලියන් දත්ත වර්ගය භාවිතා කර ප්‍රතිදාන ගන්නා විට මේවා ගොඩක් වැදගත් වේ. සාමන්‍යයයෙන් තාර්කික ක්‍රියාවන් සිදුකිරිමට ක්‍රියාකරුවන් භාවිතා කර ප්‍රතිදාන ගන්න ආකාරය පහත දක්වා තිබේ.

උදාහරණයක් සදහා පහත කේත සටහන බලන්න:

boolean isTrue;
isTrue = true && false;  //execution, "isTrue"is assigned to false.
isTrue = true || false;  //execution, "isTrue"is assigned to true.
isTrue = !true;          // execution, "isTrue"is assigned to false.

සම්බන්ධතා ක්‍රියාකරු (Relation operator)

සම්බන්ධතා ක්‍රියාකරුවන් භාවිතා කරන්නේ යම් අගයන් දෙකක් හෝ අවස්ථා දෙකක් සංසන්දනය කිරීමටයි. තවද එම අවස්ථා දෙකේ සම්බන්ධතාවය නිවැරදිදැයි විනිශ්චය කිරීමට භාවිතා වේ.  විනිශ්චය කිරිමෙන් පසු එය වැරදි හෝ නිවැරදි දැයි පරීක්ෂා කරේ. එනම් true හෝ false දැයි විමසා බැලීමටයි. උදාහරණයක් ලෙස , “1>2” මෙම සම්බන්ධතාවය අසත්‍ය වන අතර “1<2” මෙය සත්‍ය වේ.

boolean isTrue;
isTrue = 1 < 2;      // after the execution, "isTrue"is true.
isTrue = 1 > 2;      // after the execution, "isTrue"is false.

අපි ආර්ඩුයිනෝ සමග භාවිතා කරන තවත් සම්බන්ධතා ක්‍රියාකරුවන්  කිහිපයක් තිබේ. ඒවා නම්,

  • ==” (equal to), සමානයි
  • >=” (greater than or equal to), විශාලයි හෝ සමානයි.
  • <=” (less than or equal to) කුඩායි හෝ සමානයි.
  • =!” (not equal to). අසමානයි.

කොන්දේසි සහිත ප්‍රකාශන (Conditional statement )

කොන්දේසි සහිත ප්‍රකාශන භාවිතා කරන්නේ යම් කිසි ප්‍රතිඵලයක් ලබාදීමේදී එය ලබා දෙනවද නැද්ද යන්න නිගමනය කිරීමටයි. එනම් යම් කිසි ක්‍රියාවලියක්(Tasks) ක්‍රියාත්මක කළ යුතු අවස්ථාව කුමක්ද යන්න තීරණය කිරීමට මෙය යොදා ගනී. පහත දක්වා ඇති පළමු උදාහරණයේ i = 0 සම්බන්ධතාවය සත්‍ය බැවින් i = 1 කියන කේතය ක්‍රියාත්මක වේ. දෙවන උදාහරණයේ i != 0 සත්‍ය නොවන බැවින් i = 1 කියන කේතය ක්‍රියාත්මක නොවේ. මෙහිදී අපි භාවිතා කර තිබෙන්නේ if  කියන කොන්දේසි සහිත ප්‍රකාශන ආකාරයයි.

If වලට අදාලව ක්‍රියාත්මක විය යුතු කේත පේලි ගොඩක් තිබේ නම් ඒවා  “{}“: තුළ ඇතුලත් කල යුතුයි.

යම් සම්බන්ධතාව සත්‍ය හා අසත්‍ය යන අවස්ථා දෙකේදී වෙන වෙනම කේත කොටස් දෙකක් ක්‍රියාත්මක කිරීමට අවශ්‍ය විට අපි if සමග else භාවිතා කරයි. එය සිදුකරන ආකාරය පහත දැක්වේ.

සම්බන්දතා කිහිපයක් අතර තීරණ ගැනීමේදී අපිට පහත පරිදි if else-if භාවිතා කල හැකියි. එහිදි අදාළ සම්බන්ධතාවය සත්‍ය (true) වෙන අවස්ථාවට අදාල කේත කොටස පමණක් ක්‍රියාත්මක වේ. ඒ වගේම කිසිම අවස්ථාවක සම්බන්ධතාවයක් සත්‍ය වන්නේ නැත්නම් else තුළ ඇතුලත් කළ කේත කොටස ක්‍රියාත්මක වේ.

පරිපථ සැකැස්ම

පහත පරිපථයේ දැක්වෙන LED දෙක පිළිවෙලින් blink කිරීම සඳහා ආර්ඩුයිනෝ බෝර්ඩ් එකෙහි  D4 සහ D5 සමග සම්බන්ධ කර ඇත.

Schematic diagram

Hardware connection

Sketch 1.3.1

මෙහිදී අපි ෆන්ෂන් භාවිතා කර හා භාවිතා නොකර LED දෙක blink කරන ආකාරය සදහා sketches දෙකක් නිර්මාණය කරමු. එමගින් අපිට ඒ අවස්ථා දෙක අතර වෙනස හොදින් අවබෝධ කරගත හැකියි.

පළමුව, ෆන්ෂන් භාවිතා නොකර Sketch එක නිර්මාණය කරමු.

// set pin numbers:
int led1Pin = 4;            // the number of the LED1 pin
int led2Pin = 5;            // the number of the LED2 pin

void setup() {
  // initialize the LED pin as an output:
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
}

void loop() {
  digitalWrite(led1Pin, HIGH);   // turn the LED1 on
  digitalWrite(led2Pin, LOW);    // turn the LED2 off
  delay(1000);                   // wait for a second

  digitalWrite(led1Pin, LOW);    // turn the LED1 off
  digitalWrite(led2Pin, HIGH);   // turn the LED2 on
  delay(1000);                   // wait for a second
} 

ඉහත නිර්මාණය කල ඇති Sketch එක අපි කලින් ඉගෙන ගත් පාඩමේ Sketch එකට ගොඩක් දුරට සමාන වේ. වෙනසකට ඇත්තේ LED දෙකක් භාවිතා කර ඒවා එකින් එක නිවී දැල්වෙන ආකාරයට නිර්මාණය කිරීමයි.

විචල්‍යයන් භාවිතය ගැන දැනගනිමු.

2,3 පේලි වල දැක්වෙන්නේ  විචල්‍යය දෙකක් නිර්මාණය කර එම විචල්‍යය දෙකට අදාල පින් අනුයුක්ත කිරීමයි. මෙම විචල්‍යයන් ෆන්ෂන් වලින් පිට නිර්මාණය ඇති නිසා ඒවා පොදු විචල්‍යයන් (“Global variable”) ලෙස හදුන්වයි. එවිට අදාල විචල්‍යය ඕනෑම ෆන්ෂන් එකක් තුළදී භාවිතා කරන්න පුළුවන්. ෆන්ෂන් එකක් තුළ නිර්මාණය කරන විචල්‍යය දේශීය විචල්‍යයන්  (“local variable”) ලෙස හදුන්වයි. ඒවා භාවිතා කළ හැක්කේ එම ෆන්ෂන් එක තුළ පමණි. දේශීය විචල්‍යයන් සහ පොදු විචල්‍යයන් සදහා එකම නම භාවිතා කරන්න පුළුවන්.

Sketch එක නිවැරදිදැයි පරීක්ෂා කර අප්ලෝඩ් කරන්න, එවිට ඔබට LED දෙක එකින් එක නිවී නිවී දැල්වෙන ආකාරයට දැකගත හැකිය.

Sketch 1.3.2

ඉහත Sketch 1.3.1 ලෙස ඇති අන්තිම sketch එකේ දැක්වෙන පරිදි පහත දැක්වෙන sketch හි ලොකු වෙනසක් නැති වුනත් ෆන්ෂන් යොදා ප්‍රෝග්‍රෑම් කිරීම මගින් කේත පේලි ප්‍රමාණය අඩු කරගැනීමට අවස්ථාව ලැබේ. ඒ වගේම ප්‍රෝග්‍රෑම් එක සරලව නිර්මාණය කරගන්න පුළුවන්.

digitalWrite(led1Pin, HIGH);   // turn the LED1 on
digitalWrite(led2Pin, LOW);    // turn the LED2 off
delay(1000);                   // wait for a second

digitalWrite(led1Pin, LOW);    // turn the LED1 off
digitalWrite(led2Pin, HIGH);   // turn the LED2 on
delay(1000);

දැන් අපි ෆන්ෂන් භාවිතා කරලා ඉහත කේතනය වැඩි දියුණු කරමු.

// set pin numbers:
int led1Pin = 4;            // the number of the LED1 pin
int led2Pin = 5;            // the number of the LED2 pin

void setup() {
  // initialize the LED pin as an output:
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
}

void loop() {
  setLed(HIGH, LOW);      // set LED1 on, and LED2 off.
  setLed(LOW, HIGH);      // set LED1 off, and LED2 on.
}

void setLed(int led1, int led2) {
  digitalWrite(led1Pin, led1); // the state of LED1  
  digitalWrite(led2Pin, led2);  // the state of LED2 
  delay(1000);                 // wait for a second
}

ඉහත දක්වා ඇති sketch එකේ, LED දෙකටම අදාලව එක ෆන්ෂන් එකක් නිර්මාණය කර ඇති අතර එය  void setLed(int led1, int led2) ලෙස දැක්වේ. එහි led1 සහ led2 පරාමින් දෙකක් භාවිතයෙන් LED දෙක හසුරවනු ලැබේ.

void setLed(int led1, int led2) {
  digitalWrite(led1Pin, led1);   // the state of LED1 - variable led1.
  digitalWrite(led2Pin, led2);   // the state of LED2 - variable led2.
  delay(1000);                   // wait for a second
} 

ඉහත ෆන්ෂන් එකට කතා කළ විට එකිනෙකට වෙනස් පරාමිතීන් වල අගයන් ලබා දීමෙන් LED දෙක පාලනය කළ හැකිය. මෙහිදී අපි පරාමිතීන් සදහා ආර්ඩුයිනෝ වල ඇති HIGH සහ LOW විචල්‍යයයන් භාවිතා කරයි.

setLed(HIGH, LOW);      // set LED1 on, and LED2 off.
setLed(LOW, HIGH);      // set LED1 off, and LED2 on. 

ප්‍රෝග්‍රෑම් එක නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසු එය ආර්ඩුයිනෝ බෝර්ඩ් එක වෙත අප්ලෝඩ් කරන්න, එවිට කලින් ආකාරයටම LED දෙක එකිනෙක නිවී දැල්වෙන ආකාරය දැකගන්න පුළුවන්.

HIGH සහ LOW

යම් කිසි නම්බර් එකක්, වචනයක්, වාක්‍යක් හෝ කේත කොටසක් හදුනා ගැනීමට හෝ ඉදිරිපත් කිරීමට macro භාවිතා කරයි. HIGH සහ LOW යනු macro දෙකකි. එය පහත ආකාරයට  ආර්ඩුයිනෝ සොෆ්ට්වෙයාර් එක තුළම ඇතුළත් කර තිබේ.

#define HIGH 1
#define LOW 0

මෙම කේතනය තුළ එය ඉබේම අන්තර් ගත වේ. උදාහරණයක් ලෙස ගත විට , setLed (HIGH, LOW) කියන එක  setLed (1, 0) සමාන වේ. macro භාවිතා කිරීමෙන් ප්‍රෝග්‍රෑම් එකෙහි කේතනය සරල කරගන්න පුළුවන් වගේම එහි දී INPUT, OUTPUT වන ආකාරය හොදින් තේරුම් ගත හැකි වේ.

Sketch 1.3.3

අවසන් කොටසේ සදහන් වුයේ ෆන්ෂන් භාවිතා කර කේතනය කරන ආකාරයයි. එහිදී අපි පරාමිතීන් දෙකක් යොදාගනිමින් LED දෙක පාලනය කරන ලදි. දැන් අපි එක පරාමිති එකක් භාවිතයෙන්  LED දෙක පාලනය කරන ආකාරය බලමු. මෙහිදී අපි කලින් ඉගෙනගත් කොන්දේසි සහිත ප්‍රකාශන ක්‍රමයම භාවිතා කරයි.

දැන් අපි කොන්දේසි සහිත ප්‍රකාශන යොදාගනිමින් ඉහත ප්‍රෝග්‍රෑම් එක නැවත නිර්මාණය කරමු.

// set pin numbers:
int led1Pin = 4;            // the number of the LED1 pin
int led2Pin = 5;            // the number of the LED2 pin

void setup() {
  // initialize the LED pin as an output:
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
}

void loop() {
  setLed1(HIGH);     // set LED1 on, and LED2 off.
  setLed1(LOW);      // set LED1 off, and LED2 on.
}

void setLed1(int led1) {
  digitalWrite(led1Pin, led1);    // the state of LED1
 
  if (led1 == HIGH)               // the state of LED2    
   digitalWrite(led2Pin, LOW);    // if LED1 is turned on
  else
   digitalWrite(led2Pin, HIGH);   // if LED1 is turned off
  delay(1000);                    // wait for a second
}

ප්‍රෝග්‍රෑම් එක නිවැරදිදැයි පරීක්ෂා කිරීමෙන් පසු එය ආර්ඩුයිනෝ බෝර්ඩ් එක වෙත අප්ලෝඩ් කරන්න, එවිට කලින් ආකාරයටම LED දෙක එකිනෙක නිවී දැල්වෙන ආකාරය දැකගන්න පුළුවන්.

ක්‍රියාකාරකම 1.3

පහත දැක්වෙන ආකාරයට ට්‍රැෆික් ලයිට් කණුවක් සදහා පරිපථයක් සකස් කරන්න.

පළමු අවස්ථාවේ රතු බල්බය තත්පර 30 ක්ද දෙවන අවස්ථාවේ  රතු සහ කහ බල්බය තත්පර 2 ක්ද තුන්වන අවස්ථාවේ  කොළ බල්බය තත්පර 30 ක්ද හතරවන අවස්ථාවේ  කහ බල්බය තත්පර 2 ක්ද දැල්වෙන සේ ප්‍රෝග්‍රෑම් එකක් නිර්මාණය කරන්න.

Leave a Reply

Your email address will not be published. Required fields are marked *

Index