LIBRARIES AND SKETCH: Since I am just starting with arduino, the sketch took me some time to get up and running. It uses standard arduino libraries as well as contributed libraries from Alexander Brevig (MenuBackend), karl@pitrich.com (ClickEncoder), and Mikal Hart (TinyGPS++). Taken together, these libraries form the “guts” of the sketch and I want to thank each of the authors for making their hard work available to the community. Links for these libraries are contained within the annotations in the sketch. The sketch itself is pretty long as each “target” requires decimal based GPS coordinates. In my case, I used three sets of coordinates (Front, Middle, Back), each of which contains decimal latitude and longitude coordinates, to define different landing areas on the greens. These coordinates are set up as floats in order to use the decimal format, and require a lot of memory. I have tried this sketch using a graphic lcd using the Adafruit library, but I found that the library is pretty heavy and it may cause you to run out of memory before you get all the data input for the GPS coordinates. As I noted, I am new to arduino, and I'm sure my code could use some work. I tried to create a function for the repetitive portion of each “target”, but I was unable to do so. Hopefully there is a coding guru among the readers that can provide a better method and code. All help is greatfully accepted. The sketch functions by reading the current GPS position and then calculating the distance from that point to the target. This function (distanceBetween) is part of the TinyGPS++ library and makes it possible to get very accurate distances. In order to get the coordinates for the sketch, I used Googlemaps (satellite mode) and just clicked on the various areas on the greens of the course I typically play. The click produces the decimal coordinates ( i.e. 28.123456, -81.65432) which are then loaded into the sketch as floats. Wash, rinse, repeat for each and every area to wish to use as an aiming point. Once you have gathered all of the coordinates, set up your menu system to show the various locations. Please refer to the attached copy of my sketch for further explanation as I have tried to annotate the sketch as completely as possible. MenuBackend requires some setup calls, each of which I have explained in the annotations. Be sure to structure your menu with the necessary functions. The menuUseEvent and menuChangeEvent are critical to navigating the menu. The key function lines in my sketch are 96 (MenuBackend menu), 129 (void menuSetup() ), 177 (void menuUseEvent), and 600 (void menuChangeEvent). All of the corresponding information can be found in the library example and in the keywords.txt of the library. Once you get to the void setup portion of the sketch, you will set up the watchdog (for software restart of a frozen sketch), start the SoftwareSerial connection, the LCD, the encoder and its interrupts, and finally call for the menuSetup. Moving into the loop portion, the initial lines instruct SoftwareSerial to read the incoming GPS values as long as there is a signal incoming. The next portion of the loop reads the rotation of the encoder and the input from the push button. One direction on the encoder produces a value that causes the menu to move up one notch and the other direction produces a value causing the menu to move down. This is the menu navigation portion of the sketch that allows you to choose the hole (or practice target) that you are playing. The rotation causes the menu to change between holes (Hole 1, Hole 2, etc) or various practice targets (stakes, trees) to show up on line 1 of the LCD. The final portion of the loop is reading the push button. The ClickEncoder library has provisions to interpret a single click, double click, a held button and a released button. I set my button to produce the following results: (1) on a double click, the menu moves to the right. This is only used immediately after the MenuItem Home screen to move between MenuItem P1 (“PLAY”) and MenuItem R1 (“PRACTICE”). I structured my menu at line 142 to add the Practice menu to the right of the Play menu, and to add at line 162 the Play menu to the right of the Practice menu. The double click allows you to move in a circle between Play to Practice and then back to Play. (2) on a single click, the menu item that is showing on the LCD line 1 is selected for use. Since the menu items (other than Play and Practice) are set up vertically (up and down), the encoder scrolls up and down through the holes allowing you to pick the hole you are playing. Once you select the hole or practice area you wish to use, that hole number or practice area shows up on line 1 of the LCD, and the distance(s) to the green (FRONT, CENTER, BACK) or practice target (RED, WHITE, BLUE) are given on lines 2, 3 and 4. Rotating the encoder again moves you back to the menu system to select your next target. If you are on the range practicing and then go the first tee, rotating the encoder takes you back to menu R1 (PRACTICE). Double clicking the button moves the menu to P1 (PLAY) and you are ready to go. (3) by holding the button down, the watchdog is called and the sketch is re-initialized. I put this in so that I wouldn't have to open the case and access the arduino reset button if for some reason the sketch froze during use.