Monday, February 26, 2024

Simple Arduino rotary tuning knob for SDR

I like using SDR++ to remote control my AirSpy receiver but I was missing the tuning knob. SDR++ can be tuned with the mouse wheel but I find it a bit difficult.

Using an Arduino UNO R4 Minima I've made a very simple Rotary encoder that sends left or right arrow keys to the computer. I can't get the interrupt driven encoder code to work so I'm just polling but it seems fine for me. 

Soon I'll box it up for desktop use.

Embarrassingly little code is needed for this.

#include <Keyboard.h>
#include <Rotary.h>

Rotary r = Rotary(2, 3);

void setup() {

void loop() {
unsigned char result = r.process();
if (result) {
if(result == DIR_CW) {;
} else {;

Here it is all boxed up like a bought one:

Sunday, February 25, 2024

Wyndham Amateur Radio Club radiofest a good show

It's only a few short weeks since the Ballarat hamfest but as I live pretty close it was a no-brainer to head over. There was an excellent turnout and the new venue, Rowsley Hall, wasn't really spacious enough for everyone to get in.

Lots of interesting older gear to look at. I was tempted by the high voltage variable capacitors.

In the end I came away with a 1994 edition of the ARRL Antenna Handbook. It has calculations written in it by a previous owner.

Friday, February 23, 2024

New radio streaming iOS app - Sound Salvation

The name is inspired by a line from Elvis Costello's song "Radio Radio". I like to listen to radio in an earpiece when I wake during the night. Where I live there is no FM (or DAB+) and the house interferes with AM reception so I've been trying various radio streaming apps.

The apps I've tried are often very annoying in one way or another. Some force ads on the listener - one even made me watch a full screen video ad after a while. Many have various types of in-app purchases or subscriptions.

Sound Salvation is low cost (AU$2). It doesn't collect any information on users. It doesn't show any ads in the app. The radio station directory comes from which has over 46,000 stations in its database. The only monitoring the app does is to send a "click" to Radio Browser for each play of a station for their popularity ranking.

You can add your own station if you know the streaming URL. The app also supports a URL Scheme so that opening a URL on device like the following one will add a station to the list.


Being a brand new app I decided to use the very latest Apple technology so it's built in SwiftUI and uses SwiftData for the database. The experience was a very smooth one but means that the app requires iOS 17 and above and I know that's a problem for some people with older devices.

Like all good apps, I wrote this for myself. If you want to stream radio, please give it a go.


Well, I'm slightly boggled to see that currently Sound Salvation is the number 1 paid app in the Entertainment category.

Just ahead of "iFart" and that's undoubtedly a high bar. ;-)

Thursday, February 15, 2024

Listening to shortwave on my 80m loop antenna

Recently I strung 80m of wire up in a loop attached to trees. It's not as good as my dipole for transmitting but it makes an excellent receive antenna. I've got an AirSpy HF+ SDR running with SDR++ in server mode so I can tune from the house (which is separate from the shack). This is running over two Wifi links but as you'll see it's a pretty good experience.

I'm currently reading Geoff Heriot's excellent book about International Broadcasting titled "International Broadcasting and Its Contested Role in Australian Statecraft - Middle Power, Smart Power". An informed and thoughtful examination of the topic.

Saturday, February 10, 2024

WSPR Watch 4.10 - fixed a long standing thread crash

WSPR Watch, my iOS app for quickly looking at spots on WSPRnet, is 12 years old. During that time it has been updated as the software tools and frameworks have changed.

First it was Objective C and UIKit. Next came the move to Swift. Version 4 was a move to SwiftUI.

I've always used background threads for doing the time-consuming requests to the different data sources. Most recently I've been using async/await and Actors. 

When I moved the app from storyboards to SwiftUI about half of the old code was no longer required. Things look much neater now. For a long time I've had a few crash reports coming in. These have been mostly in the map view. This app really hammers the map by drawing, sometimes, 10,000 or more overlays on it. 

I'd heard of the ThreadSanitiser that is part of the LLVM toolchain and available in Xcode. When I turned it on and ran the app in a Simulator it quickly showed me three data races that I hadn't noticed. My mistake was adding to an Array from a background thread when that Array was also available from other threads.

Having fixed these, I am now seeing zero crashes from users of version 4.9 and later. I expect to see a few due to being out of memory of killed in other ways but so far it looks good.

My thanks, as always, to my wonderful testers and users for their suggestions.

Sunday, February 04, 2024

Enjoyed the Ballarat Radiofest 2024

A few friends came from around the state including Shepparton, Bendigo and Melbourne. We stayed at a local motel and had a nice dinner and walk the night before to check on shortwave reception.

It was a warm day but thankfully there was a very pleasant breeze to keep things comfortable. By opening time, 10am, the crowd was keen to get in to see the gear for sale.

There were lots of older generation transceivers for sale at fair prices but I wasn't particularly tempted.

Quite a few members of my club, the Macedon Ranges Amateur Radio Club were on hand as were members of the Bendigo club who even organised a bus.

I picked up a few 27Mhz AM transceivers in the hope I could find one I can move to the 10m amateur band. I couldn't resist an Icom IC2A 2m handheld transceiver for $3.

A very enjoyable day. My thanks to the organisers.