From daa4befe2cfe701eef9b026e3a3a4df7b02fa360 Mon Sep 17 00:00:00 2001 From: Nigel Vander Houwen Date: Tue, 13 Feb 2018 16:49:52 -0800 Subject: [PATCH] General FoxHunt example sketch fixups. Added code comments to aid understanding. Added a number of serial prints so you can see what it's doing. Moved the long wait inside the if->transmit block so we don't wait a long time if the channel was busy. --- examples/FoxHunt/FoxHunt.ino | 73 ++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/examples/FoxHunt/FoxHunt.ino b/examples/FoxHunt/FoxHunt.ino index 3146e65..30c9f82 100755 --- a/examples/FoxHunt/FoxHunt.ino +++ b/examples/FoxHunt/FoxHunt.ino @@ -1,13 +1,16 @@ /* Hamshield * Example: Fox Hunt - * Plays a one minute tone at 10-13 minute intervals. Script - * will check to see if the channel is clear before it will - * transmit. + * + * Plays a one minute tone, then IDs at 10-13 minute intervals. Script + * will check to see if the channel is clear before it will transmit. + * * Connect the HamShield to your Arduino. Screw the antenna * into the HamShield RF jack. Connect the Arduino to wall - * power and then to your computer via USB. To test, set a - * HandyTalkie to 438MHz. You should hear a one-minute tone - * followed by a callsign every 10-13 minutes. + * power and then to your computer via USB. After uploading + * this program to your Arduino, open the Serial Monitor to + * monitor the status of the beacon. To test, set a HandyTalkie + * to 438MHz. You should hear a one-minute tone followed by + * a callsign every 10-13 minutes. */ #include @@ -35,25 +38,65 @@ void setup() { // set up the reset control pin pinMode(RESET_PIN, OUTPUT); digitalWrite(RESET_PIN, HIGH); - + + // Set up the serial port at 9600 Baud + Serial.begin(9600); + + // Send a quick serial string + Serial.println("HamShield FoxHunt Example Sketch"); + + // Query the HamShield for status information + Serial.print("Radio status: "); + int result = radio.testConnection(); + Serial.println(result, DEC); + + // Tell the HamShield to start up radio.initialize(); + + // Set the transmit power level (0-8) radio.setRfPower(0); + + // Set the morse code characteristics + radio.setMorseFreq(600); + radio.setMorseDotMillis(100); + + // Configure the HamShield to operate on 438.000Mhz radio.frequency(438000); - radio.setModeReceive(); + + Serial.println("Radio configured."); } void loop() { - if(radio.waitForChannel(30000,2000, -90)) { // wait for a clear channel, abort after 30 seconds, wait 2 seconds of dead air for breakers - radio.setModeTransmit(); // turn on transmit mode - tone(PWM_PIN, 1000, TRANSMITLENGTH); // play a long solid tone + // We'll wait up to 30 seconds for a clear channel, requiring that the channel is clear for 2 seconds before we transmit + if (radio.waitForChannel(30000,2000, -90)) { + // If we get here, the channel is clear. Let's print the RSSI to the serial port as well. + Serial.print("Signal is clear, RSSI: "); + Serial.println(radio.readRSSI()); + + // Set the HamShield to TX + Serial.print("Transmitting..."); + radio.setModeTransmit(); + + // Generate a 600Hz tone for TRANSMITLENGTH time + tone(PWM_PIN, 600, TRANSMITLENGTH); delay(TRANSMITLENGTH); - radio.morseOut(" 1ZZ9ZZ/B FOXHUNT"); // identify the fox hunt transmitter - radio.setModeReceive(); // turn off the transmit mode + + // Identify the transmitter + radio.morseOut(" CALLSIGN FOXHUNT"); + + // Set the HamShield back to RX + radio.setModeReceive(); + Serial.println("Done."); + + // Wait for INTERLVAL + some random minutes before transmitting again + waitMinute(INTERVAL + random(0,RANDOMCHANCE)); } - waitMinute(INTERVAL + random(0,RANDOMCHANCE)); // wait before transmitting, randomly } // a function so we can wait by minutes -void waitMinute(unsigned long period) { +void waitMinute(unsigned long period) { + Serial.print("Waiting for "); + Serial.print(period, DEC); + Serial.println(" minutes."); delay(period * 60 * 1000); }