// I/O Pins int ledPin = 7; // red led connected to digital pin 6 int txPin = 3; // radio tx line int radioPin = 4; //connected to transistor and Relay to control resistor heaters on gps. int loopcount = 0, cycle = 0; //Tx Stuff char txbuf[12]; struct t_mtab { char c, pat; } ; struct t_mtab morsetab[] = { {'.', 106}, {',', 115}, {'?', 76}, {'/', 41}, {'-', 97}, {'A', 6}, {'B', 17}, {'C', 21}, {'D', 9}, {'E', 2}, {'F', 20}, {'G', 11}, {'H', 16}, {'I', 4}, {'J', 30}, {'K', 13}, {'L', 18}, {'M', 7}, {'N', 5}, {'O', 15}, {'P', 22}, {'Q', 27}, {'R', 10}, {'S', 8}, {'T', 3}, {'U', 12}, {'V', 24}, {'W', 14}, {'X', 25}, {'Y', 29}, {'Z', 19}, {'1', 62}, {'2', 60}, {'3', 56}, {'4', 48}, {'5', 32}, {'6', 33}, {'7', 35}, {'8', 39}, {'9', 47}, {'0', 63} } ; #define N_MORSE (sizeof(morsetab)/sizeof(morsetab[0])) #define SPEED (15) #define DOTLEN (1200/SPEED) #define DASHLEN (3*(1200/SPEED)) void dash() { digitalWrite(ledPin, HIGH) ; digitalWrite(txPin, HIGH) ; delay(DASHLEN); digitalWrite(ledPin, LOW) ; digitalWrite(txPin, LOW) ; delay(DOTLEN) ; } void dit() { digitalWrite(ledPin, HIGH) ; digitalWrite(txPin, HIGH) ; delay(DOTLEN); digitalWrite(ledPin, LOW) ; digitalWrite(txPin, LOW) ; delay(DOTLEN); } void send(char c) { int i ; if (c == ' ') { Serial.print(c) ; delay(7*DOTLEN) ; return ; } for (i=0; i<N_MORSE; i++) { if (morsetab[i].c == c) { unsigned char p = morsetab[i].pat ; Serial.print(morsetab[i].c) ; while (p != 1) { if (p & 1) dash() ; else dit() ; p = p / 2 ; } delay(2*DOTLEN) ; return ; } } /* if we drop off the end, then we send a space */ Serial.print("?") ; } void sendmsg(char *str) { while (*str) send(*str++) ; Serial.println(""); } void setup() { Serial.begin(4800); // start serial for output Serial.println("Starting..."); pinMode(ledPin, OUTPUT); pinMode(txPin, OUTPUT); pinMode(radioPin, OUTPUT); digitalWrite(ledPin, HIGH); delay(2000); digitalWrite(ledPin,LOW); } void loop() { //Tx Stuff if(cycle >= 10) { digitalWrite(radioPin, HIGH); delay(1000); cycle = 0; loopcount++; if (loopcount > 3) { loopcount = 0; } switch(loopcount) { case 1: sendmsg("VVV,ATLAS,1/3,HIGH,ALTITUDE,BALLOON"); break; case 2: sendmsg("VVV,ATLAS,2/3,RTTY,434.075,ASCII8,50,350,0,1.5"); break; case 3: sendmsg("VVV,ATLAS,3/3,WWW.SPACENEAR.US/TRACKER/"); break; } digitalWrite(radioPin, LOW); } else { cycle++; } delay(5000); }