".-", // A
"-...", // B
"-.-.", // C
"-..", // D
".", // E
"..-.", // F
"--.", // G
"....", // H
"..", // I
".---", // J
"-.-", // K
".-..", // L
"--", // M
"-.", // N
"---", // O
".--.", // P
"--.-", // Q
".-.", // R
"...", // S
"-", // T
"..-", // U
"...-", // V
".--", // W
"-..-", // X
"-.--", // Y
"--..", // Z
" ", // Medzera
};
// Tabuľka Morseových kódov pre čísla
const char* morseovkaCISLA[] = {
int rychlost=100; // Rychlost prehravanie (mozne zmenit podla potreby)
while (* morseovkaPISMENA != '\0') {
if (* morseovkaPISMENA == '.') { // Bodka '.'
set_bit(PORTD, repracik); // Zapnutie reproduktora
OCR0A = 100;
_delay_ms(rychlost); // dlzka bodky
clear_bit(PORTD, repracik); // Vypnutie reproduktora
OCR0A = 0;
_delay_ms(rychlost); // Pauza po bodke
} else if (* morseovkaPISMENA == '-') { // čiarka '-'
set_bit(PORTD, repracik); // Zapnutie reproduktora
OCR0A = 100;
_delay_ms(3*rychlost); // dlzka čiarky
clear_bit(PORTD, repracik); // Vypnutie reproduktora
OCR0A = 0;
_delay_ms(rychlost); // Pauza po čiarke
} else if (* morseovkaPISMENA == ' ') { // Pre medzeru
OCR0A = 0;
_delay_ms(7*rychlost); // Pauza pre medzeru
}
morseovkaPISMENA++; // Posunutie na ďalší znak
_delay_ms(3*rychlost); // Pauza po každom znaku
}
}
int main(void) {
UBRR0 = BAUD_PRESCALE; // Nastavenie hodnoty predelečníka UBRR
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // Nastavenie počtu bitov pre UART
UCSR0B = (1 << RXEN0) | (1 << TXEN0); // Aktivácia RX a TX pre UART
hrajreprak(); // Inicializácia reproduktora
while (1) {
while (!(UCSR0A & (1 << RXC0))) {}; // Čakanie na príchod znaku
znak = UDR0; // Uloženie prijatého znaku
if (( znak >= 'A' && znak <= 'Z') || ( znak >= 'a' && znak <= 'z')) { // Pre písmená
if ( znak >= 'a' && znak <= 'z') { // Ak je znak malé písmeno, premeníme ho na veľké
znak -= 32;
}
const char* morseovkaznak = morseovkaPISMENA[znak - 'A']; // Získanie Morseovho kódu pre písmeno
prehrajmorseovku(morseovkaznak); // Prehratie Morseovho kódu
} else if ( znak >= '0' && znak <= '9') { // Pre čísla
const char* morseovkacislo = morseovkaCISLA[znak - '0']; // Získanie Morseovho kódu pre číslo
prehrajmorseovku(morseovkacislo); // Prehratie Morseovho kódu
}
while (!(UCSR0A & (1 << UDRE0))) {}; // Čakanie na možnosť odoslať znak
UDR0 = znak; // Odoslanie prijatého znaku
}