Components and supplies
10k Resistor
LCD 128x64 with ST7565 driver
1N4148 diode
Grove - Button (P)
capacitors
Arduino Nano
Tools and machines
Soldering kit
Apps and platforms
Arduino IDE
Project description
Code
Code
cpp
...
1/* 2 * Morse code receiver 3 */ 4 5#include <U8g2lib.h> 6#include <TimerOne.h> 7 8U8G2_ST7565_ERC12864_1_4W_SW_SPI u8g2 ( U8G2_R0, /* scl=*/ 13 , /* si=*/ 11 , /* cs=*/ 10 , /* rs=*/ 9 , /* rse=*/ 8 ) ; 9 10byte inPin1 = 0; //analog input to telegraph key or radio output 11byte P1, P2; //button states 12int readPin1; //telegraph key or radio output variableradia 13int k, i; //iloop index 14int kropka; //dot length 15int z, s; //character pulses 16int p, r; //break pulses 17int wpm; //word per minute 18String znak_M; 19String litera_M; 20char S_str[6]; 21char P_str[6]; 22char wpm_str[2]; 23char* znak; 24char* wiersz[12]; //char workline* 25char* wiersz1[12]; //top line char* 26 27 28const byte index_key = 48; //number of characters in the array 48 29const char* Z_char[index_key] = { 30"a","b","c","d","e","f","g","h","i","j","k","l","m", 31"n","o","p","q","r","s","t","u","v","w","x","y","z", 32"0","1","2","3","4","5","6","7","8","9", 33"!","(",")","+",",","-",".","/","=","?","_"}; 34 35const String Morse[index_key] = { //Morse code 36".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--", 37"-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..", 38"-----",".----","..---","...--","....-",".....","-....","--...","---..","----.", 39"-.-.--","-.--.","-.--.-",".-.-.","--..--","-....-",".-.-.-","-..-.","-...-","..--..","..--.-"}; 40/* 41' (single apostrophe) • — — — — • 42" (quote) • — • • — • 43: (colon) — — — • • • 44; (semicolon) — • — • — • 45@ (monkey or at) • — — • — • 46*/ 47 48void setup() { 49 50 Serial.begin(9600); 51 u8g2.begin(); 52 u8g2.setContrast(210); 53 Timer1.initialize(1000); 54 Timer1.attachInterrupt(Zliczaj); 55} 56 57void loop() { 58 //Serial.println(s); 59 //delay(100); 60 Display(); 61} 62 63void Display() { 64 //sprintf(S_str,"%d", s); 65 //sprintf(P_str,"%d", r); 66 u8g2.setFontMode(1); 67 u8g2.setFont(u8g2_font_10x20_tr); 68 u8g2.firstPage(); 69 do { 70 u8g2.drawStr(0, 15, "Morse"); 71 u8g2.drawStr(75, 15, wpm_str); 72 u8g2.drawStr(98, 15, "w/m"); 73 //u8g2.drawStr(75, 30, S_str); 74 //u8g2.drawStr(105, 30, P_str); 75 for (k = 0; k < 12; k++){ 76 u8g2.drawStr(k*10, 40, wiersz1[k] ); //top line 77 u8g2.drawStr(k*10, 60, wiersz[k] ); //workline 78 } 79 } while ( u8g2.nextPage() ); 80 delay(10); 81} 82 83void Zliczaj(){ 84 readPin1 = analogRead(inPin1); 85 if (readPin1 > 10 ) { //key is pressed 86 z++; 87 if (z == 1){ 88 r = p; 89 //Display(); //Displays the length of the last pause 90 //delay(5); 91 p = 0; 92 } 93 } 94 if (readPin1 <= 10) { //key released 95 p++; 96 if (p == 1) { 97 s = z; 98 if ( kropka == 0){ 99 kropka = s ; 100 //wpm = 1200/s; 101 //sprintf(wpm_str,"%d", wpm); 102 } 103 if ( z > 5 && z < 1.5 * kropka){ znak_M = "."; kropka = z ;} 104 if ( z > 2 * kropka ){ znak_M = "-";} 105 if ( r < 2 * kropka){ litera_M += znak_M;} 106 if ( litera_M.length() == 0 ) {litera_M = znak_M;} 107 z = 0; 108 } 109 if (p == 2 * kropka) { 110 wpm = 1200/kropka; 111 if (wpm > 90) {wpm = 0 ; z = 0;} 112 sprintf(wpm_str,"%d", wpm); 113 if ( litera_M.length() > 0 ) { 114 ZnajdzZnak(); 115 i++; 116 wiersz[i-1] = znak; 117 if (i > 11) { 118 for (int k = 0; k < 12; k++) { 119 wiersz1[k] = " "; //delete the top line 120 wiersz1[k] = wiersz[k]; //rewriting characters from the working line to the top line 121 wiersz[k] = " "; //delete work line 122 } 123 i = 0; 124 } 125 } 126 Display(); //displays the read characters 127 } 128 if (p == 100 * kropka && i > 0) { 129 for (int k = 0; k < 12; k++) { 130 wiersz1[k] = " "; //rewriting characters from the working line to the top line 131 wiersz1[k] = wiersz[k]; //rewriting characters from the working line to the top line 132 wiersz[k] = " "; //delete work line 133 } 134 i = 0; 135 Display(); //Displays the characters read 136 } 137 } 138} 139 140void ZnajdzZnak(){ 141 znak = ""; 142 for (k = 0; k <= index_key; k++){ 143 if (Morse[k] == litera_M) { 144 znak = Z_char[k]; //converting the key code to a letter 145 break; 146 } 147 } 148 k = 0; 149 litera_M = ""; 150}
Downloadable files
schematic
...
Schematic.png
Comments
Only logged in users can leave comments
mircemk
0 Followers
•0 Projects
Table of contents
Intro
0
0