Morse Coder that asks through serial terminal for input of a word or sentence, and after that translates it to morse code. The result can be seen in serial terminal and using the HW components: 3 LED's and 1 piezzo buzzer.

Dependencies:   led buzzer

https://os.mbed.com/media/uploads/khodak/shema.jpg

Program se sastoji od: • 3x LED-ice od kojih svaka prikazuje različito stanje u programu • 1x Integrirana LED koja označava početak rada programa • 1x Integrirano tipkalo za Hardwareski interupt • 1x Piezzo buzzer koji zvukom signalizira stanje u programu • 1x NUCLEO-F072RB pločica mikroupravljača • Serial Terminal za unos riječi/rečenice

Sustav započinje tako da preko serial terminala traži da se unese riječ ili rečenica preko tipkovnice. Nakon što se riječ ili rečenica unese te pritisne tipka Enter, program još jednom prolazi kroz unesena slova te kreće sa kodiranjem istih. Prilikom kodiranja poziva se funkcija morseCoder koja prima po jedan znak, te ga prevodi na način da na serial terminalu ispisuje znak po znak ritmički. Istovremeno na Zelenoj i Žutoj LED možemo vidjeti blinkanje u intervalu ovisno radi li se o točci ili crti (dot/dash). Zelena LED predstavlja dash i svijetli 0.75 s, a Žuta LED predstavlja dot i svijetli 0.25 s. Cjelokupni interval traje 1s. Istovremeno dok LED-ice svijetle piezzo buzzer ispušta tonove na dvije frekvencije, višoj (659.3Hz) za Dot, nižoj (440Hz) za dash. Nakon 3 s program se resetira te ponovo započinje sa traženjem riječi/rečenice.

Integrirano tipkalo i crvena LED služe za označavanje perioda interrupta. Pritiskom na tipkalo započinje interrupt koji zaustavlja rad programa na 5 s, a u istom tom vremenu Crvena LED radi neprekidno. Nakon 5 s sustav nastavlja sa normalnim radom.

Integrirana LED mijenja stanje svaku 1s koristeći jednostavni ticker.

Za Serial Terminal koristim Tera Term, i unosim riječi/rečenice koje želim kodirati.

Committer:
khodak
Date:
Thu Nov 19 10:47:52 2020 +0000
Revision:
1:cb0ac873f9e8
Parent:
0:e949310764ca
Published libraries, finished project

Who changed what in which revision?

UserRevisionLine numberNew contents of line
khodak 0:e949310764ca 1 #include "mbed.h"
khodak 0:e949310764ca 2 #include "buzzer.h"
khodak 0:e949310764ca 3 #include "led.h"
khodak 0:e949310764ca 4 #include <stdio.h>
khodak 0:e949310764ca 5 #include <ctype.h>
khodak 0:e949310764ca 6
khodak 0:e949310764ca 7 //HW komponente
khodak 0:e949310764ca 8 InterruptIn button(USER_BUTTON);//p18
khodak 0:e949310764ca 9 Serial pc(USBTX, USBRX);
khodak 0:e949310764ca 10 Beep buzzer(D2);//p21
khodak 0:e949310764ca 11 LED dotLED(D3);//p5
khodak 0:e949310764ca 12 LED dashLED(D4);//p6
khodak 0:e949310764ca 13 LED interruptLED(D5);//p7
khodak 0:e949310764ca 14 DigitalOut workingLED(LED1);
khodak 0:e949310764ca 15 Timer debounce;
khodak 0:e949310764ca 16 Ticker flipper;
khodak 0:e949310764ca 17
khodak 0:e949310764ca 18 //Inicijalizirane vrijednosti za buzzer i led
khodak 0:e949310764ca 19 float time_delay = 1;
khodak 0:e949310764ca 20 float timeDot = 0.25;
khodak 0:e949310764ca 21 float timeDash = 0.75;
khodak 0:e949310764ca 22 float freqDot = 659.3; // ton za Dot
khodak 0:e949310764ca 23 float freqDash = 440.0; // ton za Dash
khodak 0:e949310764ca 24
khodak 0:e949310764ca 25 //Prototipi funkcija
khodak 0:e949310764ca 26 void flip(void);
khodak 0:e949310764ca 27 void interrupt(void);
khodak 0:e949310764ca 28 void clearAndHomeSerial(void);
khodak 0:e949310764ca 29 void buzzerDot(void);
khodak 0:e949310764ca 30 void buzzerDash(void);
khodak 0:e949310764ca 31 void dot(void);
khodak 0:e949310764ca 32 void dash(void);
khodak 0:e949310764ca 33 void morseCoder(char sign);
khodak 0:e949310764ca 34
khodak 0:e949310764ca 35
khodak 0:e949310764ca 36 int main()
khodak 0:e949310764ca 37 {
khodak 0:e949310764ca 38 debounce.start();
khodak 0:e949310764ca 39 button.rise(&interrupt);
khodak 0:e949310764ca 40 flipper.attach(&flip,time_delay);
khodak 0:e949310764ca 41
khodak 0:e949310764ca 42 while(1) {
khodak 0:e949310764ca 43 char sentence[50];
khodak 0:e949310764ca 44 pc.printf("Unesite recenicu: ");
khodak 0:e949310764ca 45 char c;
khodak 0:e949310764ca 46 int i=0;
khodak 0:e949310764ca 47 while(1) {
khodak 0:e949310764ca 48 c = pc.getc();
khodak 0:e949310764ca 49 if(c==8) {
khodak 0:e949310764ca 50 i--;
khodak 0:e949310764ca 51 continue;
khodak 0:e949310764ca 52 }
khodak 0:e949310764ca 53 pc.printf("%c",c);
khodak 0:e949310764ca 54 if(c==13) {
khodak 0:e949310764ca 55 break;
khodak 0:e949310764ca 56 }
khodak 0:e949310764ca 57 sentence[i]=tolower(c);
khodak 0:e949310764ca 58 i++;
khodak 0:e949310764ca 59
khodak 0:e949310764ca 60 }
khodak 0:e949310764ca 61 pc.printf("\r\n");
khodak 0:e949310764ca 62
khodak 0:e949310764ca 63 int size = i;
khodak 0:e949310764ca 64 char newSentence[size];
khodak 0:e949310764ca 65 for(i=0; i<size; i++) {
khodak 0:e949310764ca 66 newSentence[i]=sentence[i];
khodak 0:e949310764ca 67 }
khodak 0:e949310764ca 68
khodak 0:e949310764ca 69 pc.printf("Upisana recenica : ");
khodak 0:e949310764ca 70 for(i=0; i<size; i++) {
khodak 0:e949310764ca 71 pc.printf("%c",newSentence[i]);
khodak 0:e949310764ca 72 }
khodak 0:e949310764ca 73 pc.printf("\r\n");
khodak 0:e949310764ca 74 pc.printf("Kodirana recenica: ");
khodak 0:e949310764ca 75
khodak 0:e949310764ca 76 for(i=0; i<sizeof(newSentence); i++) {
khodak 0:e949310764ca 77 morseCoder(newSentence[i]);
khodak 0:e949310764ca 78 }
khodak 0:e949310764ca 79 wait(5);
khodak 0:e949310764ca 80 clearAndHomeSerial();
khodak 0:e949310764ca 81 }
khodak 0:e949310764ca 82 return 0;
khodak 0:e949310764ca 83 }
khodak 0:e949310764ca 84
khodak 0:e949310764ca 85 //Funkcija mijenja stanje LED-ice koja označava rad programa
khodak 0:e949310764ca 86 void flip(){
khodak 0:e949310764ca 87 workingLED = !workingLED;
khodak 0:e949310764ca 88 }
khodak 0:e949310764ca 89
khodak 0:e949310764ca 90 //Funkcija koja se poziva nakon pritiska interrupt buttona
khodak 0:e949310764ca 91 void interrupt()
khodak 0:e949310764ca 92 {
khodak 0:e949310764ca 93
khodak 0:e949310764ca 94 if (debounce.read_ms()>200) {
khodak 0:e949310764ca 95 interruptLED.flip();
khodak 0:e949310764ca 96 wait_us(5000000);
khodak 0:e949310764ca 97 interruptLED.flip();
khodak 0:e949310764ca 98 }
khodak 0:e949310764ca 99 debounce.reset();
khodak 0:e949310764ca 100 }
khodak 0:e949310764ca 101
khodak 0:e949310764ca 102 //Funkcija koja čisti ekran terminala
khodak 0:e949310764ca 103 void clearAndHomeSerial()
khodak 0:e949310764ca 104 {
khodak 0:e949310764ca 105 //Serial Terminal
khodak 0:e949310764ca 106 pc.printf("%c",char(27)); // ESC
khodak 0:e949310764ca 107 pc.printf("[2J"); // clear screen
khodak 0:e949310764ca 108 pc.printf("%c",char(27)); // ESC
khodak 0:e949310764ca 109 pc.printf("[H"); // cursor to home
khodak 0:e949310764ca 110 }
khodak 0:e949310764ca 111
khodak 0:e949310764ca 112 //Funkcija poziva beep metodu za buzzer sa parametrima frekvencije i vremenskog perioda trajanja točke (dot)
khodak 0:e949310764ca 113 void buzzerDot()
khodak 0:e949310764ca 114 {
khodak 0:e949310764ca 115 buzzer.beep(freqDot,timeDot);
khodak 0:e949310764ca 116 }
khodak 0:e949310764ca 117
khodak 0:e949310764ca 118 //Funkcija poziva beep metodu za buzzer sa parametrima frekvencije i vremenskog perioda trajanja crte (dash)
khodak 0:e949310764ca 119 void buzzerDash()
khodak 0:e949310764ca 120 {
khodak 0:e949310764ca 121 buzzer.beep(freqDash,timeDash);
khodak 0:e949310764ca 122 }
khodak 0:e949310764ca 123
khodak 0:e949310764ca 124 //Funkcija pali i gasi LED i buzzer u periodu koji je određen za točku (dot)
khodak 0:e949310764ca 125 void dot()
khodak 0:e949310764ca 126 {
khodak 0:e949310764ca 127 pc.printf(".");
khodak 0:e949310764ca 128 dotLED.flip();
khodak 0:e949310764ca 129 buzzerDot();
khodak 0:e949310764ca 130 wait(timeDot);
khodak 0:e949310764ca 131 dotLED.flip();
khodak 0:e949310764ca 132 }
khodak 0:e949310764ca 133
khodak 0:e949310764ca 134 //Funkcija pali i gasi LED i buzzer u periodu koji je određen za crtu (dash)
khodak 0:e949310764ca 135 void dash()
khodak 0:e949310764ca 136 {
khodak 0:e949310764ca 137 pc.printf("-");
khodak 0:e949310764ca 138 dashLED.flip();
khodak 0:e949310764ca 139 buzzerDash();
khodak 0:e949310764ca 140 wait(timeDash);
khodak 0:e949310764ca 141 dashLED.flip();
khodak 0:e949310764ca 142 }
khodak 0:e949310764ca 143
khodak 0:e949310764ca 144 //Funkcija dobiva znak te pokreće te isti prevodi u Morse abecedu, i sukladno tome pokreće metode vezane uz prikaz
khodak 0:e949310764ca 145 void morseCoder(char sign)
khodak 0:e949310764ca 146 {
khodak 0:e949310764ca 147
khodak 0:e949310764ca 148 switch (sign) {
khodak 0:e949310764ca 149 case 'a':
khodak 0:e949310764ca 150 dot();
khodak 0:e949310764ca 151 wait(time_delay);
khodak 0:e949310764ca 152 dash();
khodak 0:e949310764ca 153 wait(time_delay);
khodak 0:e949310764ca 154 break;
khodak 0:e949310764ca 155 case 'b':
khodak 0:e949310764ca 156 dash();
khodak 0:e949310764ca 157 wait(time_delay);
khodak 0:e949310764ca 158 dot();
khodak 0:e949310764ca 159 wait(time_delay);
khodak 0:e949310764ca 160 dot();
khodak 0:e949310764ca 161 wait(time_delay);
khodak 0:e949310764ca 162 dot();
khodak 0:e949310764ca 163 wait(time_delay);
khodak 0:e949310764ca 164 break;
khodak 0:e949310764ca 165 case 'c':
khodak 0:e949310764ca 166 dash();
khodak 0:e949310764ca 167 wait(time_delay);
khodak 0:e949310764ca 168 dot();
khodak 0:e949310764ca 169 wait(time_delay);
khodak 0:e949310764ca 170 dash();
khodak 0:e949310764ca 171 wait(time_delay);
khodak 0:e949310764ca 172 dot();
khodak 0:e949310764ca 173 wait(time_delay);
khodak 0:e949310764ca 174 break;
khodak 0:e949310764ca 175 case 'd':
khodak 0:e949310764ca 176 dash();
khodak 0:e949310764ca 177 wait(time_delay);
khodak 0:e949310764ca 178 dot();
khodak 0:e949310764ca 179 wait(time_delay);
khodak 0:e949310764ca 180 dot();
khodak 0:e949310764ca 181 wait(time_delay);
khodak 0:e949310764ca 182 break;
khodak 0:e949310764ca 183 case 'e':
khodak 0:e949310764ca 184 dot();
khodak 0:e949310764ca 185 wait(time_delay);
khodak 0:e949310764ca 186 break;
khodak 0:e949310764ca 187 case 'f':
khodak 0:e949310764ca 188 dot();
khodak 0:e949310764ca 189 wait(time_delay);
khodak 0:e949310764ca 190 dot();
khodak 0:e949310764ca 191 wait(time_delay);
khodak 0:e949310764ca 192 dash();
khodak 0:e949310764ca 193 wait(time_delay);
khodak 0:e949310764ca 194 dot();
khodak 0:e949310764ca 195 wait(time_delay);
khodak 0:e949310764ca 196 break;
khodak 0:e949310764ca 197 case 'g':
khodak 0:e949310764ca 198 dash();
khodak 0:e949310764ca 199 wait(time_delay);
khodak 0:e949310764ca 200 dash();
khodak 0:e949310764ca 201 wait(time_delay);
khodak 0:e949310764ca 202 dot();
khodak 0:e949310764ca 203 wait(time_delay);
khodak 0:e949310764ca 204 break;
khodak 0:e949310764ca 205 case 'h':
khodak 0:e949310764ca 206 dot();
khodak 0:e949310764ca 207 wait(time_delay);
khodak 0:e949310764ca 208 dot();
khodak 0:e949310764ca 209 wait(time_delay);
khodak 0:e949310764ca 210 dot();
khodak 0:e949310764ca 211 wait(time_delay);
khodak 0:e949310764ca 212 dot();
khodak 0:e949310764ca 213 wait(time_delay);
khodak 0:e949310764ca 214 break;
khodak 0:e949310764ca 215 case 'i':
khodak 0:e949310764ca 216 dot();
khodak 0:e949310764ca 217 wait(time_delay);
khodak 0:e949310764ca 218 dot();
khodak 0:e949310764ca 219 wait(time_delay);
khodak 0:e949310764ca 220 break;
khodak 0:e949310764ca 221 case 'j':
khodak 0:e949310764ca 222 dot();
khodak 0:e949310764ca 223 wait(time_delay);
khodak 0:e949310764ca 224 dash();
khodak 0:e949310764ca 225 wait(time_delay);
khodak 0:e949310764ca 226 dash();
khodak 0:e949310764ca 227 wait(time_delay);
khodak 0:e949310764ca 228 dash();
khodak 0:e949310764ca 229 wait(time_delay);
khodak 0:e949310764ca 230 break;
khodak 0:e949310764ca 231 case 'k':
khodak 0:e949310764ca 232 dash();
khodak 0:e949310764ca 233 wait(time_delay);
khodak 0:e949310764ca 234 dot();
khodak 0:e949310764ca 235 wait(time_delay);
khodak 0:e949310764ca 236 dash();
khodak 0:e949310764ca 237 wait(time_delay);
khodak 0:e949310764ca 238 break;
khodak 0:e949310764ca 239 case 'l':
khodak 0:e949310764ca 240 dot();
khodak 0:e949310764ca 241 wait(time_delay);
khodak 0:e949310764ca 242 dash();
khodak 0:e949310764ca 243 wait(time_delay);
khodak 0:e949310764ca 244 dot();
khodak 0:e949310764ca 245 wait(time_delay);
khodak 0:e949310764ca 246 dot();
khodak 0:e949310764ca 247 wait(time_delay);
khodak 0:e949310764ca 248 break;
khodak 0:e949310764ca 249 case 'm':
khodak 0:e949310764ca 250 dash();
khodak 0:e949310764ca 251 wait(time_delay);
khodak 0:e949310764ca 252 dash();
khodak 0:e949310764ca 253 wait(time_delay);
khodak 0:e949310764ca 254 break;
khodak 0:e949310764ca 255 case 'n':
khodak 0:e949310764ca 256 dash();
khodak 0:e949310764ca 257 wait(time_delay);
khodak 0:e949310764ca 258 dot();
khodak 0:e949310764ca 259 wait(time_delay);
khodak 0:e949310764ca 260 break;
khodak 0:e949310764ca 261 case 'o':
khodak 0:e949310764ca 262 dash();
khodak 0:e949310764ca 263 wait(time_delay);
khodak 0:e949310764ca 264 dash();
khodak 0:e949310764ca 265 wait(time_delay);
khodak 0:e949310764ca 266 dash();
khodak 0:e949310764ca 267 wait(time_delay);
khodak 0:e949310764ca 268 break;
khodak 0:e949310764ca 269 case 'p':
khodak 0:e949310764ca 270 dot();
khodak 0:e949310764ca 271 wait(time_delay);
khodak 0:e949310764ca 272 dash();
khodak 0:e949310764ca 273 wait(time_delay);
khodak 0:e949310764ca 274 dash();
khodak 0:e949310764ca 275 wait(time_delay);
khodak 0:e949310764ca 276 dot();
khodak 0:e949310764ca 277 wait(time_delay);
khodak 0:e949310764ca 278 break;
khodak 0:e949310764ca 279 case 'q':
khodak 0:e949310764ca 280 dash();
khodak 0:e949310764ca 281 wait(time_delay);
khodak 0:e949310764ca 282 dash();
khodak 0:e949310764ca 283 wait(time_delay);
khodak 0:e949310764ca 284 dot();
khodak 0:e949310764ca 285 wait(time_delay);
khodak 0:e949310764ca 286 dash();
khodak 0:e949310764ca 287 wait(time_delay);
khodak 0:e949310764ca 288 break;
khodak 0:e949310764ca 289 case 'r':
khodak 0:e949310764ca 290 dot();
khodak 0:e949310764ca 291 wait(time_delay);
khodak 0:e949310764ca 292 dash();
khodak 0:e949310764ca 293 wait(time_delay);
khodak 0:e949310764ca 294 dot();
khodak 0:e949310764ca 295 wait(time_delay);
khodak 0:e949310764ca 296 break;
khodak 0:e949310764ca 297 case 's':
khodak 0:e949310764ca 298 dot();
khodak 0:e949310764ca 299 wait(time_delay);
khodak 0:e949310764ca 300 dot();
khodak 0:e949310764ca 301 wait(time_delay);
khodak 0:e949310764ca 302 dot();
khodak 0:e949310764ca 303 wait(time_delay);
khodak 0:e949310764ca 304 break;
khodak 0:e949310764ca 305 case 't':
khodak 0:e949310764ca 306 dash();
khodak 0:e949310764ca 307 wait(time_delay);
khodak 0:e949310764ca 308 break;
khodak 0:e949310764ca 309 case 'u':
khodak 0:e949310764ca 310 dot();
khodak 0:e949310764ca 311 wait(time_delay);
khodak 0:e949310764ca 312 dot();
khodak 0:e949310764ca 313 wait(time_delay);
khodak 0:e949310764ca 314 dash();
khodak 0:e949310764ca 315 wait(time_delay);
khodak 0:e949310764ca 316 break;
khodak 0:e949310764ca 317 case 'v':
khodak 0:e949310764ca 318 dot();
khodak 0:e949310764ca 319 wait(time_delay);
khodak 0:e949310764ca 320 dot();
khodak 0:e949310764ca 321 wait(time_delay);
khodak 0:e949310764ca 322 dot();
khodak 0:e949310764ca 323 wait(time_delay);
khodak 0:e949310764ca 324 dash();
khodak 0:e949310764ca 325 wait(time_delay);
khodak 0:e949310764ca 326 break;
khodak 0:e949310764ca 327 case 'w':
khodak 0:e949310764ca 328 dot();
khodak 0:e949310764ca 329 wait(time_delay);
khodak 0:e949310764ca 330 dash();
khodak 0:e949310764ca 331 wait(time_delay);
khodak 0:e949310764ca 332 dash();
khodak 0:e949310764ca 333 wait(time_delay);
khodak 0:e949310764ca 334 break;
khodak 0:e949310764ca 335 case 'x':
khodak 0:e949310764ca 336 dash();
khodak 0:e949310764ca 337 wait(time_delay);
khodak 0:e949310764ca 338 dot();
khodak 0:e949310764ca 339 wait(time_delay);
khodak 0:e949310764ca 340 dot();
khodak 0:e949310764ca 341 wait(time_delay);
khodak 0:e949310764ca 342 dash();
khodak 0:e949310764ca 343 wait(time_delay);
khodak 0:e949310764ca 344 break;
khodak 0:e949310764ca 345 case 'y':
khodak 0:e949310764ca 346 dash();
khodak 0:e949310764ca 347 wait(time_delay);
khodak 0:e949310764ca 348 dot();
khodak 0:e949310764ca 349 wait(time_delay);
khodak 0:e949310764ca 350 dash();
khodak 0:e949310764ca 351 wait(time_delay);
khodak 0:e949310764ca 352 dash();
khodak 0:e949310764ca 353 wait(time_delay);
khodak 0:e949310764ca 354 break;
khodak 0:e949310764ca 355 case 'z':
khodak 0:e949310764ca 356 dash();
khodak 0:e949310764ca 357 wait(time_delay);
khodak 0:e949310764ca 358 dash();
khodak 0:e949310764ca 359 wait(time_delay);
khodak 0:e949310764ca 360 dot();
khodak 0:e949310764ca 361 wait(time_delay);
khodak 0:e949310764ca 362 dot();
khodak 0:e949310764ca 363 wait(time_delay);
khodak 0:e949310764ca 364 break;
khodak 0:e949310764ca 365 case ' ':
khodak 0:e949310764ca 366 pc.printf(" ");
khodak 0:e949310764ca 367 wait(time_delay);
khodak 0:e949310764ca 368 break;
khodak 0:e949310764ca 369 }
khodak 0:e949310764ca 370 }