Adding App Serial Controller
This commit is contained in:
parent
4f7db1d561
commit
1416a5c1bf
|
@ -0,0 +1,179 @@
|
|||
/* Hamshield
|
||||
* Example: SerialController
|
||||
* This application is used in conjunction with a computer to provide full serial control of HamShield.
|
||||
*/
|
||||
|
||||
#include <HamShield.h>
|
||||
|
||||
#define PWM_PIN 3
|
||||
#define RESET_PIN A3
|
||||
#define SWITCH_PIN 2
|
||||
|
||||
HamShield radio;
|
||||
|
||||
uint8_t freq_buffer[32];
|
||||
uint8_t pl_tx_buffer[32];
|
||||
uint8_t pl_rx_buffer[32];
|
||||
|
||||
void setup() {
|
||||
// NOTE: if not using PWM out, it should be held low to avoid tx noise
|
||||
pinMode(PWM_PIN, OUTPUT);
|
||||
digitalWrite(PWM_PIN, LOW);
|
||||
|
||||
// prep the switch
|
||||
pinMode(SWITCH_PIN, INPUT_PULLUP);
|
||||
|
||||
// set up the reset control pin
|
||||
pinMode(RESET_PIN, OUTPUT);
|
||||
digitalWrite(RESET_PIN, HIGH);
|
||||
|
||||
Serial.begin(9600);
|
||||
Serial.println("If the sketch freezes at radio status, there is something wrong with power or the shield");
|
||||
Serial.print("Radio status: ");
|
||||
int result = radio.testConnection();
|
||||
Serial.println(result,DEC);
|
||||
Serial.println("Setting radio to its defaults..");
|
||||
radio.initialize();
|
||||
radio.setRfPower(0);
|
||||
radio.frequency(146520);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if(Serial.available()) {
|
||||
uint8_t buf = Serial.read();
|
||||
Serial.write(buf);
|
||||
switch (buf) {
|
||||
case 'X': // absorb reset command because we are already reset
|
||||
break;
|
||||
case 'F': // frequency configuration command
|
||||
tune_freq(); break;
|
||||
case 'P': // TX PL Tone configuration command
|
||||
pl_tone_tx(); break;
|
||||
case 'R': // RX PL Tone configuration command
|
||||
pl_tone_rx(); break;
|
||||
case 'T': // turn on transmitter command
|
||||
tx_on(); break;
|
||||
case 'O': // turn off transmitter command
|
||||
tx_off(); break;
|
||||
case 'A': // configure amplifier
|
||||
amplifier(); break;
|
||||
case 'D': // configure predeemph
|
||||
predeemph(); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void tx_on() {
|
||||
radio.setModeTransmit();
|
||||
Serial.println("Transmitting");
|
||||
}
|
||||
|
||||
void tx_off() {
|
||||
radio.setModeReceive();
|
||||
Serial.println("Transmit off");
|
||||
}
|
||||
|
||||
void pl_tone_tx() {
|
||||
Serial.println("TX PL tone");
|
||||
memset(pl_tx_buffer,0,32);
|
||||
uint8_t ptr = 0;
|
||||
while(1) {
|
||||
if(Serial.available()) {
|
||||
uint8_t buf = Serial.read();
|
||||
Serial.write(buf);
|
||||
if(buf == 'X') { return; }
|
||||
if(buf == '!') { pl_tx_buffer[ptr] = 0; program_pl_tx(); return; }
|
||||
if(ptr == 31) { return; }
|
||||
pl_tx_buffer[ptr] = buf; ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void program_pl_tx() {
|
||||
Serial.print("programming TX PL to ");
|
||||
for(int x = 0; x < 32; x++) {
|
||||
Serial.write(pl_tx_buffer[x]);
|
||||
}
|
||||
long pl_tx = atof(pl_tx_buffer);
|
||||
Serial.print(" Which is FLOAT of ");
|
||||
Serial.println(pl_tx,DEC);
|
||||
radio.setCtcssEncoder(pl_tx);
|
||||
}
|
||||
|
||||
void pl_tone_rx() {
|
||||
Serial.println("RX PL tone");
|
||||
memset(pl_rx_buffer,0,32);
|
||||
uint8_t ptr = 0;
|
||||
while(1) {
|
||||
if(Serial.available()) {
|
||||
uint8_t buf = Serial.read();
|
||||
Serial.write(buf);
|
||||
if(buf == 'X') { return; }
|
||||
if(buf == '!') { pl_rx_buffer[ptr] = 0; program_pl_rx(); return; }
|
||||
if(ptr == 31) { return; }
|
||||
pl_rx_buffer[ptr] = buf; ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void program_pl_rx() {
|
||||
Serial.print("programming RX PL to ");
|
||||
for(int x = 0; x < 32; x++) {
|
||||
Serial.write(pl_rx_buffer[x]);
|
||||
}
|
||||
long pl_rx = atof(pl_rx_buffer);
|
||||
Serial.print(" Which is FLOAT of ");
|
||||
Serial.println(pl_rx,DEC);
|
||||
radio.setCtcssDecoder(pl_rx);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void tune_freq() {
|
||||
Serial.println("program frequency mode");
|
||||
memset(freq_buffer,0,32);
|
||||
uint8_t ptr = 0;
|
||||
while(1) {
|
||||
if(Serial.available()) {
|
||||
uint8_t buf = Serial.read();
|
||||
Serial.write(buf);
|
||||
if(buf == 'X') { return; }
|
||||
if(buf == '!') { freq_buffer[ptr] = 0; program_frequency(); return; }
|
||||
if(buf != '.') { freq_buffer[ptr] = buf; ptr++; }
|
||||
if(ptr == 31) { return; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void program_frequency() {
|
||||
Serial.print("programming frequency to ");
|
||||
for(int x = 0; x < 32; x++) {
|
||||
Serial.write(freq_buffer[x]);
|
||||
}
|
||||
long freq = atol(freq_buffer);
|
||||
Serial.print(" Which is LONG of ");
|
||||
Serial.println(freq,DEC);
|
||||
radio.frequency(freq);
|
||||
}
|
||||
|
||||
|
||||
void amplifier() {
|
||||
while(1) {
|
||||
if(Serial.available()) {
|
||||
uint8_t buf = Serial.read();
|
||||
Serial.write(buf);
|
||||
if(buf == 'X') { return; }
|
||||
if(buf != '!') { radio.setRfPower(buf); return; }
|
||||
if(buf == '!') { return; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void predeemph() { }
|
||||
|
||||
|
Loading…
Reference in New Issue