ආඩියුනෝවේ සවිකල ඔබන බොත්තම් යතුරක් මගින් ලබාදෙන මෝස් සංඥා , විකේතනය (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 = ""; //කේතය හිස් කරන්න
}
ශිල්ප 64