රේඛීය ගින්දර ආචරණය
 
අපි ගින්දර ආචරණය අප පරිගණකයෙන් ලබාදෙන විධාන අනුව ක්‍රියාකරවමු. මෙහිදී අපි c කේතයෙන් අකුරු මෙහයුම් කිරීමටද ඉගන ගනිමු.

ආඩියුනෝව පරිගණක හා අනෙකුත් උපාංග සමග රේඛීය සන්නිවේදනය (Serial)කරයි. ආඩියුනෝ TX සහ RX අග්‍ර 5V හා 3.3V මගින් වැඩ කරන අතර ඒවා කෙලින්ම පරිගණකයේ 12v මත වැඩකරන RS232 serial port එකට සවි නොකරන්න. ආඩියුනෝ පුවරුව දැවී යා හැකියි.

ආඩියුනෝ පරිගණකය සම්බන්ධ කරන 5v USB මගින් 0 අග්‍රය (RX) සහ 1 අග්‍රය (TX) භාවිතා කළ හැක . එවිට 0 හා 1 අග්‍ර ඩිගිටල් ප්‍රතිදාන හෝ ආදාන සඳහා භාවිතා කල නොහැක. ඔබට ආඩියුනෝ IDE රේඛීය මොනිටරය, ආඩියුනෝ පුවරුච සමග රේඛීය සන්නිවේදනයට භාවිතා කල හැක. මේ සඳහා ඔබ දෙපසටම 9600bps වැනි එකම baud rate එකක් භාවිතා කළ යුතුය.
මේ පරිපථය සකසන්න


කේතය නොනවතින චක්‍රයේ තුලදී ක්‍රියා කරන අයුරු

 serial.available() ශ්‍රිතය මගින් රේඛීය බෆරයේ අැති බයිට ගණන ලබාදේ.
දත්ත තිබේනම් එය උපරිම බයිට 15කට සීමා කරයි.
දැන් බෆරයේ ඇති බයිට ගණන අවසන් වනතුරු
Serial.read() ශ්‍රිතය රේඛීය බෆරයේ බයිටය බැගින් ලබාගනී.
එම බයිටය buffer අරාවේ ඇතුලත් කර splitString ශ්‍රිතයට ලබාදේ.
පසුව දත්තය අකුරු වලට කඩා setLED ශ්‍රීතයට ලබාදේ.
setLEDට ලැබෙන R, G හෝ B අකුර අනුව අදාල බල්බය දල්වයි.
//අර්ථ දැක්වීම

char buffer[18]; // අකුරු 18ක අරාවක බෆරය
int red, green, blue; // පූර්ණ සංඛ්‍යා
int RedPin = 11; // රතු අග්‍රය
int GreenPin = 10; // කොළ අග්‍රය
int BluePin = 9; // නිල් අග්‍රය

void setup()
{
 Serial.begin(9600); // රේඛීය සන්නිදනය අරඹන්න
 Serial.flush(); //රේඛීය දත්ත මුදාහරින්න
 pinMode(RedPin, OUTPUT); //රතු අග්‍රය ප්‍රතිදානයකි
 pinMode(GreenPin, OUTPUT);//කොළ අග්‍රය ප්‍රතිදානයකි
 pinMode(BluePin, OUTPUT); ////නිල් අග්‍රය ප්‍රතිදානයකි
}

void loop()
{
 if (Serial.available() > 0) { //රේකීය දත්ත ඇත්නම්
   int index=0;  
   delay(100); // බෆරය පිරෙන තුරු නැවතීම
   int numChar = Serial.available(); //බයිට ගණන
  // වරකට උපරිම බයිට 15කට සීමා කරන්න
  if (numChar>15) {
      numChar=15;
  }

 //බයිට එකිනෙක buffer අරාවට දමන්න
 while (numChar--) {
     buffer[index++] = Serial.read();
 }
     splitString(buffer); //ශ්‍රිතය
 }
}

//භාහිර ශ්‍රිතය අකුරු වෙන් කරයි
void splitString(char* data) {
 Serial.print("Data entered: ");
 Serial.println(data); // ආදාන දත්ත
 char* parameter; // අකුරු අරාවක් ලෙස අර්ථ දැක්වීම
 parameter = strtok (data, " ,");//අකුරු වෙන් කරන්න
 while (parameter != NULL) {
     setLED(parameter);
     parameter = strtok (NULL, " ,");
 }
 // බෆරය හිස් කරන්න
 for (int x=0; x<16; x++) {
     buffer[x]='\0';
 }
 Serial.flush(); // දත්ත මුදා හරින්න
}

void setLED(char* data) {
 //data අරාවේ අවයව අගයන්න
 // මුල් අකුර  r හෝ R නම්
if ((data[0] == 'r') || (data[0] == 'R')) {
      int Ans = strtol(data+1, NULL, 10); //රතු අගය ගන්න
      Ans = constrain(Ans,0,255); //0-255 දක්වා අගයන්න
      analogWrite(RedPin, Ans); // රතු ලියන්න
      Serial.print("Red is set to: "); //රේකීය ප්‍රතිදානය
      Serial.println(Ans);
 }
  //// මුල් අකුර g  හෝ G නම්
 if ((data[0] == 'g') || (data[0] == 'G')) {
      int Ans = strtol(data+1, NULL, 10);
     Ans = constrain(Ans,0,255);
     analogWrite(GreenPin, Ans);
     Serial.print("Green is set to: ");
     Serial.println(Ans);
 }
 
//මුල් අකුර කොළ සඳහා අගයන්න
 if ((data[0] == 'b') || (data[0] == 'B')) {
  int Ans = strtol(data+1, NULL, 10);
  Ans = constrain(Ans,0,255);
  analogWrite(BluePin, Ans);
  Serial.print("Blue is set to: ");
  Serial.println(Ans);
 }
}
(c) Shilpa Sayura Foundation 2006-2017