Advertisement
yo9gjx

A.R.D.F. Fox hunting Arduino training controler version 2

Feb 13th, 2025
90
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.03 KB | Sports | 0 0
  1. const int speakerPin = 8;
  2. const int relayPin = 9;
  3.  
  4. const int unit = 130; // unitatea de timp în milisecunde
  5. const int dotDuration = unit;
  6. const int dashDuration = 3 * unit;
  7. const int elementSpace = unit;
  8. const int charSpace = 3 * unit;
  9. const int wordSpace = 7 * unit;
  10.  
  11. const char* words[] = {"MOE", "MOI", "MOS", "MOH", "MO5"};
  12. const int numWords = 5;
  13.  
  14. void setup() {
  15.   pinMode(speakerPin, OUTPUT);
  16.   pinMode(relayPin, OUTPUT);
  17.   digitalWrite(relayPin, LOW);
  18.   noTone(speakerPin);
  19. }
  20.  
  21. bool sendSequence(const char* sequence, unsigned long startTime) {
  22.   for (int i = 0; sequence[i] != '\0'; i++) {
  23.     char element = sequence[i];
  24.    
  25.     // Activează tonul și releul
  26.     tone(speakerPin, 1000);
  27.     digitalWrite(relayPin, HIGH);
  28.    
  29.     unsigned long elementDuration = (element == '.') ? dotDuration : dashDuration;
  30.     unsigned long elementStart = millis();
  31.     while (millis() - elementStart < elementDuration) {
  32.       if (millis() - startTime >= 60000) {
  33.         noTone(speakerPin);
  34.         digitalWrite(relayPin, LOW);
  35.         return true;
  36.       }
  37.     }
  38.    
  39.     // Dezactivează tonul și releul
  40.     noTone(speakerPin);
  41.     digitalWrite(relayPin, LOW);
  42.    
  43.     // Spațiu între elemente (dacă nu e ultimul)
  44.     if (sequence[i+1] != '\0') {
  45.       unsigned long spaceStart = millis();
  46.       while (millis() - spaceStart < elementSpace) {
  47.         if (millis() - startTime >= 60000) return true;
  48.       }
  49.     }
  50.   }
  51.   return false;
  52. }
  53.  
  54. bool sendMorseChar(char c, unsigned long startTime) {
  55.   const char* sequence = nullptr;
  56.   switch (c) {
  57.     case 'M': sequence = "--"; break;
  58.     case 'O': sequence = "---"; break;
  59.     case 'E': sequence = "."; break;
  60.     case 'I': sequence = ".."; break;
  61.     case 'S': sequence = "..."; break;
  62.     case 'H': sequence = "...."; break;
  63.     case '5': sequence = "....."; break;
  64.   }
  65.   if (sequence != nullptr) {
  66.     return sendSequence(sequence, startTime);
  67.   }
  68.   return false;
  69. }
  70.  
  71. void loop() {
  72.   for (int i = 0; i < numWords; i++) {
  73.     const char* word = words[i];
  74.     unsigned long startTime = millis();
  75.     bool timeExpired = false;
  76.    
  77.     while (!timeExpired && (millis() - startTime < 60000)) {
  78.       for (int j = 0; j < strlen(word); j++) {
  79.         timeExpired = sendMorseChar(word[j], startTime);
  80.         if (timeExpired) break;
  81.        
  82.         // Spațiu între caractere (dacă nu e ultimul)
  83.         if (j < strlen(word) - 1) {
  84.           unsigned long spaceStart = millis();
  85.           while (millis() - spaceStart < charSpace) {
  86.             if (millis() - startTime >= 60000) {
  87.               timeExpired = true;
  88.               break;
  89.             }
  90.           }
  91.         }
  92.         if (timeExpired) break;
  93.       }
  94.      
  95.       // Spațiu între cuvinte (doar dacă nu s-a terminat timpul)
  96.       if (!timeExpired) {
  97.         unsigned long spaceStart = millis();
  98.         while (millis() - spaceStart < wordSpace) {
  99.           if (millis() - startTime >= 60000) {
  100.             timeExpired = true;
  101.             break;
  102.           }
  103.         }
  104.       }
  105.     }
  106.   }
  107. }
Tags: A.R.D.F.
Advertisement
Comments
  • yo9gjx
    2 hours
    # text 0.21 KB | 0 0
    1. 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