I’ve finally managed to finish my Arduino CAT control project! Woo hoo!
The project took longer than anticipated due to a number of reasons, one of which being the fine weather we’ve enjoyed this summer (and all the camping that goes with it). The other reason was my focus on other things, namely, healing up well.

Leg in hard cast
A few weeks ago, I fully ruptured my Achilles tendon while playing a spirited game of squash. (It turns out that racket sports account for the greatest percentage of Achilles tendon damage.) I opted for the surgical repair and went under the knife on Aug 2nd. I’m currently in a below-the-knee cast and will remain as such for the foreseeable future. The surgery went well and my wound site has healed extremely quickly (pic: 8 days post op) so I remain optimistic. I will be off work for the next little bit so I’ll have some time to look at radio projects!

- RX and TX displays

External meter jack on FT-857D
The LCD display will indicate whether the radio is in RX mode (and hence the signal strength) or TX mode (the ALC level). This is all made possible because the FT-857D has an external meter port on the bottom of the front display. The ouput of the meter jack goes from 0V to 5V which is perfect for sampling with a simple 10-bit ADC such as that found in the Arduino. By mapping the values of voltage (0V = 0, 5V = 1024) to a smaller range (such as 0-128) we can display the data on a 16×2 LCD display quite nicely while retaining vital data.
To tell whether the radio is in RX or TX mode, I am passing the command:
boolean checkTX(){
boolean TX = 0;
byte cmdOut[5]= {0x00,0x00,0x00,0x00,0xf7};
rigCat.flush(); // clear incoming serial buffer
for (byte i=0; i<5; i++) {
rigCat.write(cmdOut[i]);
}
And then I wait for the resulting data to come back via:
byte bytesIn = 1; // only collect the first byte
for(byte j=0; j<bytesIn; j++){
cmdData[j] = rigCat.read();
}
In all cases, unless the radio is actually transmitting, the data that comes back in cmdData[0] is = 255 so, we can simply finish with:
if (cmdData[0] != 255) TX = true;
return TX; // return the result to the function call
}
I am currently working on creating an Arduino library so that others may benefit from my bit-banging. Ideally, you will be able to declare a radio much like you would a variable and then pass commands to it via the FT857D library (and hence CAT commands).
A list of support functions is as follows:
- lock on / off
- PTT on / off
- Set frequency
- Set operating mode
- Clarifier on / off
- Clarifier frequency
- VFO A / B swapping
- Split operation on / off
- Repeater offset direction (+, -, simplex)
- Repeater offset frequency
- CTCSS / DCS modes (encode, decode, encode & decode, off)
- CTCSS tone / DCS code
- Read RX status (squelch status, ctcss / dcs matching, disc. centr., S-meter data)
- Read TX status (PTT, SWR status, split status, PO-meter data)
- Read RX frequency & mode