RotorCraft Version 1.0

Antenna Rotor Control Software for Windows and Linux

Matt Roberts - matt-at-kk5jy-dot-net

Published: 2014-07-14

Updated: 2015-09-12


This is a companion project to the rotor controller project used for my hexbeam.  That project uses an Arduino controller with some extra hardware to drive a Yaesu rotor, and connect to a PC using the simple text-based Yaesu control protocol.

When using the Arduino-based controller, I had trouble finding a simple interface program to drive it from my PC.  Many of the solutions were closed source, or too complicated for my needs.  The best software I found was the rotor control program in the Ham Radio Deluxe package, but that program is no longer free, it is very slow, and the last free version didn't work reliably with my Bluetooth serial ports.

This software is intended to provide a simple, open-source software package for rotor control, and also to offer a base for further development.  It offers the standard click-to-target interface, and persistent user preset targets.  The main goal of the project is to give me the rotor display that I need for my rotor projects, but the architecture is left modular and open, to allow it to be easily modified and extended to other rotor types and protocols.


The software offers a single window with two tabs.  The Operate tab is where normal daily operating is done, and offers a normal azimuth dial indicator and a set of user controls.  The dial indicator shows the current position in black text and with a black position indicator needle.  When the mouse is moved over the dial, a second red needle will appear with accompanying red text, which allows selection of a target heading.  Once the desired target heading is shown in red, the heading can be commanded to the rotor by double-clicking at that heading.

RotorCraft Operate Tab
Figure 1: Operate Tab

The user controls on the right allow for manual control of the rotor motor, by momentarily pressing the CW or CCW, to turn the rotor clockwise, or counterclockwise, respectively.  If the motor is running towards a target heading, the movement can be halted by pressing STOP.

The Preset Targets provide a set of azimuth headings that can be configured to hold favorite target headings.  For example, I configure my presets to the major DX directions to Europe, Africa, South America, New Zealand, Hawaii and Japan.  Whenever one of the Go buttons is pressed, the rotor will be commanded to move to the azimuth in the box to the left of the Go that was pressed.


The configuration of the software is done in the Configure tab.  This tab specifies the communication details and other settings.

RotorCraft Configure Tab
Figure 2: Configure Tab

The Port/Socket box specifies the serial port.  The software supports both serial ports and TCP sockets.  To specify a serial port, just put the port name, such as COM1 on Windows, or /dev/ttyS0 on Linux.  For a socket, specify the host and port in the form host:port, e.g., localhost:1234 or

The Speed only applies to serial ports, and selects the data rate for the link, in bps.

The Poll Delay specifies the minimum time delay between requests for a position update from the rotor controller.  This can be used to limit the polling rate to a value appropriate for your rotor controller.  The software will wait for a position report before asking for another one, subject to the Poll Timeout setting.  The Poll Timeout is the maximum amount of time that each position update request will wait before assuming that the request was lost, and trying again.

The Connect and Disconnect buttons are used to start and stop the connection to the controller.  If the program is closed while connected to the rotor, it will automatically connect to the rotor the next time the program is started.

The Smoothing selects the number of samples to average when updating the postion display.  This can be used to compensate for a jittery position sensor.  A value of 1 disables smoothing.

The Show in Taskbar checkbox controls whether the application is shown in the taskbar as a normal taskbar button. If this is disabled, the option Show Tray Icon must be checked.

The Always Visible checkbox, when selected, will keep the main form on above other windows, so it can always be seen.

The Show Tray Icon checkbox controls whether the application adds an icon to the system tray.  This must be enabled if the Show in Taskbar is disabled.

The Show Preset Notifications checkbox controls whether notification "balloons" are shown whenever a preset is commanded.  If enabled, these will be shown for a few seconds whenever a preset is selected from either the tray icon or the main window.

Taskbar Operation

The software also has visual elements that can be used to control the rotor and view its state when the main program window is minimized or covered by another window.  This allows the rotor to be monitored and operated from the Windows Taskbar even when the RotorCraft window is not visible, e.g., when covered by a logging program or digital mode software during a contest.

RotorCraft Taskbar
Figure 3: RotorCraft in Windows

The notification icon is in the collection of icons shown at the right of the taskbar, and the icon's appearance matches the icon of the main application.  The application's button, shown just to the right of the Start button, shows the current rotor azimuth surrounded by brackets, so that the current rotor position can be seen when the main program window is minimized or covered.

If the notification icon is right-clicked, a context menu will be presented.

RotorCraft Notification Menu
Figure 4: RotorCraft Notification Menu

If Show is clicked, the main program window will be brought to the foreground.  If Exit is clicked, the program will close.  If one of the preset values is selected, the rotor will seek to that preset.  The presets attached to the notification icon are the same values set in the main application window, but they are sorted in ascending order, regardless of their order in the main window.

RotorCraft Notification Menu
Figure 5: RotorCraft Offset Menu Items

The CW and CCW menu items each contain a number of offset angles that can be applied to the current rotor position.  When any of these values is clicked, the rotor will be moved to the left or right, to add or remove the selected number of degrees from the current heading.


This software now meets my needs by providing a standard rotor user interface for my PC.  The software is currently limited to the Yaesu rotor protocol, but other protocols can be added simply by adding a new rotor object type, with the IRotor interface defined in the software.  As opportunities arise to integrate more rotor protocols, I will attempt to add them.

The current software implements the basic movement commands from the Yaesu rotor protocol, as defined in the GS-232A document.  Any rotor controller that implements the Yaesu protocol should work fine with the current software state.

Software Downloads

Beta versions of the software used in this project are available for download.  Source code is available in ZIP files, and as a binary MSI installer for Windows.  The Linux version of the host software can only be built from source.

RotorCraft 1.0 Downloads  (Click Here)

The software and source is being released under the GPL version 3.  The license is available on the download page.

2014-07-17 - The current GUI source code builds and runs on both Linux and Windows.  The RotorCraft.exe executable file can be run on either Windows or Linux, regardless of where it was built.  Note that the Linux build is still largely untested.

2014-07-20 - This update contains several improvements and small bug fixes.  When running on Windows, the software will show a notification icon in the taskbar, and that icon has a context (right-click) menu that allows quick access to the presets.

2014-07-25 - This update adds configurable tray notifications, fixes a bug in the notification icon presets, and allows the tray icon and taskbar icon to be configured to be on or off.  It also contains some serial port error handling updates.

2014-08-17 - The context menu attached to the tray icon now has incremental presets, as described above.  Other minor fixes and improvements.

2015-06-07 - Added an option to keep the main window on top of other windows (always visible).  Also persist the size and position of the main window when the application is closed, so that it appears in the same location when next started.

2015-06-24 - Added more presets, and incremental buttons to the main window.

2015-09-12 - Support both "standard" and "alternate" forms of Yaesu protocol azimuth read-back.  Apparently, the K3NG default behavior for Yaesu emulation is different from that documented for the GS-232A controller, so this build just supports both forms by default, and will automatically detect which one to use on a per-message basis.


Digital Rotor Controller for Arduino - the companion project to this one.

Copyright (C) 2014-2015 by Matt Roberts, All Rights Reserved.