මෝස් සංඥා විකේතකය
 
ආඩියුනෝවේ සවිකල ඔබන බොත්තම් යතුරක් මගින් ලබාදෙන මෝස් සංඥා , විකේතනය (decode)කර පරිගණකයේ රේඛීය මොනිටරයේ පෙන්වීම අපගේ අදහසයි. ඒ සඳහා පහත කේතය භාවිතා කරමු.


unsigned long signal_len;   // සංඥා කාලය
unsigned long t1; // යතුර එබූ වේලාව
unsigned long t2; // යතුර නිදහස් කල වේලාව
int inputPin = 2; //2 අග්‍රය යතුරේ ආදානයට
int ledPin = 4;  //4 අග්‍රය LED බල්බයට
String code = "";   //ඉංග්‍රීසි හෝඩියේ අකුරු සඳහා

void setup() {
  Serial.begin(9600); //රේඛීය සන්නිවේදනය අරඹන්න
  pinMode(inputPin, INPUT_PULLUP); //pullup ආදානය
  pinMode(ledPin,OUTPUT); //ledPin ප්‍රතිදානය ලෙස
}

void loop()
{
NextDotDash:
  while (digitalRead(inputPin) == HIGH) {}
  t1 = millis();  //එබු වේලාව
  digitalWrite(ledPin, HIGH); //බොත්තම ඔබා ඇතිවිට LED  දල්වන්න
  while (digitalRead(inputPin) == LOW) {}
  t2 = millis();  //යතුර නිදහස් කල වේලාව
  digitalWrite(ledPin, LOW);  //LED නිවන්න
  signal_len = t2 - t1;  //සංඥාවට ගතවූ කාලය
  if (signal_len > 50) // debouncing නොසලකා හැරීම
  {
    code += readio(); //dot හෝ dash පරීක්‍ෂා කරන ශ්‍රිතය 
  }
  //කාලය  තත් 0.5 වඩා වැඩ්නම් ඊ ලඟ අකුර ගන්න
  while ((millis() - t2) < 500)
  {     
    //යතුර නිදහස් නම්
    if (digitalRead(inputPin) == LOW) {
      goto NextDotDash; //ඊ ලඟ  Dot හෝ Dash
    }
  }
  convertor();  // සංකේතයට අදාල අකුර දෙන්න
}

char readio()
{
  if (signal_len < 600 && signal_len > 50)
  {
    return '.';  //තත්පර 0.6 වඩා අඩුනම් dot
  }
  else if (signal_len > 600)
  {
    return '-';  //තත්පර 0.6ට වඩා නම් dash
  }
}

void convertor()
{
 //කේත ආරාව A-Z
  static String letters[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-",".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "E"};
  int i = 0;
  if (code == ".-.-.-")
  {
    Serial.print(".");        //බ්ඳීම සඳහා
  }
  else
  {
    while (letters[i] != "E")  //කේතය සොයා සංසන්දනය 
    {
      if (letters[i] == code)  { //කේතය හමුවීම 
        Serial.print(char('A' + i)); //අදාල අකුර දෙන්න
        break; //චක්‍රයෙන් මිදෙන්න
      }
      i++;
    }
    if (letters[i] == "E") { //අවසාන කේතය හමුනම්
      Serial.println("");  //ආදානය වැරදි
    }
  }
  code = ""; //කේතය හිස් කරන්න
}
(c) Shilpa Sayura Foundation 2006-2017