From 5ee8a82cf757c7108d60b641a4c81a7842b305bb Mon Sep 17 00:00:00 2001 From: SnkMtn000 Date: Wed, 31 Jan 2018 17:57:25 -0500 Subject: [PATCH] Update and rename qst2_promini33_rfm69_Morse_Beacon_20180121.ino to promini33_rfm69_Morse_Beacon_20180121.ino --- ... promini33_rfm69_Morse_Beacon_20180121.ino | 447 +++++++++--------- 1 file changed, 224 insertions(+), 223 deletions(-) rename qst2_promini33_rfm69_Morse_Beacon_20180121.ino => promini33_rfm69_Morse_Beacon_20180121.ino (93%) diff --git a/qst2_promini33_rfm69_Morse_Beacon_20180121.ino b/promini33_rfm69_Morse_Beacon_20180121.ino similarity index 93% rename from qst2_promini33_rfm69_Morse_Beacon_20180121.ino rename to promini33_rfm69_Morse_Beacon_20180121.ino index 2dc6ff4..feb2f25 100644 --- a/qst2_promini33_rfm69_Morse_Beacon_20180121.ino +++ b/promini33_rfm69_Morse_Beacon_20180121.ino @@ -1,224 +1,225 @@ -/* - * A simple GPS Morse Beacon Sender - * for the HopeRF rfm69hcw - * on a ProMini 3.3 - * Charles Webb - * KC1ENN@arrl.net - * - * With thanks to.... - * - * "This code is so trivial that I'm releasing it completely without restrictions." - * Simple Arduino Morse Beacon v0.0 - * Written by Mark VandeWettering - * Check out my blog @ http://brainwagon.org - */ - -#include - -#define ssPin 10 // SS Chip select pin for reading/writing to the rf69 registers with SPI -//#define ssPin 8 // adafruit feather M0 -#define rstPin 9 // reset pin -//#define rstPin 4 // adafruit feather M0 -#define MY_DELAY 3000 // 3 second delay between loops, sending the message -#define N_MORSE (sizeof(morsetab)/sizeof(morsetab[0])) -#define SPEED (15) // WORKS 5 - 50 wpm FL-DIGI -#define DOTLEN (1200/SPEED) -#define DASHLEN (3*(1200/SPEED)) -//#define MY_TX_POWER 0x50 // PA0 only range 0x50 -18dBm to 0x5F -3dBm -//#define MY_TX_POWER 0x58 // 6 dBm -//#define MY_TX_POWER 0x5B // 9 dBm -//#define MY_TX_POWER 0x5E // 12 dBm -//#define MY_TX_POWER 0x70 // 2 dbm -#define MY_TX_POWER 0x7F // 17 dBm - -char mytext[80]; -String inputString = ""; // a String to hold incoming data -String myCallSign = "CALLSIGN/B TEST BEACON"; // Put more than callsign here, put your beacon string here -long myFrequency = 433200000; -//long myFrequency = 915000000; -String myString = ""; -String myCall = ". CALLSIGN/B"; -int myStringLen = 0; -unsigned int count=0; -//char mycount = 0; -int myHour, myMinute, mySecond, myAlt, mySpd, mySat; -double myLat, myLng; - -void setup() { - Serial.begin(9600); // baud speed for sending to the arduino serial monitor - Serial.println("Starting up"); // print to the serial monitor - pinMode(ssPin, OUTPUT); // define - pinMode(rstPin, OUTPUT); - setupSPI(); - delay(1000); - resetRFM69(); - delay(1000); - setupRFM69(); -} - -void loop() { - count++; - buildString(); - //myString = myCall; - myString.toUpperCase(); - myStringLen = myString.length(); - myString.toCharArray(mytext,myString.length() + 1); - // Serial.print("I am sending: "); Serial.println(myString); - sendmsg(mytext); - inputString = ""; - myString = ""; -} - -void buildString() { - myString = myCallSign; - myString.toUpperCase(); - myStringLen = myString.length(); - Serial.print("I am sending: "); Serial.println(myString); -} - -void setupRFM69() { - writeReg(0x02,0x34); // Modulation for OOK, Continuous w.o bit synch, OOK, no shaping - setFrequency(myFrequency); - writeReg(0x01,0x0C); // Set mode to Transmitter TX mode - Serial.println("Transmitter is ready...."); -} - -struct t_mtab { char c, pat; } ; - -struct t_mtab morsetab[] = { - {'.', 106}, - {',', 115}, - {'?', 76}, - {'/', 41}, - {'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} -} ; - -void resetRFM69() { - digitalWrite(rstPin, HIGH); - delay(100); - digitalWrite(rstPin, LOW); - delay(100); -} - -void printReg(byte data) { - Serial.print("Register "); - Serial.print(data); - Serial.print(" = "); - Serial.println(readReg(data), HEX); -} - -void writeReg(uint8_t addr, uint8_t value) { - digitalWrite(ssPin,LOW); - SPI.transfer(addr | 0x80); - SPI.transfer(value); - digitalWrite(ssPin, HIGH); -} - -uint8_t readReg(uint8_t addr) { - digitalWrite(ssPin, LOW); - SPI.transfer(addr & 0x7F); - uint8_t regval = SPI.transfer(0); - digitalWrite(ssPin, HIGH); - return regval; -} - -void setupSPI() { - SPI.begin(); - SPI.setBitOrder(MSBFIRST); - SPI.setClockDivider(SPI_CLOCK_DIV4); -} - -void setFrequency(uint32_t freqHz){ // Setup the frequency - freqHz /= 61; // resolution is 61 Hz so divide it it down and mask it out - writeReg(0x07, freqHz >> 16); // Frequency MSB - writeReg(0x08, freqHz >> 8); // Frequency Middle Byte - writeReg(0x09, freqHz); // Frequency LSB - Serial.print("Frequency set to "); Serial.println(myFrequency); -} - -void txOn(int txTime) { - writeReg(0x11,MY_TX_POWER); // PA On ******************************************* - delay(txTime); - writeReg(0x11,0x00); // PA off ************************************************* -} - -void dash() { - txOn(DASHLEN); - delay(DOTLEN); -} - -void dit() { - txOn(DOTLEN); - delay(DOTLEN); -} - -void send(char c) { - int i ; - if (c == ' ') { - //Serial.print(c) ; - delay(7*DOTLEN) ; - return ; - } - for (i=0; i + * Check out my blog @ http://brainwagon.org + */ + +#include + +#define ssPin 10 // SS Chip select pin for reading/writing to the rf69 registers with SPI +//#define ssPin 8 // adafruit feather M0 +#define rstPin 9 // reset pin +//#define rstPin 4 // adafruit feather M0 +#define MY_DELAY 3000 // 3 second delay between loops, sending the message +#define N_MORSE (sizeof(morsetab)/sizeof(morsetab[0])) +#define SPEED (15) // WORKS 5 - 50 wpm FL-DIGI +#define DOTLEN (1200/SPEED) +#define DASHLEN (3*(1200/SPEED)) +//#define MY_TX_POWER 0x50 // PA0 only range 0x50 -18dBm to 0x5F -3dBm +//#define MY_TX_POWER 0x58 // 6 dBm +//#define MY_TX_POWER 0x5B // 9 dBm +//#define MY_TX_POWER 0x5E // 12 dBm +//#define MY_TX_POWER 0x70 // 2 dbm +#define MY_TX_POWER 0x7F // 17 dBm +#define MY_MODULATION 0x48 // Modulation for OOK, Continuous w.o bit synch, OOK, no shaping + +char mytext[80]; +String inputString = ""; // a String to hold incoming data +String myCallSign = "CALLSIGN/B TEST BEACON"; // Put more than callsign here, put your beacon string here +long myFrequency = 433200000; +//long myFrequency = 915000000; +String myString = ""; +String myCall = ". CALLSIGN/B"; +int myStringLen = 0; +unsigned int count=0; +//char mycount = 0; +int myHour, myMinute, mySecond, myAlt, mySpd, mySat; +double myLat, myLng; + +void setup() { + Serial.begin(9600); // baud speed for sending to the arduino serial monitor + Serial.println("Starting up"); // print to the serial monitor + pinMode(ssPin, OUTPUT); // define + pinMode(rstPin, OUTPUT); + setupSPI(); + delay(1000); + resetRFM69(); + delay(1000); + setupRFM69(); +} + +void loop() { + count++; + buildString(); + //myString = myCall; + myString.toUpperCase(); + myStringLen = myString.length(); + myString.toCharArray(mytext,myString.length() + 1); + // Serial.print("I am sending: "); Serial.println(myString); + sendmsg(mytext); + inputString = ""; + myString = ""; +} + +void buildString() { + myString = myCallSign; + myString.toUpperCase(); + myStringLen = myString.length(); + Serial.print("I am sending: "); Serial.println(myString); +} + +void setupRFM69() { + writeReg(0x02,MY_MODULATION); + setFrequency(myFrequency); + writeReg(0x01,0x0C); // Set mode to Transmitter TX mode + Serial.println("Transmitter is ready...."); +} + +struct t_mtab { char c, pat; } ; + +struct t_mtab morsetab[] = { + {'.', 106}, + {',', 115}, + {'?', 76}, + {'/', 41}, + {'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} +} ; + +void resetRFM69() { + digitalWrite(rstPin, HIGH); + delay(100); + digitalWrite(rstPin, LOW); + delay(100); +} + +void printReg(byte data) { + Serial.print("Register "); + Serial.print(data); + Serial.print(" = "); + Serial.println(readReg(data), HEX); +} + +void writeReg(uint8_t addr, uint8_t value) { + digitalWrite(ssPin,LOW); + SPI.transfer(addr | 0x80); + SPI.transfer(value); + digitalWrite(ssPin, HIGH); +} + +uint8_t readReg(uint8_t addr) { + digitalWrite(ssPin, LOW); + SPI.transfer(addr & 0x7F); + uint8_t regval = SPI.transfer(0); + digitalWrite(ssPin, HIGH); + return regval; +} + +void setupSPI() { + SPI.begin(); + SPI.setBitOrder(MSBFIRST); + SPI.setClockDivider(SPI_CLOCK_DIV4); +} + +void setFrequency(uint32_t freqHz){ // Setup the frequency + freqHz /= 61; // resolution is 61 Hz so divide it it down and mask it out + writeReg(0x07, freqHz >> 16); // Frequency MSB + writeReg(0x08, freqHz >> 8); // Frequency Middle Byte + writeReg(0x09, freqHz); // Frequency LSB + Serial.print("Frequency set to "); Serial.println(myFrequency); +} + +void txOn(int txTime) { + writeReg(0x11,MY_TX_POWER); // PA On ******************************************* + delay(txTime); + writeReg(0x11,0x00); // PA off ************************************************* +} + +void dash() { + txOn(DASHLEN); + delay(DOTLEN); +} + +void dit() { + txOn(DOTLEN); + delay(DOTLEN); +} + +void send(char c) { + int i ; + if (c == ' ') { + //Serial.print(c) ; + delay(7*DOTLEN) ; + return ; + } + for (i=0; i