Arduino Leonardo external keypad

Am I the only one finding it difficult to find the ctrl-alt-down key combination to tune to the next mult in N1MM+ logger when I am 30hrs into a contest?

This is the solution I made for it: an extra keypad that emulates these key combinations (or whatever key combination you want to program):

Arduino keypad closeup

Arduino keypad internals 1

2016-03-26 09.29.12

The core is an Arduino Leonardo with a 12 key keypad. These keypads can be salvaged out of an old phone or purchased online. Of course if you need less keys you can use pushbuttons also.

I printed the case with my Delta Rocket 3d-printer.

For the complete beginners with Arduino there is a lot to be found on the net. I found this Instructable very helpful.

This is a pretty easy project, the 2 hardest things are to figure out how the matrix of the keypad is to be wired and what keycodes you need to send to the computer.

In most helpfiles for the Arduino they say that the Leonardo sends ASCII to the computer but this is not true. In fact the Leonardo sends keycodes and they are based on the configuration of the ‘real’ keyboard that is connected and configured in Windows (or any other operating system I guess). As far as I could test the Leonardo uses the same keyboard ‘layout’ as the standard US QWERTY keyboard. So for us Belgians with our AZERTY keyboards it’s not as simple. I had to try out dozens of combinations before finding the correct ones.

For now this is the code I use (not all keys are implemented as of now):

/*
ON5MF/OQ6A Arduino Leonardo Keypad

I did not really 'invent' this myself, I only implemented stuff found on the net. Please feel free to use,
copy, enhance this code at your own will.

If you use it for commercial purposes I'd like to receive at least 50% of the gains ;-)

If you like the code or if you find some enhancements or improvements please let me know.

73 es have fun with it.

Jurgen ON5MF
www.on5mf.be
*/

/*
v001 = testing if keypad works
v002 = added ctrl-left and ctrl-right
v003 = next spot up and down
*/

/* keys and functions
 1  next spot up left radio   ! ctrl-left ctrl-up
 2  Escape                    ! esc
 3  next spot up right radio  ! ctrl-right ctrl-up
 4  next spot dwn left radio  ! ctrl-left ctrl-dwn
 5  back to CQ frequency      ! alt-Q
 6  next spot dwn right radio ! ctrl-right ctrl-dwn
 7  next mult up left radio   ! ctrl-left ctrl-alt-up
 8  turn rotator              ! alt-j
 9  next mult up right radio  ! ctrl-right ctrl-alt-up
 0  swap radios               ! alt-F5
 *  next mult dwn left radio  ! ctrl-left ctrl-alt-dwn
 #  next mult dwn right radio ! ctrl-right ctrl-alt-dwn
 */

//Libraries
#include <Keypad.h>
//----- end of libraries

//Constants
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
//----- end of constants

//Variables
//define the symbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}     //ok
};
byte rowPins[ROWS] = {4, 9, 8, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 3, 7}; //connect to the column pinouts of the keypad
char ctrlKey = KEY_LEFT_CTRL;
char leftKey = KEY_LEFT_ARROW;
char rightKey = KEY_RIGHT_ARROW;
char upKey = KEY_UP_ARROW;
char downKey = KEY_DOWN_ARROW;
//----- end of variables

//initialise Keypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
//----- end o initialise Keypad

void setup() {
  Serial.begin(9600);
  Keyboard.begin();
}

void loop() {
  char customKey = customKeypad.getKey();
  if (customKey == '1') {
    Keyboard.press(ctrlKey);
    Keyboard.press(leftKey);
    delay(100);
    Keyboard.releaseAll();
    delay(100);
    Keyboard.press(ctrlKey);
    Keyboard.press(upKey);
    delay(100);
    Keyboard.releaseAll();
  }
  if (customKey == '4') {
    Keyboard.press(ctrlKey);
    Keyboard.press(leftKey);
    delay(100);
    Keyboard.releaseAll();
    delay(100);
    Keyboard.press(ctrlKey);
    Keyboard.press(downKey);
    delay(100);
    Keyboard.releaseAll();
  }
  if (customKey == '7') {
    Keyboard.press(ctrlKey);
    Keyboard.press(leftKey);
    delay(100);
    Keyboard.releaseAll();
  }
  if (customKey == '*') {
    Keyboard.press(ctrlKey);
    Keyboard.press(leftKey);
    delay(100);
    Keyboard.releaseAll();
  }
  if (customKey == '3') {
    Keyboard.press(ctrlKey);
    Keyboard.press(rightKey);
    delay(100);
    Keyboard.releaseAll();
    delay(100);
    Keyboard.press(ctrlKey);
    Keyboard.press(upKey);
    delay(100);
    Keyboard.releaseAll();
  }
  if (customKey == '6') {
    Keyboard.press(ctrlKey);
    Keyboard.press(rightKey);
    delay(100);
    Keyboard.releaseAll();
    delay(100);
    Keyboard.press(ctrlKey);
    Keyboard.press(downKey);
    delay(100);
    Keyboard.releaseAll();
  }
  if (customKey == '9') {
    Keyboard.press(ctrlKey);
    Keyboard.press(rightKey);
    delay(100);
    Keyboard.releaseAll();
  }
  if (customKey == '#') {
    Keyboard.press(ctrlKey);
    Keyboard.press(rightKey);
    delay(100);
    Keyboard.releaseAll();
  }
}

Working split in digi mode with the FTdx5000 (or any other transceiver with 2 separate receivers)

Do you want to work split in digi-modes using both receivers in your FTdx5000?

Pretty easy: use 2 instances of MMTTY each with its own soundcard or its own Signalink USB and configure one of them to ‘listen’ to receiver A and the other one to ‘listen’ to receiver B. Working that dx station in digi mode becomes as easy as in SSB.

Don’t forget to reread the DX code of conduct before trying to bust that pileup!

I can expect some more wallpaper…

Even if I prefer playing in the SO2R category, I entered the 2013 ARRL RTTY Roundup in the MSLP category because I wanted to test the pretty new RTTY Skimmers. And even if I didn’t expect it this is what is written in the ‘2013 ARRL RTTY Roundup Results – extended‘:

The Multi-Single, Low Power category in Europe had nine out of ten stations on the Top Ten list. Some winners were team efforts and some were operators using spotting or CW Skimmer assistance. Jo, ON5MF won for Europe using contest call OQ6A, although he normally doesn’t participate in the Multi-Single category. Using the relatively new RTTY skimmer spots, Jo ran stations on his main VFO and jumped from one spot to another with his second VFO, no doubt mostly in-band to comply with the band change rules.

Guess my ‘nice heavy paper weight‘ isn’t that bad, is it Franki?

First 2 contests with the FT5K / FT990 combo

As you already know from a previous post I purchased a Yaesu FT DX 5000 MP last december. Since then I operated in both the ARRL RTTY Roundup and in the CQ WW WPX RTTY. Time to write down my experiences:

The combo FT5K/FT990 is of course a great enhancement over the former combo FT990/TS50S :-). Even with the 500Hz filters the TS50S has a poor receiver for contesting, don’t misunderstand, the TS50S is a great transceiver for travelling but filtering in rough contest conditions is pretty poor. Moreover I was persuaded the FT990 had a great receiver but that’s because I never operated anything better… The receiver of the FT5 seems pretty unbeatable to me when compared to the FT990.

With the FT5K, narrow means NARROW! Using the the 500 Hz filter on FT990 you can see a pretty wide band in the MMTTy scope, using the with 600 Hz filter of the FT5k only a fraction of that band is left, when the need arises it can even be made narrower when using the ‘Narrow’ knob and/or when changing the settings of the RX. Sometimes I had the feeling the receiver is even too good 😉 because you get into very narrow holes on busy band to try and start a run. But it isn’t because I have a good RX that the other stations have one that is as good!

Being used to operate the FT990 it was not that hard for me to learn the basic functions of the FT5k, operation seems pretty straightforward to me.

Since I have the FT5k I made 2 RS232 interfaces so I can run both transceivers in FSK instead of AFSK, this avoids me the need to retune the level of the AFSK tx audio at every band change.

The only negative point I see in the MP version is the band scope which is pretty slow and with low resolution. The speakers that come with it are great but the scope isn’t. Guess I’ll have to go look for an SDR solution on the IF output of the FT5K.

I was pretty happy with the results in both contests! In both my claimed score beat the belgian record!

2 weeks…

Only 2 weeks left before my actual provider shuts down this site!

Because this provider is getting to big for me (*) I decided to move the site to a new one. But… now I need to find the time to move this whole WordPress thing to the new provider.

But, don’t worry, on5mf.be might be offline for a little while but it will be back and then maybe the mystery about the new transceiver will be solved 🙂

First things first, the EPC BPSK63 QSO Party tomorrow! But who decided to have a contest from 0000 utc till 2359 utc? Got to be at the office at 0800 AM on monday (and that’s 0700 utc…)

(*)to big as in bad service, to big as in to expensive, to big as in ‘press 1 for dutch, press 2 for swahili, press…’ etc.

 

Writer’s block?

A lot of things have happened since my last post here but I didn’t really feel like writing anything about them lately.

A small summary:

  • we did the Region 1 SSB fieldday with the club station ON6CK/p (and came in second behind the OQ8A/p team)
  • the belgian guys conquered Rockall, congrats to the team!
  • the british guys decided not to go to Rockall. I don’t really understand the reasons, if all those who wanted to climb the Everest would have cancelled their plans because someone was there before them then only a few people would have done it. Moreover the pileups from Rockall will not be less for the second team going there than for the first one. And I still need EU189!
  • I finally ordered a new transceiver!
  • I modified my RTTY setup to do FSK instead of AFSK (with the FT990)
  • I made a portable setup to take on holiday

The last 3 of the list will probably be the subjects of some future posts!

So what makes me write this in the last hours of CQ WW SSB? I’m at the qth of my girlfriend and to tired to set up the portable station. Wedding parties are probably more tiring than 24hrs of contesting 🙂 Moreover we have to leave for an other party in less than an hour.

My next contest is in 3 weeks from now… still some work to do (the 4 rotary switches problem, remember?)

 

2011 ARRL RTTY Roundup [update]

The 2011 ARRL RTTY Roundup Results have been on the ARRL-site for a little while now.

I made it to 10th place and 3rd place in Europe (DX SOLP). As this was my first full 24hr SO contest in years I’m pretty happy with the score.  Of course I was also first in Belgium but there’s nothing to brag about with almost no competition whatsoever (the only other ON stations who entered a log where ON6AT with 215 QSO and ON8NT with 101 QSO).

Of course there is lots of room for improval!  The todo list is growing and growing but soon I’ll have a few weeks of holiday so I hope to be able to do some work in and around my station.

@ON5ZO: yes I know, the first thing to solve is the “turn 4 rotary switches every time” problem 🙂

We won the DL-DX RTTY contest 2010!

Last year we set up our UBA KTK club station (ON6CK) to compete in the DL-DX RTTY contest in the multi-multi category. See my post about this contest.

A few days ago the organiser published the results on his website.

Not a lot of competition but anyhow we took first place worldwide in the multi-multi category. Not bad for a bunch of inexperienced operators (in digi modes) and for an average station in the middle of the city!

For now I’m trying to get a crew together to compete in the SP DX RTTY contest from our club station. Maybe this win will help me find more operators!