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

5:59 PM


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 එකේ අඩුපාඩු හරි අදහස් හරි තියෙනවනම් කමෙන්ට් කරගෙන යන්න.



Share this

Related Posts

Previous
Next Post »

24 comments

Write comments
September 17, 2016 at 8:51 PM delete

කියලා වැඩක් නෑ හදවතින්ම සුබ පතනවා

Reply
avatar
September 17, 2016 at 8:56 PM delete

කියලා වැඩක් නෑ හදවතින්ම සුබ පතනවා

Reply
avatar
September 18, 2016 at 6:58 AM delete

සීරියල් ඩේටා අගයක් micro servo එකකට ගන්නෙ කොහොමද?(150 දුන්නොත් 150' කට කරකැවෙන්න)

Reply
avatar
September 18, 2016 at 11:18 AM delete This comment has been removed by the author.
avatar
September 18, 2016 at 11:20 AM delete

#include
Servo myservo;
int val;
void setup(){
myservo.attach(9);
Serial.begin(9600);
}
void loop(){
if (Serial.available()>0){
val = Serial.parseInt();
val = map(val, 0, 179, 0, 179);
myservo.write(val);
delay(15);
}
}

කෝඩ් එක චෙක් කරලා බැලුවේ නෑ. අව්ලක් තියෙනවනම් කියන්න.

Reply
avatar
September 18, 2016 at 11:21 AM delete

#include විදිහට හදාගන්න

Reply
avatar
September 18, 2016 at 11:25 AM delete

Servo library eka import kargnna udadhii...

Reply
avatar
September 19, 2016 at 9:03 PM delete


Yashodha Ayya digatama karagena yamu (y). samahara aluth wachana nam tikak therenwa adui :D

Reply
avatar
September 20, 2016 at 7:09 PM delete

mona wage ewada? ona ekak ahanna kiyala dennam...

Reply
avatar
September 25, 2016 at 12:15 AM delete

pahadiliwa tiyenawa ....jaya wewa

Reply
avatar
October 17, 2016 at 9:57 PM delete

hello Yashoda, honda tutorials tikak, arduino igena ganna ayata honda athwalak wei. led design keepyak eka loop eka yatathe liyanne kohomada if / else function eken? mama code eka liwwa thawa site ekekain balala, but was no declared kiyala watenawa.....pahadili kirimak kaloth hondai.

Reply
avatar
October 18, 2016 at 2:53 PM delete

code eka FB inbox hari comment hari karanna. balala kiyannm....

Reply
avatar
December 6, 2017 at 11:52 PM delete

vedagath tutorial ekak.thanks Yashodha.

case use karala push button ekakin diga program ekaka step skip karanna puluwanda? ehema nethnam program eka run wen athare stop karala wena step ekakata yanna puluwanda?

Reply
avatar
December 9, 2017 at 7:40 AM delete

ow. hardware interrupt ekak use krala ehema krnna puluwan

Reply
avatar
Anonymous
March 8, 2018 at 8:06 AM delete

machan methana if example eke palaweni para ON command eka dila LED eka paththu kalata passe aye mona wachane gehuwath LED eka off wenne neththe ei ekaparaka condition eka true unata passe loop wenne nedda etapasse digatama condition eka ethuleda inne

Reply
avatar
March 8, 2018 at 5:55 PM delete

ehema wenna widihaak na off wenna one
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);
}
}
}
oya code eka dala blnna off wenna one

Reply
avatar
April 20, 2018 at 4:44 PM delete

Thanks hama deyak ma harima watinawa......oya arduino classes karanne nadda.....pls karanawanam kiyanna mata class ekakata enna oone.class karanawanam mata mail ekak ewanna pls . vijitha1234@yahoo.com

Thanks

Reply
avatar
saman
January 9, 2019 at 3:28 PM delete

Harima pahediliy malli.Oyata pin.Oya nomile me danima labadunnata wena than wala dahas ganan ayakarala me danuma laba denne.Eth metharam pahadiliwa kiyala denne naha.Thank you.

Reply
avatar
April 7, 2020 at 10:46 AM delete

නියමයී සහෝ....ගොඩක් වටිනවා...

Reply
avatar
October 11, 2021 at 11:03 PM delete

Woow!!! Niayama wadak bro meeka... Good luck... digatama karagena yanna...

Reply
avatar

ඔයාලගේ අදහස් උදහස් තමයි අපිව දිරිගන්වන්නෙ෴ EmoticonEmoticon