dominoFiber     domiRobot     Forum


Projeler - Arduino Mors Kodu Üreteci

Arduino Mors Kodu Üreteci
Bu projemizde seri port ekranına yazacağımız cümleleri mors koduna dönüştüren devreyi tanıtacağız. Devre çıkışında bir buzzer ve bir de led bulunmaktadır. Seri port ekranına yazılanlar bu çıktılar üzerinden takip edilebilmektedir. Ayrıca devre üzerinde bulunan bir buton ile de butona basıp bırakmak suretiyle kod gönderme işlemi manuel olarak da yapılabilmektedir. BKod gönderme işleminin butonla yapılması durumunda gönderilen kodun yazı olarak karşılığı seri port ekranından okunabilmektedir.

Amaç
Arduino ile mors kodu üreteci yapma becerisi kazanmak.

Seviye
Orta seviye

<a href="http://www.youtube.com/watch?v=rQC3ZxgCYbA" target="_blank">http://www.youtube.com/watch?v=rQC3ZxgCYbA</a>
Video 1: Arduino mors kodu üreteci

Fotoğraf 1: Arduino Mors Kodu Üreteci

Şema 1: Arduino Mors Kodu Üreteci Fritzing Çizim

Şema 2: Arduino Mors Kodu Üreteci ISIS Devre Şeması

İşlem basamakları
  • Devreyi deney bordu üzerine kurunuz.
  • Arduino kodunu yükleyiniz.
  • Devreye besleme gerilimi uygulayınız.
  • Seri port ekranına çeşitli cümleler yazarak devre üzerindeki led ve buzzerden gönderilen kodları gözlemleyiniz.
  • Devre üzerindeki butona basıp bırakarak led ve butonun tepkilerini gözlemleyiniz.​

Malzeme listesi
Tüm malzemeleri malzeme isimlerine tıklayarak temin edebilirsiniz.

Mors kodu üreteci arduino kodu
Kod: [Seç]
#define DOT_DURATION   200               
#define DASH_DURATION  DOT_DURATION * 3 
#define SIGNAL_GAP     DOT_DURATION     
#define LETTER_GAP     DOT_DURATION * 3
#define WORD_GAP       DOT_DURATION * 7 
#define LED            11             
#define BUTTON          7               
#define DOT             1               
#define DASH            2               
#define NONE            0               

boolean buttonWasPressed = false;       
long lastTimestamp = 0;                 
byte inputSignal[5];                     
int inputSignalIndex = 0;               

void resetInputSignal() {               
  inputSignal[0] = NONE;
  inputSignal[1] = NONE;
  inputSignal[2] = NONE;
  inputSignal[3] = NONE;
  inputSignal[4] = NONE;
  inputSignalIndex = 0;
}

void setup() {
  pinMode(LED, OUTPUT); 
  pinMode(BUTTON, INPUT);               
  digitalWrite(LED, LOW);               
  Serial.begin(9600);                   
  resetInputSignal();                   
}

boolean matchInputSignal(byte s0, byte s1, byte s2, byte s3, byte s4) {
  return ((inputSignal[0] == s0) &&
          (inputSignal[1] == s1) &&
          (inputSignal[2] == s2) &&
          (inputSignal[3] == s3) && 
          (inputSignal[4] == s4));
}

char currentInputSignalToLetter() { 
  if (matchInputSignal(DOT, DASH, NONE, NONE, NONE))  { return 'A'; }
  if (matchInputSignal(DASH, DOT, DOT, DOT, NONE))    { return 'B'; }
  if (matchInputSignal(DASH, DOT, DASH, DOT, NONE))   { return 'C'; }
  if (matchInputSignal(DASH, DOT, DOT, NONE, NONE))   { return 'D'; }
  if (matchInputSignal(DOT, NONE, NONE, NONE, NONE))  { return 'E'; }
  if (matchInputSignal(DOT, DOT, DASH, DOT, NONE))    { return 'F'; }
  if (matchInputSignal(DASH, DASH, DOT, NONE, NONE))  { return 'G'; }
  if (matchInputSignal(DOT, DOT, DOT, DOT, NONE))     { return 'H'; }
  if (matchInputSignal(DOT, DOT, NONE, NONE, NONE))   { return 'I'; }
  if (matchInputSignal(DOT, DASH, DASH, DASH, NONE))  { return 'I'; }
  if (matchInputSignal(DASH, DOT, DASH, NONE, NONE))  { return 'K'; }
  if (matchInputSignal(DOT, DASH, DOT, DOT, NONE))    { return 'L'; }
  if (matchInputSignal(DASH, DASH, NONE, NONE, NONE)) { return 'M'; }
  if (matchInputSignal(DASH, DOT, NONE, NONE, NONE))  { return 'N'; }
  if (matchInputSignal(DASH, DASH, DASH, NONE, NONE)) { return 'O'; }
  if (matchInputSignal(DOT, DASH, DASH, DOT, NONE))   { return 'P'; }
  if (matchInputSignal(DASH, DASH, DOT, DASH, NONE))  { return 'Q'; }
  if (matchInputSignal(DOT, DASH, DOT, NONE, NONE))   { return 'R'; }
  if (matchInputSignal(DOT, DOT, DOT, NONE, NONE))    { return 'S'; }
  if (matchInputSignal(DASH, NONE, NONE, NONE, NONE)) { return 'T'; }
  if (matchInputSignal(DOT, DOT, DASH, NONE, NONE))   { return 'U'; }
  if (matchInputSignal(DOT, DOT, DOT, DASH, NONE))    { return 'V'; }
  if (matchInputSignal(DOT, DASH, DASH, NONE, NONE))  { return 'W'; }
  if (matchInputSignal(DASH, DOT, DOT, DASH, NONE))   { return 'X'; }
  if (matchInputSignal(DASH, DOT, DASH, DASH, NONE))  { return 'Y'; }
  if (matchInputSignal(DASH, DASH, DOT, DOT, NONE))   { return 'Z'; }
  if (matchInputSignal(DOT, DASH, DASH, DASH, DASH))  { return '1'; }
  if (matchInputSignal(DOT, DOT, DASH, DASH, DASH))   { return '2'; }
  if (matchInputSignal(DOT, DOT, DOT, DASH, DASH))    { return '3'; }
  if (matchInputSignal(DOT, DOT, DOT, DOT, DASH))     { return '4'; }
  if (matchInputSignal(DOT, DOT, DOT, DOT, DOT))      { return '5'; }
  if (matchInputSignal(DASH, DOT, DOT, DOT, DOT))     { return '6'; }
  if (matchInputSignal(DASH, DASH, DOT, DOT, DOT))    { return '7'; }
  if (matchInputSignal(DASH, DASH, DASH, DOT, DOT))   { return '8'; }
  if (matchInputSignal(DASH, DASH, DASH, DASH, DOT))  { return '9'; }
  if (matchInputSignal(DASH, DASH, DASH, DASH, DASH)) { return '0'; }
  return '?';
}

void showLightForDuration(long duration) {
  digitalWrite(LED, HIGH); 
  delay(duration);
  digitalWrite(LED, LOW);


boolean showSignal(byte dotDashNone) {
  switch(dotDashNone) {
    case DOT:
      showLightForDuration(DOT_DURATION);
      return true;
    case DASH:
      showLightForDuration(DASH_DURATION);
      return true;
    default:
      return false;
  }
}

void showLetterForSignals(byte s0, byte s1, byte s2, byte s3, byte s4) {
  if (showSignal(s0)) {
    delay(SIGNAL_GAP);
    if (showSignal(s1)) {
      delay(SIGNAL_GAP);
      if (showSignal(s2)) {
        delay(SIGNAL_GAP);
        if (showSignal(s3)) {
          delay(SIGNAL_GAP);
          showSignal(s4);
        }
      }
    }
  }
  delay(LETTER_GAP);


void showLetter(byte letter) {
  if (97 <= letter && letter <= 122) {
    letter -= 32;
  }
  switch(letter) {
    case 'A': showLetterForSignals(DOT, DASH, NONE, NONE, NONE); break;
    case 'B': showLetterForSignals(DASH, DOT, DOT, DOT, NONE); break;
    case 'C': showLetterForSignals(DASH, DOT, DASH, DOT, NONE); break;
    case 'D': showLetterForSignals(DASH, DOT, DOT, NONE, NONE); break;
    case 'E': showLetterForSignals(DOT, NONE, NONE, NONE, NONE); break;
    case 'F': showLetterForSignals(DOT, DOT, DASH, DOT, NONE); break;
    case 'G': showLetterForSignals(DASH, DASH, DOT, NONE, NONE); break;
    case 'H': showLetterForSignals(DOT, DOT, DOT, DOT, NONE); break;
    case 'I': showLetterForSignals(DOT, DOT, NONE, NONE, NONE); break;
    case 'J': showLetterForSignals(DOT, DASH, DASH, DASH, NONE); break;
    case 'K': showLetterForSignals(DASH, DOT, DASH, NONE, NONE); break;
    case 'L': showLetterForSignals(DOT, DASH, DOT, DOT, NONE); break;
    case 'M': showLetterForSignals(DASH, DASH, NONE, NONE, NONE); break;
    case 'N': showLetterForSignals(DASH, DOT, NONE, NONE, NONE); break;
    case 'O': showLetterForSignals(DASH, DASH, DASH, NONE, NONE); break;
    case 'P': showLetterForSignals(DOT, DASH, DASH, DOT, NONE); break;
    case 'Q': showLetterForSignals(DASH, DASH, DOT, DASH, NONE); break;
    case 'R': showLetterForSignals(DOT, DASH, DOT, NONE, NONE); break;
    case 'S': showLetterForSignals(DOT, DOT, DOT, NONE, NONE); break;
    case 'T': showLetterForSignals(DASH, NONE, NONE, NONE, NONE); break;
    case 'U': showLetterForSignals(DOT, DOT, DASH, NONE, NONE); break;
    case 'V': showLetterForSignals(DOT, DOT, DOT, DASH, NONE); break;
    case 'W': showLetterForSignals(DOT, DASH, DASH, NONE, NONE); break;
    case 'X': showLetterForSignals(DASH, DOT, DOT, DASH, NONE); break;
    case 'Y': showLetterForSignals(DASH, DOT, DASH, DASH, NONE); break;
    case 'Z': showLetterForSignals(DASH, DASH, DOT, DOT, NONE); break;
    case '1': showLetterForSignals(DOT, DASH, DASH, DASH, DASH); break;
    case '2': showLetterForSignals(DOT, DOT, DASH, DASH, DASH); break;
    case '3': showLetterForSignals(DOT, DOT, DOT, DASH, DASH); break;
    case '4': showLetterForSignals(DOT, DOT, DOT, DOT, DASH); break;
    case '5': showLetterForSignals(DOT, DOT, DOT, DOT, DOT); break;
    case '6': showLetterForSignals(DASH, DOT, DOT, DOT, DOT); break;
    case '7': showLetterForSignals(DASH, DASH, DOT, DOT, DOT); break;
    case '8': showLetterForSignals(DASH, DASH, DASH, DOT, DOT); break;
    case '9': showLetterForSignals(DASH, DASH, DASH, DASH, DOT); break;
    case '0': showLetterForSignals(DASH, DASH, DASH, DASH, DASH); break;
    case ' ': delay(WORD_GAP); break;
    default:
      Serial.print("Don't understand [");
      Serial.print((char) letter);
      Serial.print("]");
      showLightForDuration(50);
      delay(1);
      showLightForDuration(50);
      delay(1);
      showLightForDuration(50);
  }
}

void loop() {
  long currentTimestamp  = millis();
  long duration = currentTimestamp - lastTimestamp;
  if (digitalRead(BUTTON) == HIGH) {
    if (!buttonWasPressed) {
      buttonWasPressed = true;
      digitalWrite(LED, HIGH);
      lastTimestamp = currentTimestamp;
      if (duration > LETTER_GAP) {
        Serial.print(' ');
      }
    }
  } else {
    if (buttonWasPressed) { 
      if (duration < DOT_DURATION) {
        inputSignal[inputSignalIndex] = DOT;
      } else {
        inputSignal[inputSignalIndex] = DASH;
      }
      inputSignalIndex++;
      digitalWrite(LED, LOW);
      buttonWasPressed = false;
      lastTimestamp = currentTimestamp;
    } else {
      if (inputSignalIndex > 0) {
        if (duration > SIGNAL_GAP || inputSignalIndex >= 4) {
          Serial.print(currentInputSignalToLetter());
          resetInputSignal();
        }
      }
    }
  }
  if (Serial.available() > 0) {
    showLetter(Serial.read());
  }
}

Download
İhtiyaç duyulması halinde buraya tıklayıp projeye ait dosyaları indirebilirsiniz.

Arduino leonarda R3 kontrol kartı satın al

  • Arduino leonardo R3 kontrol kartı satın alArduino leonardo R3 kontrol kartı satın alArduino leonardo R3 kontrol kartı satın al