首页 > 其他分享 >使用Arduino制作摩尔斯电码收发器

使用Arduino制作摩尔斯电码收发器

时间:2023-07-06 17:24:11浏览次数:42  
标签:morseCode Arduino int 摩尔 收发器 println Serial 电码

 

 

 

摩尔斯电码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。在今天,国际摩尔斯电码依然被使用着。比如,摩尔斯电码最广为人知的用法发送求救信号SOS,SOS信号的组合方式为:。再比如,假设我们通过摩尔斯电码发送“Arduino”,组合方式为:“.- .-. -.. ..- .. -. —”。

如何使用Arduino制作摩尔斯电码收发器

电路部分

Arduino到面包板的引脚说明:

 Arduino制作摩尔斯码收发器电路

  1. 引脚D2连接到按钮1的一端,再通过电阻接地,按钮1另一端接5V。
  2. 引脚D7连接到按钮2的一端,再通过电阻接地,按钮2另一端接5V。
  3. 引脚D8通过电阻连接到LED正极,负极接地。
  4. 引脚D12通过电阻与蜂鸣器正极连接,负极接地。

代码部分

文末是完整的代码,将其保存为MorseCode.ino,然后打开Arduino IDE “File->Open->MorseCode.ino”,上传到Arduino。上传完成后,打开串口监视器,你将看到如下的显示内容:

莫尔斯码收发器串口监视器显示

摩尔斯码译码器的操作顺序:首先通过点击按钮1和按钮2来写摩尔斯码;字母之间的空格,可在上面的输入框中填2,然后按回车键。单词之间的空格,在上面的输入框中填3,然后按回车键。所有输入完成后,在上面的输入框中填1,然后按回车键,将会翻译摩尔斯码的内容。翻译后的莫尔斯电码将显示在串口监视器的下面。例如:我们来写“.-  .-.  -..  ..-  ..  -.  —”,翻译后将显示为“ARDUINO”。

Arduino的摩尔斯码显示

这样,使用Arduino制作的摩尔斯码收发器就算完成了。

完整Arduino代码如下:

 

/*
  This Program is for demonstration of MORSE CODE Communication 
  which was use to send information secretly using codes of combinations dots .  and dashes - 
  Thanks to open source community

*/


#define SIZE 26
const int ledPin = 8;
const int speakerPin = 12;
const int dotButton = 2;
const int dashButton = 7;

String morseCode = "";
String text = "";
int characterAscii = 0;
int startPos = 0, endPos = 0;
int startPos1 = 0, endPos1 = 0;
String characterCode = "";
int dashButtonState = 0;
int dotButtonState = 0;


//Array of MorseCode for letters of English Language A to Z
String letters[SIZE] = {

  // A to I
  ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
  // J to R
  ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
  // S to Z
  "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
};


void setup() {
  // put your setup code here, to run once:
  //Getting things Ready
  pinMode(ledPin, OUTPUT);
  pinMode(dotButton, INPUT);
  pinMode(dashButton, INPUT);
  Serial.begin(9600);

  Serial.println("*************************************************************");
  Serial.println("                    Demonstration of Morse Code              ");
  Serial.println("************************************************************* ");
  Serial.println("\nInstructions");
  Serial.println("1. First Write Your Morse code");
  Serial.println("2. When you are done  Write 1 on above input box and Press Enter or click Send Button ");
  Serial.println("3. For Space between letters write 2 and Press Enter ");
  Serial.println("4. For Space between words   write 3 and Press Enter ");

  Serial.println("5. Thats all Translation of Morse Code  will then be Shown ");

  Serial.println("\n\nEnter Your Morse Code Here  ");
}


void loop() {
  // put your main code here, to run repeatedly:

  while (Serial.available() > 0) {
    int ascii = Serial.read();

    switch (ascii) {
      case 49:  // 49 is Ascii value of 1

        Serial.print("\n");
        morseCode.concat('#');  // Placeing # at the end of morseCode to simplify further processing

        Serial.print("\nYour Morse code Translation :  ");

        endPos1 = morseCode.indexOf('#');

        while (endPos1 < morseCode.length()) {
          extractLetters(morseCode.substring(startPos1, endPos1));  // This function would extract Letter as name suggest and would convert  code to text SIMPLE!
          startPos1 = endPos1 + 1;
          if (startPos1 == morseCode.length()) {
            break;
          }
          endPos1 = morseCode.indexOf('#', startPos1);
        }
        startPos1 = 0;
        endPos1 = 0;

        text = "";  //  For New Translation
        morseCode = "";
        Serial.println("\n\nEnter Your Morse Code Here ");


        break;

      case 50:  // 50 is Ascii value of 2

        morseCode.concat("@");
        Serial.print("@");
        delay(200);

        break;

      case 51:  // 51 is Ascii value of 3

        morseCode.concat("#");
        Serial.print("#");
        delay(200);

        break;
    }
  }

  process();
}

void turnONLedSpeaker(int du) {
  //Turn ON LED
  digitalWrite(ledPin, HIGH);
  tone(speakerPin, 4699, du);  // tone(speakerPin, frequency, duration in milliSec)
}

void process() {

  dotButtonState = digitalRead(dotButton);
  dashButtonState = digitalRead(dashButton);




  if (dashButtonState == HIGH) {
    turnONLedSpeaker(400);

    morseCode.concat("-");  // Storing code in variable morseCode with the help of concatenation function
    Serial.print("-");      //Prints User entered Code
    delay(200);
  } else if (dotButtonState == HIGH) {
    turnONLedSpeaker(300);

    morseCode.concat(".");
    Serial.print(".");
    delay(200);

  } else {
    //Turn OFF LED
    digitalWrite(ledPin, LOW);
  }
}

char convertIntoText(String characterCode) {
  characterAscii = 65;

  for (int index = 0; index < SIZE; index++) {
    if (characterCode == letters[index]) {
      return characterAscii;
    }
    characterAscii++;
  }
}

void extractLetters(String words) {
  words.concat('@');  // Placeing @ at the end of word to simplify further processing

  endPos = words.indexOf('@');


  //Loop to extracting single character morse Code from string of word
  while (endPos < words.length()) {
    characterCode = words.substring(startPos, endPos);

    //Now CharacterCode will now convert in text

    text.concat(convertIntoText(characterCode));

    startPos = endPos + 1;
    characterCode = "";

    // if condition is just to terminate loop when our extracting single character code is complete thats all
    if (startPos == words.length()) {
      break;
    }

    endPos = words.indexOf('@', startPos);
  }


  Serial.print(text);
  Serial.print(" ");
  startPos = 0;
  endPos = 0;
  text = "";
}

  

标签:morseCode,Arduino,int,摩尔,收发器,println,Serial,电码
From: https://www.cnblogs.com/flyingsir/p/17532761.html

相关文章

  • Arduino 麦克风声音传感器指南
    麦克风声音传感器麦克风声音传感器,顾名思义,检测声音。它可以测量声音的响度。这些传感器的种类繁多。 在下图中,您可以看到Arduino最常用的。最左边是KY-038,右边是LM393麦克风声音传感器。两个传感器模块都有一个内置电位器,用于调节数字输出引脚的灵敏度。去哪买?您可以......
  • 如何使用Arduino创建摩尔斯电码生成器
    摩尔斯电码工作原理摩尔斯电码发明于19世纪,使用非常简单的长短脉冲序列(通常为电和划)来远距离发送消息。通过将字母表中的字母编码为电和划的组合,信息可以只用一个单一的电子或声音信号来表达。为了说明这是如何工作的,我们将使用一个简单的蜂鸣器将文本转换为可听的摩尔斯电码信......
  • 【雕爷学编程】Arduino动手做(136)---0.91寸OLED液晶屏模块3
    0.91寸OLED模块引脚说明GND------地线VCC------电源(因为模块内部自带稳压,所以3.3~5V供电都是ok的)SDA------I2C数据线(接A4)SCL  ------I2C时钟线(接A5)(可以看到模块后面有一个U2芯片,就是用来稳压的) 项目之九:综合测试,中文显示Arduino实验开源代码 /*【Ardu......
  • Energia 与 arduino 有啥联系
    Energia是一个开源项目,旨在为基于TexasInstruments(TI)微控制器的开发提供类似Arduino的编程环境。它允许使用Arduino编程语言和库来开发基于TI微控制器的项目。Energia与Arduino有以下联系:1.编程语言:Energia使用与Arduino相同的编程语言,即基于C/C++的Arduino编程语言。这意味着......
  • Arduino 控制激光测距 4M
    VL53L0X飛時測距模組通常有6隻接腳,只需要接電源和I2C腳。ArduinoUno板的接線示範:安裝Arduino版的VL53L0X程式庫選擇ArduinoIDE主功能表的「草稿碼→匯入程式庫→程式庫管理員」,在「程式庫管理員」中搜尋“VL53L0X ”關鍵字,即可找到相關程式庫,常見的兩個程式庫分別是Adafrui......
  • Arduino 板的说明
    Arduino板的说明 在本章中,我们将了解Arduino板上的不同组件。将学习 ArduinoUNO板,因为它是Arduino板系列中最受欢迎的。此外,它是开始使用电子和编码的最佳板。有些板看起来与下面给出的有些不同,但多数Arduino中的这些组件大部分是共同的。以下是UNO板的电路......
  • Arduino Uno Rev3
        OverviewArduinoUno isamicrocontrollerboardbasedontheATmega328P(datasheet).Ithas14digitalinput/outputpins(ofwhich6canbeusedasPWMoutputs),6analoginputs,a16MHzceramicresonator(CSTCE16M0V53-R0),aUSBconnection......
  • 【雕爷学编程】Arduino动手做(152)---BMI160 六轴陀螺仪模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(149)---MAX9814咪头传感器模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【雕爷学编程】Arduino动手做(144)---KA2284 电平模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......