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.

Revision:
0:e949310764ca
diff -r 000000000000 -r e949310764ca main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Nov 19 10:43:44 2020 +0000
@@ -0,0 +1,370 @@
+#include "mbed.h"
+#include "buzzer.h"
+#include "led.h"
+#include <stdio.h>
+#include <ctype.h>
+
+//HW komponente
+InterruptIn button(USER_BUTTON);//p18
+Serial pc(USBTX, USBRX);
+Beep buzzer(D2);//p21
+LED dotLED(D3);//p5
+LED dashLED(D4);//p6
+LED interruptLED(D5);//p7
+DigitalOut workingLED(LED1);
+Timer debounce;
+Ticker flipper;
+
+//Inicijalizirane vrijednosti za buzzer i led
+float time_delay = 1;
+float timeDot = 0.25;
+float timeDash = 0.75;
+float freqDot = 659.3; // ton za Dot
+float freqDash = 440.0; // ton za Dash
+
+//Prototipi funkcija
+void flip(void);
+void interrupt(void);
+void clearAndHomeSerial(void);
+void buzzerDot(void);
+void buzzerDash(void);
+void dot(void);
+void dash(void);
+void morseCoder(char sign);
+
+
+int main()
+{
+    debounce.start();
+    button.rise(&interrupt);
+    flipper.attach(&flip,time_delay);
+
+    while(1) {
+        char sentence[50];
+        pc.printf("Unesite recenicu: ");
+        char c;
+        int i=0;
+        while(1) {
+            c = pc.getc();
+            if(c==8) {
+                i--;
+                continue;
+            }
+            pc.printf("%c",c);
+            if(c==13) {
+                break;
+            }
+            sentence[i]=tolower(c);
+            i++;
+
+        }
+        pc.printf("\r\n");
+
+        int size = i;
+        char newSentence[size];
+        for(i=0; i<size; i++) {
+            newSentence[i]=sentence[i];
+        }
+
+        pc.printf("Upisana recenica : ");
+        for(i=0; i<size; i++) {
+            pc.printf("%c",newSentence[i]);
+        }
+        pc.printf("\r\n");
+        pc.printf("Kodirana recenica: ");
+
+        for(i=0; i<sizeof(newSentence); i++) {
+            morseCoder(newSentence[i]);
+        }
+        wait(5);
+        clearAndHomeSerial();
+    }
+    return 0;
+}
+
+//Funkcija mijenja stanje LED-ice koja označava rad programa
+void flip(){
+    workingLED = !workingLED;
+    }
+
+//Funkcija koja se poziva nakon pritiska interrupt buttona
+void interrupt()
+{
+
+    if (debounce.read_ms()>200) {
+        interruptLED.flip();
+        wait_us(5000000);
+        interruptLED.flip();
+    }
+    debounce.reset();
+}
+
+//Funkcija koja čisti ekran terminala
+void clearAndHomeSerial()
+{
+//Serial Terminal
+    pc.printf("%c",char(27)); // ESC
+    pc.printf("[2J"); // clear screen
+    pc.printf("%c",char(27)); // ESC
+    pc.printf("[H"); // cursor to home
+}
+
+//Funkcija poziva beep metodu za buzzer sa parametrima frekvencije i vremenskog perioda trajanja točke (dot)
+void buzzerDot()
+{
+    buzzer.beep(freqDot,timeDot);
+}
+
+//Funkcija poziva beep metodu za buzzer sa parametrima frekvencije i vremenskog perioda trajanja crte (dash)
+void buzzerDash()
+{
+    buzzer.beep(freqDash,timeDash);
+}
+
+//Funkcija pali i gasi LED i buzzer u periodu koji je određen za točku (dot)
+void dot()
+{
+    pc.printf(".");
+    dotLED.flip();
+    buzzerDot();
+    wait(timeDot);
+    dotLED.flip();
+}
+
+//Funkcija pali i gasi LED i buzzer u periodu koji je određen za crtu (dash)
+void dash()
+{
+    pc.printf("-");
+    dashLED.flip();
+    buzzerDash();
+    wait(timeDash);
+    dashLED.flip();
+}
+
+//Funkcija dobiva znak te pokreće te isti prevodi u Morse abecedu, i sukladno tome pokreće metode vezane uz prikaz
+void morseCoder(char sign)
+{
+
+    switch (sign) {
+        case 'a':
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'b':
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'c':
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'd':
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'e':
+            dot();
+            wait(time_delay);
+            break;
+        case 'f':
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'g':
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'h':
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'i':
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'j':
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'k':
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'l':
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'm':
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'n':
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'o':
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'p':
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 'q':
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'r':
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 's':
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case 't':
+            dash();
+            wait(time_delay);
+            break;
+        case 'u':
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'v':
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'w':
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'x':
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'y':
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            break;
+        case 'z':
+            dash();
+            wait(time_delay);
+            dash();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            dot();
+            wait(time_delay);
+            break;
+        case ' ':
+            pc.printf(" ");
+            wait(time_delay);
+            break;
+    }
+}
\ No newline at end of file