Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int speakerPin = 8;
- const int relayPin = 9;
- const int unit = 130; // unitatea de timp în milisecunde
- const int dotDuration = unit;
- const int dashDuration = 3 * unit;
- const int elementSpace = unit;
- const int charSpace = 3 * unit;
- const int wordSpace = 7 * unit;
- const char* words[] = {"MOE", "MOI", "MOS", "MOH", "MO5"};
- const int numWords = 5;
- void setup() {
- pinMode(speakerPin, OUTPUT);
- pinMode(relayPin, OUTPUT);
- digitalWrite(relayPin, LOW);
- noTone(speakerPin);
- }
- bool sendSequence(const char* sequence, unsigned long startTime) {
- for (int i = 0; sequence[i] != '\0'; i++) {
- char element = sequence[i];
- // Activează tonul și releul
- tone(speakerPin, 1000);
- digitalWrite(relayPin, HIGH);
- unsigned long elementDuration = (element == '.') ? dotDuration : dashDuration;
- unsigned long elementStart = millis();
- while (millis() - elementStart < elementDuration) {
- if (millis() - startTime >= 60000) {
- noTone(speakerPin);
- digitalWrite(relayPin, LOW);
- return true;
- }
- }
- // Dezactivează tonul și releul
- noTone(speakerPin);
- digitalWrite(relayPin, LOW);
- // Spațiu între elemente (dacă nu e ultimul)
- if (sequence[i+1] != '\0') {
- unsigned long spaceStart = millis();
- while (millis() - spaceStart < elementSpace) {
- if (millis() - startTime >= 60000) return true;
- }
- }
- }
- return false;
- }
- bool sendMorseChar(char c, unsigned long startTime) {
- const char* sequence = nullptr;
- switch (c) {
- case 'M': sequence = "--"; break;
- case 'O': sequence = "---"; break;
- case 'E': sequence = "."; break;
- case 'I': sequence = ".."; break;
- case 'S': sequence = "..."; break;
- case 'H': sequence = "...."; break;
- case '5': sequence = "....."; break;
- }
- if (sequence != nullptr) {
- return sendSequence(sequence, startTime);
- }
- return false;
- }
- void loop() {
- for (int i = 0; i < numWords; i++) {
- const char* word = words[i];
- unsigned long startTime = millis();
- bool timeExpired = false;
- while (!timeExpired && (millis() - startTime < 60000)) {
- for (int j = 0; j < strlen(word); j++) {
- timeExpired = sendMorseChar(word[j], startTime);
- if (timeExpired) break;
- // Spațiu între caractere (dacă nu e ultimul)
- if (j < strlen(word) - 1) {
- unsigned long spaceStart = millis();
- while (millis() - spaceStart < charSpace) {
- if (millis() - startTime >= 60000) {
- timeExpired = true;
- break;
- }
- }
- }
- if (timeExpired) break;
- }
- // Spațiu între cuvinte (doar dacă nu s-a terminat timpul)
- if (!timeExpired) {
- unsigned long spaceStart = millis();
- while (millis() - spaceStart < wordSpace) {
- if (millis() - startTime >= 60000) {
- timeExpired = true;
- break;
- }
- }
- }
- }
- }
- }
Advertisement
Comments
-
- Code for basic training in Radio Orienteering sport, Fox hunting, for ARDUINO UNO transmitting basic morse MOE, MOI, MOS, MOH, MO5. with 2 exits: Pin 8 speaker with 1000 Hz tone and Pin 9 relay output for TX keying
Add Comment
Please, Sign In to add comment
Advertisement