Gönderen Konu: Mors Keyer Dekoder  (Okunma sayısı 3639 defa)

Çevrimdışı TA3OD

Mors Keyer Dekoder
« : 11 Nisan 2026, 23:27:07 »
Mors öğrenmeye çalışırken yardımcı olacağını düşündüğüm bir dekoder yaptım. Yine pek çok örneği inceledim ve kendime uygun olan bir versiyonu tasarladım. Düzenek sadece maniplenin hareketleri ile  mors kodunu oluşturuyor ve bu oluşan kodu harf ve sayıya çevirip ekranda gösteriyor. telsizden gelen kodu çözme özelliği henüz yok. Amacım kulağımla dinleyip anlamak, elimle mors kodu göndermek. Yarışma vs benim ilgi alanım değil. Hızlı  ya da çok sayıda QSO yapmak gibi bir amacım yok.  Bu nedenle bu cihaz da bu amaçlara uygun değil.

Aşağıdaki linkte kısa çalışma videosu var

https://www.youtube.com/shorts/YQNlgu5noFg






arduino kodu text olarak şöyle

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f, 20, 4);

// Pinler
#define DOT_PIN 2
#define DASH_PIN 3
#define SIDETONE 12


// WPM 20
#define DOT_TIME 55 

#define DASH_TIME (DOT_TIME * 3)
#define ELEMENT_GAP DOT_TIME
#define LETTER_GAP (DOT_TIME * 2)

#define WORD_GAP (DOT_TIME * 5)
int col = 0;
int row = 0;



// State
bool keying = false;
bool lastWasDot = false;
bool squeeze = false;

unsigned long timer = 0;
String morseBuffer = "";
unsigned long lastActivity = 0;

// Morse tablo
struct MorseMap {
  const char* code;
  char letter;
};

MorseMap table[] = {
  {".-", 'A'}, {"-...", 'B'}, {"-.-.", 'C'}, {"-..", 'D'},
  {".", 'E'}, {"..-.", 'F'}, {"--.", 'G'}, {"....", 'H'},
  {"..", 'I'}, {".---", 'J'}, {"-.-", 'K'}, {".-..", 'L'},
  {"--", 'M'}, {"-.", 'N'}, {"---", 'O'}, {".--.", 'P'},
  {"--.-", 'Q'}, {".-.", 'R'}, {"...", 'S'}, {"-", 'T'},
  {"..-", 'U'}, {"...-", 'V'}, {".--", 'W'}, {"-..-", 'X'},
  {"-.--", 'Y'}, {"--..", 'Z'},
  {"-----",'0'},{".----",'1'},{"..---",'2'},{"...--",'3'},
  {"....-",'4'},{".....",'5'},{"-....",'6'},{"--...",'7'},
  {"---..",'8'},{"----.",'9'},
};

char decode(String code) {
  for (int i = 0; i < sizeof(table)/sizeof(MorseMap); i++) {
    if (code == table.code) return table.letter;
  }
  return '?';
}

// Sidetone
void toneOn() {
  tone(SIDETONE, 800);
}

void toneOff() {
  noTone(SIDETONE);
}

// Paddle okuma
bool dotPressed() { return !digitalRead(DOT_PIN); }
bool dashPressed() { return !digitalRead(DASH_PIN); }

// Eleman üretimi
void sendElement(bool isDot) {
  keying = true;
  lastWasDot = isDot;

  if (isDot) {
    morseBuffer += ".";
    toneOn();
    delay(DOT_TIME);
  } else {
    morseBuffer += "-";
    toneOn();
    delay(DASH_TIME);
  }

  toneOff();
  delay(ELEMENT_GAP);

  keying = false;
  lastActivity = millis();
}

// IAMBIC MODE B ENGINE
void handleKeyer() {
  bool dot = dotPressed();
  bool dash = dashPressed();

  // squeeze detection
  squeeze = dot && dash;

  if (!keying) {

    if (squeeze) {
      // Alternating sequence
      if (lastWasDot) {
        sendElement(false);
      } else {
        sendElement(true);
      }
    }
    else if (dot) {
      sendElement(true);
    }
    else if (dash) {
      sendElement(false);
    }
  }
}

// Decoder kontrol
void handleDecoder() {
  if (morseBuffer.length() > 0 &&
      millis() - lastActivity > LETTER_GAP) {

    char c = decode(morseBuffer);
   // lcd.print(c); //  bunu değiştirdik alttakiye
    lcdWriteChar(c);
    morseBuffer = "";
  }

  if (millis() - lastActivity > WORD_GAP) {
    //lcd.print(" ");
    lcdWriteChar(' ');
    lastActivity = millis();
  }
}
/////////lcd satırlar  1 2 3 4 sırasıyla görünsün diye/////////////

void lcdWriteChar(char c) {
  lcd.setCursor(col, row);
  lcd.print(c);

  col++;

  if (col >= 20) {
    col = 0;
    row++;

    if (row >= 4) {
      row = 0;
      lcd.clear();
    }
  }
}
void setup() {
  pinMode(DOT_PIN, INPUT_PULLUP);
  pinMode(DASH_PIN, INPUT_PULLUP);
  pinMode(SIDETONE, OUTPUT);

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Iambic Keyer B");
  lcd.setCursor(0,1);
  lcd.print("WPM: 25");

  delay(1500);
  lcd.clear();
}

void loop() {
  handleKeyer();
  handleDecoder();
}



« Son Düzenleme: 11 Nisan 2026, 23:37:26 Gönderen: TA3OD »

Çevrimdışı TA3OD

Ynt: Mors Keyer Dekoder
« Yanıtla #1 : 27 Nisan 2026, 13:21:27 »
yukarıdan text olarak kopyalandığında sorun çıkarsa aşağıdaki linkten arduino kodu indirilebilir



https://github.com/alikirtik-TA3OD/iambic_keyer_decoder

Çevrimdışı TA3OD

Ynt: Mors Keyer Dekoder
« Yanıtla #2 : 10 Mayıs 2026, 21:50:56 »
Eklenen iki buton ile WPN ayarı yapılabiliyor.
Versiyon 2 olarak ekran yazı akışı düzenlendi

https://github.com/alikirtik-TA3OD/iambic_keyer_decoder/blob/main/keyer_decoder_ali_2_OK.ino
« Son Düzenleme: 10 Mayıs 2026, 21:54:53 Gönderen: TA3OD »

Çevrimdışı TA3OD

Ynt: Mors Keyer Dekoder
« Yanıtla #3 : 10 Ekim 2026, 01:42:07 »
Bu cihazda geliştirme yapmaya devam ediyorum. Cihaza bir butonla devreye giren  eğitim modu ekledim. Buna ek olarak ekranda görünen yazıların bir satır yukarı kayarak görünmesini sağlandı.

Burada cihazın kasası için gereken 3D çizim dosyaları var  https://www.thingiverse.com/thing:7419171

Burada gerekli olan Arduino kodu var https://github.com/alikirtik-TA3OD/morse-cod-trainer

Çevrimdışı TA1XZ

Ynt: Mors Keyer Dekoder
« Yanıtla #4 : 16 Ekim 2026, 02:36:18 »
Ali Bey emeğinize sağlık. Projenizi ilgiyle takip ediyorum.

Çevrimdışı TA3OD

Ynt: Mors Keyer Dekoder
« Yanıtla #5 : 16 Ekim 2026, 09:20:26 »
Merhaba Dursun Bey, konuya ilginiz için teşekkür ediyorum.
Olabildiğince az sayıda elemanla ve mümkün olan en basit bağlantıyla bir cihaz geliştirmeye çalışıyorum. Bir kaç amatör arkadaş da bu temel tasarımdan hareketle kendi versiyonlarını yapıyor. Amacımız ülkemizin amatör telsizcilerinin kendi kendine yatabilme, kendi ihtiyaçlarına uygun araç gereci geliştirmesidir. Bu basit yapı sayesinde benim çok az bilgi ve deneyimim olan yazılım konusunda desteği de yapay zekadan alıyorum. Yapay zekanın oluşturduğu kodu da cihaza yükleyip kontrol ederek hata geri bildiriminde bulunuyorum. Bu işlem basamakları sayesinde yapay zekanın da yaptığı hataları anında görüyoruz, ve yine yapay zekaya düzelttiriyoruz.
Bütün çizim ve yazılımları internete herkesin ulaşabileceği şekilde yüklüyorum. Temel elektronik bilgisi, lehim yapma becerisi ve başlangıç düzeyinde Arduino bilgisi olan herkesin yapabileceği bir çalışma ortaya çıkıyor. İhtiyacı olan herkesin faydalanması dileğiyle.

Aynı devreyi kullanan ve eğitim modundunda yine küçük bir ekleme yaparak yeni bir yazılım versiyonu  daha hazırladım.

https://github.com/alikirtik-TA3OD/Mors-Trainer-V2