Table of Contents

cod_morse_code.zip

Morse Light

Un transmitator de cod Morse

Prezentarea pe scurt a proiectului

https://ocw.cs.pub.ro/courses/_media/pm/prj2023/danieldd/poza_proiect.jpeg

Descriere generală

https://ocw.cs.pub.ro/courses/_media/pm/prj2023/danieldd/pm.png

Software Design

Codul include biblioteca `SoftwareSerial` pentru a permite comunicarea cu modulul Bluetooth prin intermediul unei conexiuni seriale. Obiectul `BTSerial` este creat pentru a realiza comunicarea pe pinii 2 (RX) și 3 (TX) cu modulul Bluetooth.

Constantele `ledPin`, `photoresistorPin` și `threshold` definesc numerele de pin pentru LED și fotoresistor, respectiv valoarea pragului pentru detectare a intensității luminii.

În funcția `loop()`, se citește un cuvânt până la întâlnirea caracterului '\n' și se apelează funcția `encryptToMorseCode()` pentru a cripta cuvântul în cod Morse și a stoca rezultatul în bufferul `buffer`. Apoi, se apelează funcția `decodeMorseCode()` pentru a decodifica codul Morse și a obține mesajul decodificat. Mesajul decodificat este trimis prin Bluetooth utilizând `BTSerial`, se afișează conținutul bufferului și se resetează bufferul. Am folosit aplicatia Arduino Blue Control. Cuvantul se ia de la tastarura in Serial Monitor si va fi afisat dupa tot procesul de codare si decodificare in terminalul de la aplicatia Android.

Funcția `encryptToMorseCode()` primește un cuvânt și îl criptează în cod Morse. Fiecare caracter este verificat și, dacă este o literă mică, este convertită în literă mare. Pentru fiecare caracter, se obține codul Morse corespunzător din array-ul `letters[]` și se adaugă în bufferul `buffer`, apelând în același timp funcția `blinkMorseCode()` pentru a realiza efectul de blink pe LED. Se adaugă și un spațiu în buffer pentru a separa codurile Morse ale caracterelor. Se folosesc și delay-uri pentru a crea ritmul adecvat în blink-ul LED-ului.

Funcția `blinkMorseCode()` primește un cod Morse și realizează blink-ul LED-ului în funcție de caracterul primit. Se folosește digitalWrite pentru a seta pinul `ledPin` ca HIGH pentru o durată specifică în funcție de codul Morse (punct sau linie) și apoi se setează pinul ca LOW pentru o perioadă scurtă de timp.

Funcțiile `startReading()` și `endReading()` sunt folosite pentru a citi valorile de lumină de la fotoresistor în timpul blink-urilor LED-ului. `startReading()` este apelată atunci când apare o întrerupere pe pinul `ledPin` și setează flag-ul `readingFlag` ca fiind activat, semnalizând că citirea poate începe. `endReading()` este apelată la sfârșitul citirii și verifică valoarea de lumină de la fotoresistor. În funcție de valoare, adaugă codul Morse corespunzător în buffer și setează flag-ul `readingFlag` ca fiind dezactivat, semnalizând că citirea s-a încheiat.

Funcțiile `printBuffer()`, `resetBuffer()`, `decodeMorseCode()` și `decodeMorseCharacter()` sunt folosite pentru afișarea și decodificarea bufferului `buffer` în mesajul final.

Hardware Design

https://ocw.cs.pub.ro/courses/_media/pm/prj2023/danieldd/diagrama.png

Listă de piese:

Downloads

https://ocw.cs.pub.ro/courses/start?image=pm%3Aprj2023%3Adanieldd%3Acod_morse_code.zip&ns=pm%3Aprj2023%3Adanieldd&tab_details=view&do=media

Rezultate Obtinute

Demo proiect:

https://drive.google.com/file/d/1qtSOMZwuhkAhmybOxxt_7-lEc4UBH_tP/view?usp=sharing

Export to PDF