Rss Feed
  1. Arduino Tutorials #3 - Blink!

    Friday, December 28, 2012


    කලින් ලිපි තාම කියෙව්වේ නැද්ද?

    Arduino Tutorials #1 - Introduction
    Arduino Tutorials #2 - Config and IDE

    වෙල්කම් බැක්! දැන් එහෙනම් අපි Arduino Software එක ගැන ටිකක් දැනගෙන ඉමු.

    Arduino Software එක ප්‍රධාන කොටස් දෙකකින් සමන්විතයි. ඒ Arduino IDE ( Integrated Development Environment ) එක සහ ප්‍රධානම Core Libraries වලින්.මේ දෙකෙන් අපි ප්‍රෝග්‍රෑම් ලියන්න භාවිතා කරන්නේ Arduino IDE එකයි. ( Libraries වලින් කරන්න පුලුවන් දේවල් ගැන අපි ඉදිරි පෝස්ට් වලින් කතාකරමු. ) මේ IDE එක ලියලා තියෙන්නේ ජාවා යොදාගෙන. ඒ වගේමයි මේ IDE එක ප්‍රධාන වශයෙන්ම පදනම් වෙලා තියෙන්නේ Processing කියන Development Environment එක මතයි. මේකේ වැදගත්ම කොටස වෙන Arduino Language වෙන එක පදනම් වෙන්නේ අපි හැමෝම දන්න C සහ C# Languages දෙක මතයි. මේ Software එකේ හැම කොටසක්ම විවෘත මෘදුකාංග විදියට තමයි තියෙන්නේ.

    ඔය තියෙන දේවල් එකක්වත් අපිට Projects කරන්න කිසිම විදියකට වුවමනා වෙන්නේ නෑ. ඒ වුනාට ඉතින් හැමදේකම වටපිටාව දැනගෙන ඉන්න එක හොඳයිනේ ;)
    දැන් එහෙනම්,

    Project #1 - Blink!

    මේ ප්‍රොජෙක්ට් එක බොහොම සරලයි. අපි මේකෙදී කරන්න බලාපොරොත්තු වෙන්නේ Arduino Board එකේ Inbuilt තියෙන LED එක නිවි නිවී පත්තුවෙන්න සකස් කිරීමයි. මේ Inbuilt LED එක කිව්වේ L LED එක. ඔයගොල්ලො කලින් පෝස්ට් එක කියෙව්වනම් මේ L LED එක සවිවෙලා තියෙන්නේ Digital Pin 13 වලට කියලා මතක ඇති.. මේ Project එකේදී අපට වෙන කිසිම දෙයක් Arduino Board එකට එලියෙන් සවිකරන්න වුවමනා වෙන්නේ නෑ. Board එක තිබුනාම ඇති.


    L LED UNO
    L LED of Arduino UNO

    ඕනම Arduino programme එකක අනිවාර්‍රයෙන්ම තියෙන Structures දෙකක් තියෙනවා. ඒ තමයි "void setup ()" සහ "void loop ()" කියන Structures දෙක. අපි ලියන ප්‍රෝග්‍රෑම් එක දාන්න ඕන මේ "setup" සහ "loop" කියන කොටස් දෙක ඇතුලටයි. මේ දෙකෙන් "setup" කියන එක අපි Programme එක ස්ටාර්ට් කරාම එක පාරක් වැඩකරලා ඊළඟට "loop" කියන එකට යනවා. "loop" එක හැමදිස්සෙම ආපහු ආපහු වැඩ කරකර තමයි තියෙන්නේ. ඒ නිසා ඔයගොල්ලන්ට තේරෙනවා ඇති අපට ප්‍රෝග්‍රෑම් එකේ එකපාරක් විතරක් වෙන්න ඕන දෙවල් ටික "setup" එක ඇතුලට දාලා ඊළඟට repeat වෙන්න ඕන දෙවල් ටික "loop" එක ඇතුලට දාන්න ඕන බව..  තේරුනේ නැත්නම් දිගටම කියවගෙන යන්න...තේරුනත් දිගටම යන්න :P


    අපි දැන් අපේ ප්‍රෝග්‍රෑම් එකේ වෙන්න ඕන දෙවල්. ඒ කියන්නේ pseudo code එකක් වගේ එකක් ලියමු.( ඒ කියන්නේ අපේ ප්‍රෝග්‍රෑම් එකේ ව්‍යූහය ) දැන් අපිට අපේ Pin 13 එකේ තියෙන LED එක Blink කරන්න නම් පහල තියෙන දේවල් කරන්න ඕන.

    1) LED එක සවිකර ඇති Pin එක Pin 13 බව Arduino එකට පැවසීම.
    2) එම Pin එක Output එකක් බවට පත් කිරීම.
    3) LED එක දැල්වීම.
    4) ටික වේලාවක් බලාසිටීම.
    5) LED එක නීවීම.
    6) ටික වේලාවක් බලාසිටීම.
    7) නැවතත් අංක 3 වෙත යෑම.

    ඔය පියවරවල් ටික බැලුවාම ඔයගොල්ලන්ට බොහොම පහසුවෙන් අවබෝධ කර ගන්න පුලුවන් දෙයක් තමයි ඔතන තියෙන පියවර 1 හා 2 එක පාරක් වැඩකරාම ඇති බව. නමුත් පියවරවල් 3 සිට 7 දක්වා නැවත නැවතත් Repeat වෙන්න ඕන. ඒ නිසා අපි ඔය පියවරවල් වලින් 1 සහ 2 දානවා එක "setup" ඇතුලට. අනිත් ටික (3 සිට 7 දක්වා) දානවා "loop" එක ඇතුලට.

    දැන් අපි ලියන්න පටන්ගමු. ඉස්සෙල්ලම කරන්න ඕන අපේ ledpin එක මොකද්ද කියලා define කරන එකයි. ඒ සඳහා මම මෙහෙම ලියනවා.

    int ledpin = 13;
    

    
    
    
    
    
    
    
    
    
    
    ඔය line එකෙන් කෙරෙන්නේ Pin 13 කියන එක Int එකක් විදියට define කරන එකයි. ඊට පස්සේ අපිට හැමතැනම Pin 13 වෙනුවට ledpin කියලා කියන්න පුලුවන්. ( මෙතනදී ledpin කියලාම කියන්න අවශ්‍ය වෙන්නේ නෑ. ඔයගොල්ලන්ට කැමති නමක් දෙන්න පුලුවන්. නමුත් ඒ pin එකට අදාල නමක් දැම්මාම ඒක බොහොම පහසුවක් වෙනවා.) මේවගේ define කරන ඒවා අපි "setup" හා "loop" කියන දෙකටම කලින් කරන්න ඕන.

    දැන් ledpin එක output එකක් කරන එක අපි "setup" එක ඇතුලෙ කරන්න ඕන. ඒක මෙහෙම කරන්න පුලුවන්.


    void setup() {                
      pinMode(ledpin, OUTPUT);     
    }

    දැන් අපේ "loop" එක ආරම්භ කරන්න ඕන. ඒ සඳහා අවශ්‍ය සම්පූර්ණ කේත සටහනම මෙහෙමයි.

    void loop() {
      digitalWrite(ledpin, HIGH);
      delay(1000);
      digitalWrite(ledpin, LOW);
      delay(1000);
    }
    
    ඔතන තියෙන "digitalWrite" කියන function එකෙන් කෙරෙන්නේ අපේ outputs විදියට define කරලා තියෙන digital pins, on හරි off හරි කරන එකයි. ( HIGH කියන්නේ on කියන එකයි. LOW කියන්නේ off වලටයි )
    
    
    
    
    ඒවගේම අපි "delay" කියන function එක භාවිතා කරන්නේ අපේ programme එක වැඩකිරීම යම්කිසි වේලාවකට නවත්වා තැබීමටයි. මෙතනදී නම් LED එක ඔන් කළාට පස්සේ ආපහු LED එක off වෙන්න කලින් තත්පරයක කාලයක් LED එක on තත්වයේම තබාගැනීම delay එක මඟින් මෙතනදී සිදුකරනවා. ( delay function එකෙදී අපි delay time එක ලබාදෙන්න ඕන මිලිතත්පර වලිනුයි.  එක තත්පරයකට මිලිතත්පර 1000ක් තියෙනවා. | | 1 second = 1000 milliseconds )
    
    
    
    

    ඉතා වැදගත්! :- Arduino Language එක Case Sensitive. ඒ කියන්නේ කැපිටල් සහ සිම්පල් අකුරු හරි විදියට තියෙන්න ඕන. ඒ හින්දා මම මෙතනදී දෙන කෝඩ් එක ඒ තියෙන විදියටම ලියන්න. කැපිටල් සිම්පල් මාරු කරන්න එපා. 

    උදා : - Digitalwrite() - මේක වැරදියි.
               DigitalWrite() - මේකත් වැරදියි. 
               digitalWrite()- මේ විදිය විතරයි හරි.

    
    
    
    
    මෙතනදී අපි අපේ "loop" එක ඇතුලේ තියෙන කෝඩ් එක repeat  වෙන්න කියලා කියන්න අවශ්‍ය වෙන්නෙ නෑ. "loop" එක ඇතුලේ තියෙන දේවල් ටික ක්‍රියාත්මක (execute) වෙලා ඉවරවුනාට පස්සේ ආපහු එයාම "loop" එකේ ආරම්භයට යනවා.
    
    
    මේ තියෙන්නේ අපේ සම්පූර්ණ ප්‍රෝග්‍රෑම් එක!

    int ledpin = 13;
    
    void setup() {                
      pinMode(ledpin, OUTPUT);     
    }
    
    void loop() {
      digitalWrite(ledpin, HIGH);
      delay(1000);
      digitalWrite(ledpin, LOW);
      delay(1000);
    }
    
    
    
    
    දැන් අපේ ප්‍රෝග්‍රෑම් එක සම්පූර්ණයි! දැන් ඉතින් Arduino IDE එකේ තියෙන Upload Button එක ඔබලා ප්‍රෝග්‍රෑම් එක බෝඩ් එකට upload කරන්න. 

    
    
    Upload Button Position
    Upload Button
    වැඩේ සාර්ථකව කළානම් L LED එක නිවී නිවී පත්තු වෙන්න ඕන. මේ වීඩියෝ එක බලන්න.

    
    

    
    
    
    
    
    
    
    
    එහෙනම් අදට පෝස්ට් එක ඉවරයි. අපි ඊළඟ පෝස්ට් එකෙන් නයිට් රයිඩර් පරිපථයක් හදන විදිය හා Analog Inputs/Controls ගැන ඉගෙනගමු, ඒ දෙකම එකට යොදාගෙන ප්‍රොජෙක්ට් එකකුත් කරමු!. මෙතෙක් කරපු දේවල් මොනව හරි ප්‍රශ්නයක් තියෙනවනම් යටින් කමෙන්ට් කරන්න.. :))
    |


  2. 6 comments:

    1. Anonymous said...

      digatama karagena yan.. godaka aya me wedeta kemathi..

    2. Anonymous said...

      good work and great social work and very clear explanation.

    3. අයියෝ තාම මගේ Arduino එක නෑ අප්පා... :'(

    4. Anonymous said...

      ei program eka uplode karanakota mehema error ekak enne?
      " avrodude: stk500_getsync(): not in sync: resp=0x00"
      mokakda mekata hethuwa? kohomada meka hadanne?

    5. Anonymous said...

      එල කොල්ලෙක්නේ දිගටම ලියන්න.........
      http://arduino.cc/forum/index.php?action=forum
      තනියෙන්වුනත් ඉගෙනගත්තහැකි

    6. @ Anon 1 & 2 - Thank You!

      @ Sahan Weerasinghe - :P

      @ Anon 3 - ඔය Error එක එන්නේ අපි හරියට Configure කරල නැති වුනාමයි. තමන්ගේ බෝඩ් එකයි පෝට් එකයි හරිද කියලා ආපහු චෙක් කරල බලන්න.

      @Anon 4 - (y)

    Post a Comment