ARDUINO sinhala tutorial

 

ප්‍රථම ආර්ඩීනෝ සැකැස්ම වර්ෂ දෙදහස් පහේදී  ඉතාලියේ ඉව්රියා නගරයේ බිහිවන අතර මෙය ඊට පෙර බිහිවූ වයරින් උපකරණයේ වැඩි දියුණු කල අවස්ථාවකි . මෙය නිපදවීමට මුල් වූ MASSIMO BANZI ඇතුළු කණ්ඩායම සිසුන් සදහා භාවිතා කල හැකි කුඩා , මිල අඩු මයික්‍රෝ කොන්ට්‍රෝලර් පද්ධතියක් සැලසුම් කිරීමේ උත්සාහයක නිරතවී සිටි අතර ඔවුන්ගේ උත්සාහය මල් පල ගැන්වීමේ ප්‍රතිපලයක් ලෙස මෙම පද්ධතිය ඉතා අඩු මුදලකට අප වෙත ලැබී තිබේ . තවද නිදහස් මෘදුකාංග බලපත්‍ර යටතේ නිකුත් කර ඇති නිසා මෙම උපකරණය ඕනෑම කෙනෙකුට අවශ්‍ය ලෙස වෙනස් කල හැක


                                  MASSIMO BANZI ඇතුළු ආර්ඩීනෝ කණ්ඩායම

මෙවන් පසු බිමක් තුල ආර්ඩීනෝ උපකරණයේ වෙනස් ආකාර විශාල සංඛ්‍යාවක් පවතින අතර ඒවා යනාදී විවිධ නම් වලින් හැදින්වේ . ආර්ඩීනෝ උපකරණයද ඒවායේ විවිධ ශක්‍යතාවයන් මත විවිධ ප්‍රමාණ වලින් පැමිණෙන අතර මෙම ග්‍රන්ථයෙන් බහුලව සහ අඩු මිලකින් එන  ආර්ඩීනෝ ඌනෝ සංවර්ධන උපකරනය ගැන සලකා බලමු .


 

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

  • ·  මෙගා හර්ට්ස් දහසයක දෝලයකයකින් ක්‍රියාත්මක වන ඇට්මෙගා 328 මයික්‍රෝ කොන්ට්‍රෝලරය.
  • ·      වෝල්ට් පහ (5) සහ තුනයි දශම තුන (3.3) ද්විත්ව ක්‍රියාකාරීත්වය .    
  • ·      ඩිජිටල් ඉන්පුට් සහ අවුට්පුට් දහ හතරක් ( මෙයින් හයක් පී.ඩබ්ලිව්.එම් ලෙස යොදා ගත හැක )
  • ·      ඇනලොග් ඉන්පුට් හයක් .
  • ·      කිලෝ බයිට් තිස්දෙකක ප්‍රෝග්‍රෑම් මෙමරිය .
  • ·       කිලෝ බයිට් එකක රැම් මතකය .

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



ආර්ඩීනෝ අයි.ඩී.ඊ භාවිතා කර ඛේත ලිවීම

ආර්ඩීනෝ අයි.ඩී.ඊ භාවිතා කර ලියා ගන්නා ඛේත අපි විසින් ස්කෙච් යන නමින් හදුන්වන අතර සාම්පල් ස්කෙච් විශාල ප්‍රමාණයක් ආර්ඩීනෝ අයි.ඩී.ඊ සමගම පැමිණ තිබේ.අපි මෙයින් මුලික ස්කෙච් එකක් සලකා බලමු .මුලින්ම ආර්ඩීනෝ ලෝගෝ එක ඩබල් ක්ලික් කර ප්‍රෝග්‍රෑම් එක සක්‍රීය කර ගන්න.





ඉන් පසු (Basics > Blink) ආධාරයෙන් පහත ස්කෙච් එක ලබා ගන්න .මෙමගින් ඔබගේ ආර්ඩීනෝ බෝර්ඩ් එක මත ඇති එල් .ඊ .ඩී එක නිවී නිවී දැල්වීමට ලක් කරයි.මෙම එල් .ඊ .ඩී එක බෝර්ඩ් එක මත අකුරින් දක්වා ඇති අතර දහ තුන් වන අවුට් පුට් අග්‍රයට සම්භන්ද කොට ඇත.









මෙම ස්කෙච් එක ලියා ඇත්තේ තත්පරයක කාල පමාවක් සහිතව එල් .ඊ .ඩී එකක් නිවී නිවී දැල්වීමට ලක් කිරීමටයි.අපි දැන් මෙය ආර්ඩීනෝ බෝර්ඩ් එකට අප් ලෝඩ් කරන ආකාරය සලකා බලමු.




මුලින්ම ( බෝර්ඩ් > ආර්ඩීනෝ ඌනෝ ) තුලින් ඔබට අවශ්‍ය බෝර්ඩ් එක ( මෙහිදී ඌනෝ ) තෝරා ගන්න .ඉන්පසුව බෝර්ඩ් එක සවිවී ඇති කොම් පොර්ට් එක තෝරා ගත යුතුය .ඔබ යූ .එස් .බී පොර්ට් එක භාවිතා කරන්නේ නම් කොම් පොර්ට් එක ස්වයංක්‍රීයවම තේරී තිබෙනු දැකිය හැකිවේ .ඉන් පසු අප්ලෝඩ්  යන බොත්තම තද කිරීම තුලින් ඔබ ලියු ස්කෙච් එක ස්වයංක්‍රීයවම කම්පයිල් වී චිප් එකට ෆ්ලෑෂ් වීම සිදු වෙයි.


 

සාර්ථකව කොම්පයිල් වී අප්ලෝඩ් වීම සිදු වී නම් මෙවැනි පණිවිඩයක් දිස්වන අතර ඔබගේ බෝර්ඩ් එකේ ඇති ඔන්බෝර්ඩ් එල් . ඊ . ඩී එක ඔබ ලබා දුන් කාල පමාවට අනුව නිවී නිවී දැල්විය යුතුය .

ස්කෙච් එක පැහැදිලි කර ගනිමු

 

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */

 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  
// initialize the digital pin as an output.
  
pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  
delay(1000);               // wait for a second
  
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  
delay(1000);               // wait for a second
}

 

කමෙන්ට්ස්

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */

 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:

මෙම ආකරයට /* හෝ  // සංඛේත අතර ලියන දෑ කමෙන්ට්ස් වශයෙන් හැදින්වේ.මෙම කමෙන්ට්ස් ප්‍රෝග්‍රෑම් එකට කිසිම බලපෑමක් නොකරන අතර තමා ලියමින් පවතින ඛේතය පිළිබද සටහන් තැබීමට භාවිතා කරයි.  

 

int led = 13;

මෙයින් ප්‍රකාශ කරන්නේ led යන නමින් ඉන්ටිජර් වර්ගයේ විචල්‍යක් තිබෙන බවත් එහි අගය දහ තුනට සමාන කරන බවත්ය. ඔබගේ බෝර්ඩ් එකේ ඇති ඔන්බෝර්ඩ් එල් . ඊ . ඩී එක සවි කර ඇත්තේ දහතුන් වන අග්‍රයට බැවින් මෙම අගය ලබා දී ඇත.

 

විචල්‍ය

ක්‍රම ලේකනය ක්‍රියාත්මක වන අතර තුර සිදු කරන ගණනය කිරීම් වල ප්‍රතිපල තාවකාලිකව රදවා ගැනීම සදහා විචල්‍ය භාවිතා වේ .මෙහිදී ඔබට අවශ්‍ය සංඛ්‍යාවේ විශාලත්වය අනුව තෝරා ගැනීමට විචල්‍ය වර්ග කීපයක් ඇති අතර විචල්‍ය තොර ගැනීමේදී නිවැරදි විචල්‍ය තෝරා  ගැනීමට ප්‍රවේසම් විය යුතුය . විචල්‍යයක් නම් කරන සෑම විටකම ඒ සදහා රැම් ඉඩක් වෙන් කරන බැවින් වැරදි විචල්‍ය තෝරා ගැනීමෙන් සීමිත රැම් ඉඩ අපතේ යාමට පුළුවන . ආර්ඩීනෝ විචල්‍ය වර්ග කීපයකට සහය දක්වයි. ඒවා නම්

·      බූලියන් - බිට් එකක ඉඩක් ලබා ගනී .තර්ක එක හෝ බින්දුව ගබඩා කල හැක

·      බයිට් -  බිට් අටක ඉඩක් ලබා ගනී . බින්දුවේ සිට දෙසිය පනස්පහ දක්වා අගයන් ගබඩා කර ගනී .

·      චාර් -  බිට් අටක ඉඩක් ලබා ගනී . බින්දුවේ සිට දෙසිය පනස්පහ දක්වා අගයන් ගබඩා කර ගනී . -128 සිට 128 දක්වා අගයන් නිරුපනය කරයි.

·      ඉන්ටිජර්  - මේවා බයිට් දෙකක ( බිට් දහසයක ) පළලින් යුක්තය -32768 සිට 32768 දක්වා අගයන් ගබඩා කර ගනී .

·      ලෝන්ග් - මේවා බයිට් හතරක (බිට් තිස්දෙකක ) පළලින් යුක්තය.   

 -2,147,483,648  සිට  2,147,483,647 දක්වා අගයන් නිරුපනය කරයි.

·      ෆ්ලොට් - දශම ස්ථාන සහිත සංඛ්‍යා සදහා භාවිතා කරයි .

- 3.4028235E+38 සිට  3.4028235E+38 දක්වා අගයන් නිරුපනය කරයි.

විචල්‍ය ප්‍රකාශ කිරීම (VARIABLE DECLARATION)

අප විසින් කලින් සලකා බැලූ උදාහරණයේ පරිදි විචල්‍ය ප්‍රකාශ කිරීම පහත පරිදි කල හැක .

int ledPin = 13;

byte b = B10010;  // "B" is the binary formatter (B10010 = 18 decimal) 
 

විචල්‍යය හා විචල්‍ය තෝරා ගැනීමේ වැදගත්කම ඔබ හට අවබෝධ වන්නට ඇතැයි සිතමි .ඛේතයේ මීලග කොටස සලකා බැලූ විට .....

 

void setup() {                
  
// initialize the digital pin as an output.
  
pinMode(led, OUTPUT);     
}

සෙටප් ෆන්ෂන් එක

ආර්ඩීනෝ අයි.ඩී.ඊ  තුල ක්‍රමලේකනය සදහා බොහෝ විට සී භාෂාවේ හැඩය භාවිතා කරයි. සී භාෂාවේ මෙවන් කොටස් ෆන්ෂන් නමින් නම් කරන අතර ෆන්ෂන් එකක් යනු කුඩා ක්‍රියාකාරී ඛේත කොටසකි.මෙම සෙටප් ෆන්ෂන් එක මගින් මෙහිදී එල්.ඊ.ඩී නමින් අපි නම් කර ගත පින් එක අවුට් පුට් පින් එකක් ලෙස කන්ෆිගර් කර ගැනීම සිදු වෙයි.  ෆන්ෂන් එකක් ලිවීමේදී පිළිපැදිය යුතු නීති කීපයකි ඒවා නම්

සියලුම ඛේත කොටස් { සලකුණින් ආරම්භ විය යුතු අතර } සලකුණින් අවසන් විය යුතුය . 

ඔබ භාවිතා කරන සියලුම ෆන්ශන් ප්‍රධාන ඛේතයට පෙර ප්‍රකාශ (DECLARE) කල යුතු අතර එසේ කරන විට පහත පිළිවෙල අනුගමනය කල යුතුය .

 

  1. FUNCTION NAME
  2. FUNCTION BODY
  3. LIST OF PARAMETERS
  4. DECLARATION OF PARAMETERS
  5. TYPE OF FUNCTION RESULTS

 

එනම්

 

පිළිතුරෙහි විචල්‍ය වර්ගය  ඛේතයේ නම (විචල්‍ය ප්‍රකාශය 1 , විචල්‍ය ප්‍රකාශය 2 )

 

 {

 

 විධානය

 විධානය

 විධානය

..........

  }

 

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

 

pinMode(led, OUTPUT);     

 

ලූප් ෆන්ෂන් එක

void loop() {
  
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  
delay(1000);               // wait for a second
  
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  
delay(1000);               // wait for a second
}

 

ඔබගේ ඛේතයේ නොකඩවා ක්‍රියාත්මක විය යුතු කොටස් මෙම ෆන්ෂන් එක තුල ලියවිය යුතුයි.

 

 

digitalWrite(led, HIGH);

මෙම පේලිය මගින් ඔබ නම් කල අග්‍රයේ තර්ක තත්වය තර්ක එක ( LOGIC ONE ) වෙත ගෙන එන බැවින් දහතුන් වන ප්‍රතිදනයට අමුනා ඇති එල් .ඊ.ඩී බල්බය දැල්වී තිබේ .

digitalWrite(led, LOW);

මෙම පේලිය මගින් ඔබ නම් කල අග්‍රයේ තර්ක තත්වය තර්ක  ( LOGIC ZERO ) වෙත ගෙන එන බැවින් දහතුන් වන ප්‍රතිදනයට අමුනා ඇති එල් .ඊ.ඩී බල්බය නිවී යයි .

delay (1000);               // wait for a second

කාල පමාව (Delay)

ඔබගේ බෝර්ඩ් එකේ ඇති ක්‍රිස්ටල් එකෙහි සංඛ්‍යාතය මෙගා හර්ට්ස් දහසයක් වේ .මෙමගින් අදහස් කරන්නේ බෝර්ඩ් එකේ ඇති මයික්‍රෝ කොන්ට්‍රෝලරය තත්පරයකට විධාන මිලියන දහසයක් ක්‍රියාත්මක කරන බවය ( 16 M.I.P.S ) .තවත් අකාරයකට කිවහොත් විධානයක් ක්‍රියාත්මක කිරීමට යන කාලය 1/16x10-6 වේ . මේසා කුඩා කාලයක් කරන එල්.ඊ.ඩී  නිවීම සහ දැල්වීම කෙරෙහි මනුෂ්‍ය දෙනෙත් කිසි විටකත් සංවේදී නොවේ .එම නිසා ඒ අතරට කාල පමාවක් යෙදීමෙන් එල්.ඊ.ඩී  නිවීම සහ දැල්වීම පැහැදිලිව දැක ගත හැක .











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


.එල් ඊ ඩී වමට ගලා යාම

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

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


                                              පරිපථ  සටහන 


*

 */

// The setup() method runs once, when the sketch starts

int del=100; // sets a default delay time, 100 milliseconds (one tenth of a second)

void setup()

{

  // initialize the digital pins as outputs:

  // later on there will be easier ways to do this

  pinMode(2, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(5, OUTPUT);

  pinMode(6, OUTPUT);

  pinMode(7, OUTPUT);

  pinMode(8, OUTPUT);

  pinMode(9, OUTPUT);

}

// the loop() method repeats indefinitely until you turn off the power

void loop()

{

  digitalWrite(2, HIGH);   // turn on LED on pin 2

  delay(del);   // wait (length determined by value of 'del')

  digitalWrite(2, LOW);    // turn it off

  digitalWrite(3, HIGH);   // turn on LED on pin 3

  delay(del);              // wait

  digitalWrite(3, LOW);    // turn it off

  digitalWrite(4, HIGH);   // turn on LED on pin 4

  delay(del);              // wait

  digitalWrite(4, LOW);    // turn it off

  digitalWrite(5, HIGH);   // turn on LED on pin 5

  delay(del);              // wait

  digitalWrite(5, LOW);    // turn it off

  digitalWrite(6, HIGH);   // turn on LED on pin 6

  delay(del);              // wait

  digitalWrite(6, LOW);    // turn it off

  digitalWrite(7, HIGH);   // turn on LED on pin 7

  delay(del);              // wait

  digitalWrite(7, LOW);    // turn it off

  digitalWrite(8, HIGH);   // turn on LED on pin 8

  delay(del);              // wait

  digitalWrite(8, LOW);    // turn it off

  digitalWrite(9, HIGH);   // turn on LED on pin 9

  delay(del);              // wait

  digitalWrite(9, LOW);    // turn it off

  digitalWrite(8, HIGH);   // turn on LED on pin 8

  delay(del);              // wait

  digitalWrite(8, LOW);    // turn it off

  digitalWrite(7, HIGH);   // turn on LED on pin 7

  delay(del);              // wait

  digitalWrite(7, LOW);    // turn it off

  digitalWrite(6, HIGH);   // turn on LED on pin 6

  delay(del);              // wait

  digitalWrite(6, LOW);    // turn it off

  digitalWrite(5, HIGH);   // turn on LED on pin 5

  delay(del);              // wait

  digitalWrite(5, LOW);    // turn it off

  digitalWrite(4, HIGH);   // turn on LED on pin 4

  delay(del);              // wait

  digitalWrite(4, LOW);    // turn it off

  digitalWrite(3, HIGH);   // turn on LED on pin 3

  delay(del);              // wait

  digitalWrite(3, LOW);    // turn it off

}

මෙහිදී අපි විසින් එල් ඊ ඩී වමට ගැලීම සදහා  ස්කෙච් එකක් ලිය ඇති ඇති අතර මේ සදහා තරමක් ඍජු ප්‍රවිශ්ටයක් යොදා ගෙන තිබේ . අපි මෙය පියවරෙන් පියවර සලකා බැලුවහොත්

  */

// The setup() method runs once, when the sketch starts

int del=100; // sets a default delay time, 100 milliseconds (one tenth of a second)

del නමින් ඉන්ටිජර් ටයිප් වෙරියබල් එකක් ප්‍රකාශ කර ඇති අතර මෙයට සියයක අගයක් ලබා ඩී ඇත . මෙය ඩිලේ එක සදහා භාවිතා කරයි.

 

 

 

 

void setup()

{

 

  pinMode(2, OUTPUT);

සෙට් අප් ලූප් එක තුල පින් මෝඩ්  විධානය භාවිතයෙන් දෙකේ සිට නවය දක්වා සියලුම අග්‍ර අවුට් පුට් ලෙස කන්ෆිගර් කර ඇත .

void loop()

{

  digitalWrite(2, HIGH);   // turn on LED on pin 2

  delay(del);   // wait (length determined by value of 'del')

  digitalWrite(2, LOW);    // turn it off

ඉන් පසු දෙවැනි අග්‍රයේ සිට නව වෙනි අග්‍රය දක්වා කාල පමාවක් සහිතව සක්‍රීය කිරීම සහ අක්‍රීය කිරීම මගින් එල් ඊ ඩී ගලා යන ආකාරයක් ලබා ගත හැක .

අප්ලෝඩ් කර පරීකෂා කර බලන්න . අභ්‍යාසයක් වශයෙන්  මෙම ස්කෙච් එක දකුණට ගලන පිලිවලට වෙනස් කර අප්ලෝඩ් කර පරීක්ෂා කර බලන්න.

 

එල් .ඊ .ඩී  දෙපසට ගලා යාම

දැනටමත් මෙම ක්‍රමය අනුගමනය කිරීම මගින් එල් ඊ ඩී දෙපසට ගලා යාමේ ඛේතයක් ලිවීමට ඔබට පුළුවන් කම ලැබී ඇති. මෙහි යොදා ඇති ඍජු ක්‍රම වේදය වෙනුවට සී භාෂාවේ නැඹුරුව සහිත ක්‍රමවේදයක් යොදා ගැනීමට අපි උත්සහ කරමු . 

 

// modified knight rider with advance c functions//

 

int ledPins[]={2,3,4,5,6,7,8,9};

 

void setup()

{

  for (int i =0; i <8; i++)

  {

    pinMode(ledPins[i],OUTPUT);

  }

}

 

void loop()

{

  int i = 0;

  while (i<7)

  {

    {

      digitalWrite(ledPins[i],HIGH);

      delay(100);

      digitalWrite(ledPins[i],LOW);

      i++;

    }

  }

 

  i = 7;

  while (i >0)

  {

    digitalWrite(ledPins[i],HIGH);

    delay(100);

    digitalWrite(ledPins[i],LOW);

    i--;

  }

}

 

මෙම කෝඩින් එකේදී පළමුව යන නමින් ඉන්ටිජර් වර්ගයේ ඩේටා ඇරේ එකක් ප්‍රකාශ කර ගනිමු.

int ledPins[]={2,3,4,5,6,7,8,9};

ඇරේස්

 

එකිනෙකට සම්බන්ධ දත්ත අයිතම එකම මෙමරි  බ්ලොක් එකක් යටතේ ගබඩා කිරීමට  භාවිතා කරයි. ඇරේ එකක් ප්‍රකාශ කිරීමට වර්ගය, නම සහ ඒ යටතේ භාවිතා වන මූලයන් ගණන ප්‍රකාශ කල යුතුය.

 

උදාහරණ

 

     int myInts[6];
  int myPins[] = {2, 4, 8, 3, 6};
  int mySensVals[6] = {2, 4, -8, 3, 2};
  char message[6] = "hello";

 


මෙහිදී මූලයන්  පහක අරාවක් ඇති අතර පළමු මූලය බින්දුවද අවසන් මූලය හතරද වේ. මේ අතර ඇති සියලූම අයිතමයන් අනුයාත ලෙස මෙමරිය තුළ පිහිටයි.

 

උදාහරණ

 

TOTAL[0]

TOTAL[1]

TOTAL[2]

TOTAL[3]

TOTAL[4]

unsigned int  Total[5]

 

 

 

 

 ඉන් පසුව ෆෝ ලූප් එකක් භාවිතයෙන් පින් සියල්ලම අවුට් පුට් වශයෙන් කන්ෆිගර් කරයි.


‍ෆෝ ප්‍රකාශනය

 මෙහිදී පළමු කොටසින් මෙය සඳහා භාවිතා කරන විචල්‍යයන් ඉනීෂල්යිස් කරන අතර ඉන් පසුව කොන්දේසිය  පරීක්ෂා කරයි. තෙවන කොටසින් ලූප් එක පරීක්ෂා කරයි. කොන්දේසිය සංතෘප්ත වන තුරු මෙය සිදුවේ. කොන්දේසි රහිත ‍ෆෝ  ලූප් එකක් ( FOR(;;) ) නොනවතින ලුප් එකක් එකක් ආකාරයෙන් හැසිරේ.

 

 

{

  for (int i =0; i <8; i++)

  {

    pinMode(ledPins[i],OUTPUT);

  }

}

 

I නම් විචල්‍ය මුලින්ම බිදුව බවට පත් කරන අතර එය අටට නො අඩු වන තාක් ( i <8;)  එහි අගය එකින් එක වැඩි කරනු ලබයි (i++).මෙය කොම්පවුන්ඩ් එරිත්මැටික් ඔපරේටර් වර්ගයට අයිති ක්‍රියාකාරකමකි .ඉන්පසුව I වල අගය එල් ඊ ඩී පින්ස් නම් විචල්‍යයට ආදේශ කල විට ස්වයංක්‍රීයවම එකේ සිට අට දක්වා අගයන් එල් ඊ ඩී පින්ස් නම් විචල්‍යයට ආදේශ වේ (pinMode(ledPins[i],OUTPUT));.

දැන් පින් සියල්ලම අවුට් පුට් ලෙස කන්ෆිගර් වී ඇති බැවින් ... 

 

void loop()

{

  int i = 0;

  while (i<7)

  {

    {

      digitalWrite(ledPins[i],HIGH);

      delay(100);

      digitalWrite(while (i<7)LOW);

      i++;

    }

  }

 

 වයිල් කොන්දේසිය

මෙහිදී වයිල් කොන්දේසිය අසත්‍ය වන තුරු වයිල් ප්‍රකාශය ක්‍රියාත්මක වීම සිදුවේ. ලුප් සඳහා බහුලව පාවිච්චි කරයි. කොන්දේසි රහිත වයිල් ලුප්  එකක් while(1) නොනවතින ලුප් එකක් ආකාරයෙන් හැසිරේ. මෙම ලූප් එක i වල අගය හතට වඩා අඩු වී තිබෙන තාක් එකින් එක වැඩි වන නිසා ( i++;) ( එනම් හත් වරක් ) ක්‍රියාත්මක වේ . තවද i වල අගය ledPins[i]වලට ආදේශ කිරීමෙන් එකේ සිට හත දක්වා එල් ඊ ඩී පිලිවෙලින් දැල්වී නිවී යයි.

 

     

digitalWrite(ledPins[i],HIGH);

delay(100);

digitalWrite(while (i<7)LOW);

 

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

 

ආර්ඩීනෝ ඔපරේටර්ස්

ඔපරේටෙර්ස් යනු යම් කිසි ගණිතමය , තාර්කික හෝ වෙනත් ආකාරයක 
ක්‍රියාවක් කිරීමට තැනුණු ක්‍රම වේදයකි. ආර්ඩීනෝ මෘදුකාංගය පහත 
දැක්වෙන  ඔපරේටෙර්ස් සදහා සහය දක්වයි

·      එරිත්මැටික් ඔපරේටර්ස්

·      කම්පැරිසන් ඔපරේටර්ස් 

·      බුලියන් ඔපරේටර්ස් 

·      බිට්වයිස් ඔපරේටර්ස්

·      පොයින්ටර් ඇක්සෙස් ඔපරේටර්ස්

·      කොම්පව්න්ඩ් ඔපරේටර්ස් 

 

එරිත්මැටික් ඔපරේටර්ස්

ආර්ඩීනෝ මෘදුකාංගය පහත දැක්වෙන එරිත්මැටික් ඔපරේටර්ස් සදහා සහය දක්වයි

 

·   = (assignment operator)

·   (addition)

·   - (subtraction)

·   * (multiplication)

·   / (division)

·   % (modulo)

 

අසයින්මන්ට් ඔපරේටර්  (assignment operator)

මෙහිදී  සමාන කිරීමේ ලකුණක් හරහා දකුණු පස  ඇති විචල්‍යයක හෝ යම් කිසි ක්‍රියාකාරකමක අගය වම් පස ඇති  විචල්‍යයකට ආදේශ කරයි.

උදාහරණ

 int sensVal;       // declare an integer variable named sensVal
sensVal = analogRead(0);  // store the (digitized) input voltage 
at analog pin 0 in SensVal

 

එකතු කිරීම (addition)

විචල්‍යය දෙකක ඇති අගයන් එකතු කොට පිළිතුර තවත් විචල්‍යක ගබඩා කරයි. උදාහරණ

y = y + 3;

අඩු කිරීම  (subtraction)

විචල්‍යය දෙකක ඇති අගයන් ගෙන් එකකින් එකක්  අඩු කොට තවත් පිළිතුර විචල්‍යක ගබඩා කරයි. උදාහරණ

y = y - 3;

ගුණ කිරීම (multiplication)

විචල්‍යය දෙකක ඇති අගයන් ගෙන් එකකින් එකක් ගුණ  කොට පිළිතුර තවත් විචල්‍යක ගබඩා කරයි. උදාහරණ

y = y * 3;

බෙදීම (division)

විචල්‍යය දෙකක ඇති අගයන් ගෙන් එකකින් එකක් බෙදා පිළිතුර තවත් විචල්‍යක ගබඩා කරයි. උදාහරණ

y = y / 3;

මොඩියුලෝ (modulo)

පුර්ණ සංඛ්‍යා බෙදීමකින් ඉතිරි අගය ගෙන දැක්වයි. උදාහරණ

x = 7 % 5;   // x now contains 2
x = 9 % 5;   // x now contains 4
x = 5 % 5;   // x now contains 0
x = 4 % 5;   // x now contains 4
 
කම්පැරිසන් ඔපරේටර්ස්  
 
සංසන්ධනය සඳහා භාවිතා කරයි. සංසන්ධනය කල පසු පිළිතුර සත්‍ය  නම්
තර්ක එක (ලොජික් වන්) ද අසත්‍ය නම් තර්ක බින්දුව (ලොජික් සිරෝ)
ආපසු ලබා  දේ .ආර්ඩීනෝ භාෂාව තුල භාවිතා වන කම්පැරිසන් ඔපරේටර්ස්
වර්ග මෙසේ වේ   
 

·   == (equal to)

·   != (not equal to)

·   <   (less than)

·   >   (greater than)

·   <= (less than or equal to)

·   >= (greater than or equal to)

 
සමානතාවය පරීක්ෂා කිරීම  (equal to)
 
මෙහිදී ඉෆ් කොන්දේසියක් හරහා යම් විචල්‍යක අගය පරීක්ෂා කොට එම 
අගය ඔබට අවශ්‍ය අගයට සමාන නම් ක්‍රමලේකනයේ ගැලීමේ වෙනසක් කල 
හැක .

උදාහරණ

if (x == 10)
digitalWrite(LEDpin, HIGH); 
 

අසමානතාවය පරීක්ෂා කිරීම  (not equal to)

මෙහිදීද ඉෆ් කොන්දේසියක් හරහා යම් විචල්‍යක අගය පරීක්ෂා කොට එම 
අගය ඔබට අවශ්‍ය අගයට අසමාන නම් ක්‍රමලේකනයේ ගැලීමේ වෙනසක් කල
හැක 

උදාහරණ

if (x != 10)
digitalWrite(LEDpin, HIGH); 

 

කුඩා බව පරීක්ෂා කිරීම  (less than)

 

මෙහිදීද ඉෆ් කොන්දේසියක් හරහා යම් විචල්‍යක අගය පරීක්ෂා කොට එම 
අගය ඔබට අවශ්‍ය අගයට වඩා කුඩා නම් ක්‍රමලේකනයේ ගැලීමේ වෙනසක් කල
හැක 

උදාහරණ

if (x < 10)
digitalWrite(LEDpin, HIGH); 
 

 

 

විශාල බව පරීක්ෂා කිරීම  (greater than)

 

මෙහිදීද ඉෆ් කොන්දේසියක් හරහා යම් විචල්‍යක අගය පරීක්ෂා කොට එම 
අගය ඔබට අවශ්‍ය අගයට වඩා විශාල නම් ක්‍රමලේකනයේ ගැලීමේ වෙනසක් 
කල හැක 

උදාහරණ

if (x > 10)
digitalWrite(LEDpin, HIGH); 
 
 

කුඩා හෝ සමාන  බව පරීක්ෂා කිරීම  (less than or equal to)

 

මෙහිදීද ඉෆ් කොන්දේසියක් හරහා යම් විචල්‍යක අගය පරීක්ෂා කොට එම 
අගය ඔබට අවශ්‍ය අගයට වඩා කුඩා හෝ සමාන නම් ක්‍රමලේකනයේ ගැලීමේ
වෙනසක් කල හැක .

උදාහරණ

if (x <= 10)
digitalWrite(LEDpin, HIGH); 
 

විශාල හෝ සමාන බව පරීක්ෂා කිරීම  (greater than or equal to)

 

මෙහිදීද ඉෆ් කොන්දේසියක් හරහා යම් විචල්‍යක අගය පරීක්ෂා කොට එම අගය
ඔබට අවශ්‍ය අගයට වඩා විශාල හෝ සමාන නම් ක්‍රමලේකනයේ ගැලීමේ වෙනසක්
 කල හැක .

උදාහරණ

if (x >= 10)
digitalWrite(LEDpin, HIGH); 

 

 

බුලියන් ඔපරේටර්ස් 

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

·    && (and)

·    || (or)

·    ! (not)

 

සහ තර්ක ක්‍රියාව (and)

වම් පස  සහ දකුණු පස කොන්දේසි දෙකෙහිම පිළිතුර සත්‍ය () නම් පමණක් තර්ක එක () ලබා දෙයි . උදාහරණ

if (digitalRead(2) == HIGH  && digitalRead(3) == HIGH) { // read two switches 
  // ...
} 

හෝ  තර්ක ක්‍රියාව (or)

වම් පස  සහ දකුණු පස කොන්දේසි දෙකෙන් එකක හෝ  පිළිතුර සත්‍ය () නම්  තර්ක එක () ලබා දෙයි . උදාහරණ

if (x > 0 || y > 0) {
  // ...
} 

නැත  තර්ක ක්‍රියාව (or)

කොන්දේසිය අසත්‍ය වන හැම විටම  පිළිතුර සත්‍ය වී තර්ක එකක්  () ලබා දෙයි . උදාහරණ

if (!x) { 
  // ...
} 

 

බිට් වයිස් ඔපරේටර්ස්

මේවා විචල්‍යයන් මත ක්‍රියා කර ඒවායේ බිටු වෙනස් කිරීම සදහා භාවිතා 
කරයි. ආර්ඩීනෝ භාෂාව තුල භාවිතා වන බිට්වයිස්  ඔපරේටර්ස් වර්ග 
මෙසේ වේ  .
 

·    &   (bitwise and)

·    |   (bitwise or)

·    ^   (bitwise xor)

·    ~   (bitwise not)

·    << (bitshift left)

·    >> (bitshift right)

 

බිට් වයිස් ඇන්ඩ් (bitwise and)

බයිට් දෙකක් සහ තර්ක ක්‍රියාවට ( ) ලක් කර ප්‍රතිපල ලබා දේ . උදාහරණ වශයෙන් ඉන්ටිජර් වර්ගයේ බයිට් දෙකක් ප්‍රතිපල සලකා බලමු .

int a =  92;    // in binary: 0000000001011100
int b = 101;    // in binary: 0000000001100101
int c = a & b;  // result:    0000000001000100, or 68 in decimal.

බිට් වයිස් ඕර් (bitwise or)

බයිට් දෙකක් හෝ  තර්ක ක්‍රියාවට ( ) ලක් කර ප්‍රතිපල ලබා දේ . උදාහරණ වශයෙන් තවත් ඉන්ටිජර් වර්ගයේ බයිට් දෙකක් ප්‍රතිපල සලකා බලමු .

int a =  92;    // in binary: 0000000001011100
int b = 101;    // in binary: 0000000001100101
int c = a | b;  // result:    0000000001111101, or 125 in decimal.

බිට් වයිස් එක්ස් - ඕර් (bitwise or)

බයිට් දෙකක් හෝ  තර්ක ක්‍රියාවට ( ) ලක් කර ප්‍රතිපල ලබා දේ . උදාහරණ වශයෙන් තවත් ඉන්ටිජර් වර්ගයේ බයිට් දෙකක් ප්‍රතිපල සලකා බලමු .

int x = 12;     // binary: 1100
int y = 10;     // binary: 1010
int z = x ^ y;  // binary: 0110, or decimal 6

 

බිට් වයිස් නොට්  (bitwise not )

බයිට් එකේ අපවර්තනය ( විරුද්ධ තත්වය) ලබා දේ . උදාහරණ


int a = 103;    // binary:  0000000001100111

int b = ~a;     // binary:  1111111110011000 = -104

බිට් වම් අතට ගමන් කරවීම (bitshift left)

මෙම ක්‍රියාකාරකම කරන වාරයක් පාසා ඔබ තෝරා ගත් වේරියබල් එකේ තිබෙන බිට් වම් අතට ගමන් කරයි. උදාහරණ වශයෙන් පහ අගය වශයෙන් ගත් විචල්‍යක් තුන් වරක් වම් අතට ශිෆ්ට් කරවමු ...

int a = 5;        // binary: 0000000000000101
int b = a << 3;   // binary: 0000000000101000, or 40 in decimal

බිට් දකුණු  අතට ගමන් කරවීම (bitshift right)

මෙම ක්‍රියාකාරකම කරන වාරයක් පාසා ඔබ තෝරා ගත් වේරියබල් එකේ තිබෙන බිට් දකුණු  අතට ගමන් කරයි. උදාහරණ වශයෙන් හතලිහ අගය වශයෙන් ගත් විචල්‍යක් තුන් වරක් දකුණු  අතට ශිෆ්ට් කරවමු ...

int b = 40 ;     // binary: 0000000000101000, or 40

int c = b >> 3; // binary: 0000000000000101, or back to 5 like we started with

 

 

කොම්පව්න්ඩ් ඔපරේටර්ස් 

·    ++ (increment)

·    -- (decrement)

·    += (compound addition)

·    -= (compound subtraction)

·    *= (compound multiplication)

·    /= (compound division)

·    &= (compound bitwise and)

·    |= (compound bitwise or)

අගය ඉහල දැමීම (increment)

මෙම ක්‍රියාකාරකම සිදු වූ පසු ඔබ නම් කරන විචල්‍යයෙහි අගය එකකින් ඉහල යයි. උදාහරණ

x++; 

අගය පහල  දැමීම (decrement)

මෙම ක්‍රියාකාරකම සිදු වූ පසු ඔබ නම් කරන විචල්‍යයෙහි අගය එකකින් පහල යයි. උදාහරණ

x--; 

 

compound addition

උදාහරණ

x += y;   // equivalent to the expression x = x + y;

compound subtraction

x -= y;   // equivalent to the expression x = x - y;   
 
compound multiplication
 
x *= y;   // equivalent to the expression x = x * y;
 
compound division
 
x /= y;   // equivalent to the expression x = x / y; 
 
 

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

Comments

  1. වටිනවා ගොඩක්, මම දැකල දියෙනවා පේලි 4ක්5ක් වගේ ලියලලොකු වැඩ කරනව,

    ReplyDelete
    Replies
    1. thank you for the comment. follow us closely so you can do the same

      Delete

Post a Comment

Popular posts from this blog

pic micro assembler tutorials in sinhala part1

microc for pic

pic assembler eeprom