update DTMF example
This commit is contained in:
parent
c813bac7b8
commit
a9f3380f85
|
@ -75,7 +75,7 @@ void setup() {
|
||||||
radio.frequency(freq);
|
radio.frequency(freq);
|
||||||
|
|
||||||
// set RX volume to minimum to reduce false positives on DTMF rx
|
// set RX volume to minimum to reduce false positives on DTMF rx
|
||||||
radio.setVolume1(4);
|
radio.setVolume1(6);
|
||||||
radio.setVolume2(0);
|
radio.setVolume2(0);
|
||||||
|
|
||||||
// set to receive
|
// set to receive
|
||||||
|
@ -91,22 +91,17 @@ void setup() {
|
||||||
Serial.println("ready");
|
Serial.println("ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char rx_dtmf_buf[255];
|
||||||
|
int rx_dtmf_idx = 0;
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
||||||
// look for tone
|
// look for tone
|
||||||
if (radio.getDTMFSample() != 0) {
|
if (radio.getDTMFSample() != 0) {
|
||||||
uint16_t code = radio.getDTMFCode();
|
uint16_t code = radio.getDTMFCode();
|
||||||
if (code < 10) {
|
|
||||||
Serial.println(code);
|
rx_dtmf_buf[rx_dtmf_idx++] = code2char(code);
|
||||||
} else if (code < 0xE) {
|
|
||||||
Serial.println(code, HEX);
|
// reset after this tone
|
||||||
} else if (code == 0xE) {
|
|
||||||
Serial.println('*');
|
|
||||||
} else if (code == 0xF) {
|
|
||||||
Serial.println('#');
|
|
||||||
} else {
|
|
||||||
Serial.println('?'); // invalid code
|
|
||||||
}
|
|
||||||
int j = 0;
|
int j = 0;
|
||||||
while (j < 4) {
|
while (j < 4) {
|
||||||
if (radio.getDTMFSample() == 0) {
|
if (radio.getDTMFSample() == 0) {
|
||||||
|
@ -114,11 +109,48 @@ void loop() {
|
||||||
}
|
}
|
||||||
delay(10);
|
delay(10);
|
||||||
}
|
}
|
||||||
|
} else if (rx_dtmf_idx > 0) {
|
||||||
|
rx_dtmf_buf[rx_dtmf_idx] = '\0'; // NULL terminate the string
|
||||||
|
Serial.println(rx_dtmf_buf);
|
||||||
|
rx_dtmf_idx = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is it time to send tone?
|
// Is it time to send tone?
|
||||||
if (Serial.available()) {
|
if (Serial.available()) {
|
||||||
char c = Serial.read();
|
uint8_t code = char2code(Serial.read());
|
||||||
|
|
||||||
|
// start transmitting
|
||||||
|
radio.setDTMFCode(code); // set first
|
||||||
|
radio.setTxSourceTones();
|
||||||
|
radio.setModeTransmit();
|
||||||
|
delay(300); // wait for TX to come to full power
|
||||||
|
|
||||||
|
bool dtmf_to_tx = true;
|
||||||
|
while (dtmf_to_tx) {
|
||||||
|
// wait until ready
|
||||||
|
while (radio.getDTMFTxActive() != 1) {
|
||||||
|
// wait until we're ready for a new code
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
while (radio.getDTMFTxActive() != 0) {
|
||||||
|
// wait until this code is done
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Serial.available()) {
|
||||||
|
code = char2code(Serial.read());
|
||||||
|
radio.setDTMFCode(code); // set first
|
||||||
|
} else {
|
||||||
|
dtmf_to_tx = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// done with tone
|
||||||
|
radio.setModeReceive();
|
||||||
|
radio.setTxSourceMic();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t char2code(char c) {
|
||||||
uint8_t code;
|
uint8_t code;
|
||||||
if (c == '#') {
|
if (c == '#') {
|
||||||
code = 0xF;
|
code = 0xF;
|
||||||
|
@ -130,29 +162,25 @@ void loop() {
|
||||||
code = c - '0';
|
code = c - '0';
|
||||||
} else {
|
} else {
|
||||||
// invalid code, skip it
|
// invalid code, skip it
|
||||||
Serial.println('?');
|
code = 255;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// start transmitting
|
return code;
|
||||||
radio.setDTMFCode(code); // set first
|
|
||||||
radio.setTxSourceTones();
|
|
||||||
radio.setModeTransmit();
|
|
||||||
delay(300); // wait for TX to come to full power
|
|
||||||
|
|
||||||
// wait until ready
|
|
||||||
while (radio.getDTMFTxActive() != 1) {
|
|
||||||
// wait until we're ready for a new code
|
|
||||||
delay(10);
|
|
||||||
}
|
|
||||||
radio.setDTMFCode(code);
|
|
||||||
while (radio.getDTMFTxActive() != 0) {
|
|
||||||
// wait until this code is done
|
|
||||||
delay(10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// done with tone
|
char code2char(uint16_t code) {
|
||||||
radio.setModeReceive();
|
char c;
|
||||||
radio.setTxSourceMic();
|
if (code < 10) {
|
||||||
|
c = '0' + code;
|
||||||
|
} else if (code < 0xE) {
|
||||||
|
c = 'A' + code - 10;
|
||||||
|
} else if (code == 0xE) {
|
||||||
|
c = '*';
|
||||||
|
} else if (code == 0xF) {
|
||||||
|
c = '#';
|
||||||
|
} else {
|
||||||
|
c = '?'; // invalid code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return c;
|
||||||
}
|
}
|
|
@ -995,7 +995,7 @@ void HamShield::enableDTMFReceive(){
|
||||||
|
|
||||||
//HSwriteBitsW(devAddr, 0x57, 0, 1, 1); // send dtmf to speaker out
|
//HSwriteBitsW(devAddr, 0x57, 0, 1, 1); // send dtmf to speaker out
|
||||||
|
|
||||||
// turn on pre/de-emphasis
|
// bypass pre/de-emphasis
|
||||||
HSwriteBitsW(devAddr, A1846S_EMPH_FILTER_REG, A1846S_EMPH_FILTER_EN, 1, 1);
|
HSwriteBitsW(devAddr, A1846S_EMPH_FILTER_REG, A1846S_EMPH_FILTER_EN, 1, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue