HamShield/examples/FoxHunt/FoxHunt.ino

104 lines
2.8 KiB
Arduino
Raw Normal View History

/* Hamshield
* Example: Fox Hunt
*
* 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
2016-08-26 21:40:47 +00:00
* into the HamShield RF jack. Connect the Arduino to wall
* 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.
*/
2016-03-25 03:31:17 +00:00
#include <HamShield.h>
2019-03-15 17:43:15 +00:00
#define MIC_PIN 3
2015-11-23 16:54:10 +00:00
#define RESET_PIN A3
#define SWITCH_PIN 2
// In milliseconds
#define TRANSMITLENGTH 60000
// In minutes
#define INTERVAL 10
#define RANDOMCHANCE 3
2016-03-25 03:31:17 +00:00
HamShield radio;
2015-11-23 16:54:10 +00:00
void setup() {
// NOTE: if not using PWM out, it should be held low to avoid tx noise
2019-03-15 17:43:15 +00:00
pinMode(MIC_PIN, OUTPUT);
digitalWrite(MIC_PIN, LOW);
2015-11-23 16:54:10 +00:00
// prep the switch
pinMode(SWITCH_PIN, INPUT_PULLUP);
// set up the reset control pin
pinMode(RESET_PIN, OUTPUT);
digitalWrite(RESET_PIN, HIGH);
delay(5); // wait for device to come up
// 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);
2019-07-14 20:37:14 +00:00
// Configure the HamShield frequency
radio.frequency(432400);
Serial.println("Radio configured.");
}
void loop() {
// 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
2019-03-15 17:43:15 +00:00
tone(MIC_PIN, 600, TRANSMITLENGTH);
delay(TRANSMITLENGTH);
// 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));
}
}
// a function so we can wait by minutes
void waitMinute(unsigned long period) {
Serial.print("Waiting for ");
Serial.print(period, DEC);
Serial.println(" minutes.");
delay(period * 60 * 1000);
}