Ok. not much of a project, just changing cases, but I don't remember putting this project up here so in the process of
changing it over I thought I would go over the details of this GPS data logger that writes a KML track file to use with Google Earth.
[video=youtube_share;5Bp0cpiBj5s]
Comments
all the electronics into the lid of the new case.
I ran into a snag as I butchered my microSD adapter, but finally got all the hardware
working again and hope to go over some software updates in the next video.
So until I get finished with that here is a kml file that it kicked out today and a clip of it on Google Earth. Didn't get
good readings with the GPS as I had unit in pants pocket. Usually does better in backpack.
<?xml version='1.0' encoding='UTF-8'?> <kml xmlns='http://www.opengis.net/kml/2.2' xmlns:gx='http://www.google.com/kml/ext/2.2'> <Document> <description>This is track #2 that was started on 5/15/2012</description> <Placemark> <TimeSpan> <begin>2012-05-15T12:10:27Z</begin><end>2012-05-15T12:10:37Z</end></TimeSpan> <name>Start</name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04507</longitude> <latitude>29.18678</latitude> <altitude>0</altitude> </Location> <Orientation> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04507</longitude> <latitude>29.18678</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:10:28Z</begin><end>2012-05-15T12:10:38Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04508</longitude> <latitude>29.18678</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:10:29Z</begin><end>2012-05-15T12:10:39Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04508</longitude> <latitude>29.18679</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:10:34Z</begin><end>2012-05-15T12:10:44Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04507</longitude> <latitude>29.18681</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:10:39Z</begin><end>2012-05-15T12:10:49Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04505</longitude> <latitude>29.18678</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>0</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:10:44Z</begin><end>2012-05-15T12:10:54Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04503</longitude> <latitude>29.18675</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>0</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:10:49Z</begin><end>2012-05-15T12:10:59Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04501</longitude> <latitude>29.18672</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>0</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:10:54Z</begin><end>2012-05-15T12:11:04Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04499</longitude> <latitude>29.18669</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>0</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:04Z</begin><end>2012-05-15T12:11:14Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04495</longitude> <latitude>29.18666</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>0</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:04Z</begin><end>2012-05-15T12:11:14Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.0449</longitude> <latitude>29.18664</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>315</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:09Z</begin><end>2012-05-15T12:11:19Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04472</longitude> <latitude>29.1867</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>315</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:18Z</begin><end>2012-05-15T12:11:28Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04454</longitude> <latitude>29.18671</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>315</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:18Z</begin><end>2012-05-15T12:11:28Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04445</longitude> <latitude>29.1867</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:23Z</begin><end>2012-05-15T12:11:33Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04445</longitude> <latitude>29.1867</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:28Z</begin><end>2012-05-15T12:11:38Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.0445</longitude> <latitude>29.18691</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>225</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:33Z</begin><end>2012-05-15T12:11:43Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.0445</longitude> <latitude>29.18691</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>225</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:38Z</begin><end>2012-05-15T12:11:48Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.0445</longitude> <latitude>29.18691</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>225</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:43Z</begin><end>2012-05-15T12:11:53Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.0445</longitude> <latitude>29.18691</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>225</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:48Z</begin><end>2012-05-15T12:11:58Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.0445</longitude> <latitude>29.18691</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>225</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:58Z</begin><end>2012-05-15T12:12:08Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.0445</longitude> <latitude>29.18691</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>225</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:11:58Z</begin><end>2012-05-15T12:12:08Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04466</longitude> <latitude>29.18714</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>315</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:03Z</begin><end>2012-05-15T12:12:13Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04441</longitude> <latitude>29.18678</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>225</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:08Z</begin><end>2012-05-15T12:12:18Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04421</longitude> <latitude>29.18669</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:13Z</begin><end>2012-05-15T12:12:23Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04411</longitude> <latitude>29.18669</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:18Z</begin><end>2012-05-15T12:12:28Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04402</longitude> <latitude>29.18669</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:27Z</begin><end>2012-05-15T12:12:37Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04399</longitude> <latitude>29.1867</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>0</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:32Z</begin><end>2012-05-15T12:12:42Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04392</longitude> <latitude>29.18666</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:33Z</begin><end>2012-05-15T12:12:43Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04375</longitude> <latitude>29.18665</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:42Z</begin><end>2012-05-15T12:12:52Z</end></TimeSpan> </Placemark> <Placemark> <name></name> <Model id='hike'> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>-82.04367</longitude> <latitude>29.18667</latitude> <altitude>0</altitude> </Location> <Orientation> <heading>270</heading> <tilt>0</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>hike.dae</href> </Link> </Model> <TimeSpan> <begin>2012-05-15T12:12:42Z</begin><end>2012-05-15T12:12:52Z</end></TimeSpan> </Placemark> </Document> </kml>
How are your regulating the voltage in your logger?
I had a GPS logger that was working pretty well until I added a switching regulator in order to use the battery power more efficiently. The switching regulator seriously interfered with the GPS reception.
A had a similar problem when I tried to use a LCD with a backlight. The backlight voltage booster, interfered with the GPS signal.
Apparently there are ways of shield these noisy items but I haven't learned how to do it yet.
I did purchase some copper tape from SparkFun in hopes of making a metal cage for the noisy items. I haven't tried using it yet.
Does make me wonder if I could get more interference now from the other components as I now have everything crammed together. Copper tape going on the wish list.
I store the .dae files in the main directory of the micro SD card that I write the tracks to. The flag pole for when the placemark button is pressed I made in 3d studio max.
On a side note, if you wanted to reduce your size a bit more, you could take one of my M44D40+ modules and my micro-microSD adapter to get a PCB footprint about the size of a DIP40 chip.
OMG, I would have room for all sorts of stuff using your M44D40+ board.
Code is coming soon. It is really nasty, but working. With the change, I wanted to fix some of the things I was doing.
1. Now it checks to see if file exist, so as not to overwrite previous tracks.
2. It now closes and appends to file, which gives me a better chance to recover data if something crashes. I was leaving file open for the whole write
3. Not a fix, but added a new placemark function for the the added button that plants the flag.
I am working on the last addition. I wanted a larger clock as I am using this for video and the small time numbers on the animation slider don't show up. So I am overlaying a flip-number clock
to the bottom right of the window.
Got a lot of movement considering it sit on my computer desk the whole time, but the clock overlay is working!
The propeller code so far. I have to package up everything in a zip file as I modified GPS Float with some extra methods.
CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 carbutton = 9 bikebutton = 7 hikebutton = 10 carLED = 8 bikeLED = 6 hikeLED = 11 Placemarkbutton = 12 orangeLED = 14 greenLED = 13 'gps is pin 5 'MicroSD card adapter is on pins 16,17,18,19 obj sdcard: "fsrw" gps : "GPS_Float" FS : "FloatString" var long latold, latnew, longold, longnew, distance long x, filenum, open, oldelevation, newelevation long Stack[32], carpressed, bikepressed, hikepressed, placemark, firstloopcheck long model long year, month, day, hour, minute, second, endhour,endminute,endsecond long count 'for counting every 8th icon to fly map over to new position long Elcheck,rtcheck 'elevation and rotation changes long writing 'is one if writing to card long getout 'to get out of findnewfile nest long OLhour,OLminute pub Startup '900 coordinate updates an hour / every 4 seconds gps.init ' 4 cogs initButtons ' 1 cog sdcard.mount ' 1 cog dira[orangeLED]~~ 'card writing LED indicator outa[orangeLED] := 0 dira[greenLED]~~ 'sat fix LED indicator outa[greenLED] := 0 filenum := 0 open := 0 model := 0 carpressed := 0 bikepressed := 0 hikepressed := 0 placemark := 0 writing := 0 getout := 0 Mainprogram Pub Mainprogram firstloopcheck := 0 repeat repeat while carpressed == 0 and bikepressed == 0 and hikepressed == 0 'just wait until button pressed first time CheckSatFix ShortBlink if open == 1 'if file open and button pressed, close file. firstloopcheck := 0 writing := 0 Endfile else distance := 0 'start new file using filenum to increment filenames if carpressed == 1 model := 1 if bikepressed == 1 model := 2 if hikepressed == 1 model := 3 carpressed := 0 bikepressed := 0 hikepressed := 0 Openfile writing := 1 Pub Openfile filenum++ FindNewFile 'find a track# that has not been used WriteFileHeader open := 1 count := 1 getout := 0 WriteIcons Pub FindNewFile if getout == 0 'dont do again if already opened a file case filenum 1: if sdcard.popen(string("track1.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track1.kml"),"w") getout := 1 else filenum++ FindNewFile 2: if sdcard.popen(string("track2.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track2.kml"),"w") getout := 1 else filenum++ FindNewFile 3: if sdcard.popen(string("track3.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track3.kml"),"w") getout := 1 else filenum++ FindNewFile 4: if sdcard.popen(string("track4.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track4.kml"),"w") getout := 1 else filenum++ FindNewFile 5: if sdcard.popen(string("track5.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track5.kml"),"w") getout := 1 else filenum++ FindNewFile 6: if sdcard.popen(string("track6.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track6.kml"),"w") getout := 1 else filenum++ FindNewFile 7: if sdcard.popen(string("track7.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track7.kml"),"w") getout := 1 else filenum++ FindNewFile 8: if sdcard.popen(string("track8.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track8.kml"),"w") getout := 1 else filenum++ FindNewFile 9: if sdcard.popen(string("track9.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track9.kml"),"w") getout := 1 else filenum++ FindNewFile 10: if sdcard.popen(string("track10.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track10.kml"),"w") getout := 1 else filenum++ FindNewFile 11: if sdcard.popen(string("track11.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track11.kml"),"w") getout := 1 else filenum++ FindNewFile 12: if sdcard.popen(string("track12.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track12.kml"),"w") getout := 1 else filenum++ FindNewFile 13: if sdcard.popen(string("track13.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track13.kml"),"w") getout := 1 else filenum++ FindNewFile 14: if sdcard.popen(string("track14.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track14.kml"),"w") getout := 1 else filenum++ FindNewFile 15: if sdcard.popen(string("track15.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track15.kml"),"w") getout := 1 else filenum++ FindNewFile 16: if sdcard.popen(string("track16.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track16.kml"),"w") getout := 1 else filenum++ FindNewFile 17: if sdcard.popen(string("track17.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track17.kml"),"w") getout := 1 else filenum++ FindNewFile 18: if sdcard.popen(string("track18.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track18.kml"),"w") getout := 1 else filenum++ FindNewFile 19: if sdcard.popen(string("track19.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track19.kml"),"w") getout := 1 else filenum++ FindNewFile 20: if sdcard.popen(string("track20.kml"),"r")== -1 'file doesn't exist sdcard.popen(string("track20.kml"),"w") getout := 1 else filenum++ FindNewFile Pub EndFile Shortblink 'CheckSatFix TakeReading AppendFile sdcard.SDStr(string("<Placemark>",13,10)) TimeStamp sdcard.SDStr(string("<name>Finished. Distance traveled is ")) sdcard.sddec(distance) sdcard.SDStr(string(" ft ")) sdcard.sdstr(fs.floattostring(gps.miles)) sdcard.SDStr(string(" miles </name>",13,10)) elcheck := gps.ElevationCheck rtcheck := gps.rotation WriteModel sdcard.SDStr(string("</Placemark>",13,10)) sdcard.SDStr(string(" </Document>",13,10)) sdcard.SDStr(string("</kml>",13,10)) sdcard.pclose LongBlink open := 0 carpressed := 0 bikepressed := 0 hikepressed := 0 PUB InitButtons cognew(button(@carpressed,@bikepressed,@hikepresse d,@placemark,@writing), @stack) Pub button(cp,bp,hp,pm,wrt) 'three buttons to start hike, bike, or car track dira[carbutton]~ 'car dira[bikebutton]~ 'bike dira[hikebutton]~ 'hike dira[placemarkbutton]~ dira[carLED]~~ dira[bikeLED]~~ dira[hikeLED]~~ outa[carLED] := 0 outa[bikeLED] := 0 outa[hikeLED] := 0 long[cp] := 0 'car press long[bp] := 0 'bike press long[hp] := 0 'hike press long[pm] := 0 repeat if ina[placemarkbutton] == 1 long[pm] := 1 if long[wrt] == 0 'if starting file if ina[carbutton] == 1 'stores a button press until an action is done in main program to remove timing issues. long[cp] := 1 outa[carLED] := 1 outa[bikeLED] := 0 outa[hikeLED] := 0 if ina[bikebutton] == 1 long[bp] := 1 outa[carLED] := 0 outa[bikeLED] := 1 outa[hikeLED] := 0 if ina[hikebutton] == 1 long[hp] := 1 outa[carLED] := 0 outa[bikeLED] := 0 outa[hikeLED] := 1 else 'if ending file turn all button lights off outa[carLED] := 0 outa[bikeLED] := 0 outa[hikeLED] := 0 Pub CheckSatFix repeat while gps.Long_Fix_Quality < 1 or gps.Long_Fix_Quality > 8 FixIndicatoroff if open == 1 if carpressed == 1 or bikepressed == 1 or hikepressed == 1 endfile main2 FixIndicatorOn Pub FixIndicatorOn outa[greenLED] := 1 Pub FixIndicatorOff outa[greenLED] := 0 Pub WriteFileHeader sdcard.SDStr(string("<?xml version='1.0' encoding='UTF-8'?>",13,10)) sdcard.SDStr(string("<kml xmlns='http://www.opengis.net/kml/2.2'",13,10)) sdcard.SDStr(string("xmlns:gx='http://www.google.com/kml/ext/2.2'>",13,10)) 'sdcard.SDStr(string("<Feature id='Ragtops path'>",13,10)) sdcard.SDStr(string(" <Document>",13,10)) sdcard.SDStr(string("<description>This is track #")) sdcard.SDDec(filenum) sdcard.SDStr(string(" that was started on ")) sdcard.sddec(gps.Long_Month) sdcard.SDStr(string("/")) sdcard.sddec(gps.Long_Day) sdcard.SDStr(string("/")) sdcard.sddec(gps.Long_year) sdcard.SDStr(string("</description>",13,10)) '-------------colon for Time Overlay ----- sdcard.SDStr(string("<ScreenOverlay>",13,10)) sdcard.SDStr(string("colon",13,10)) sdcard.SDStr(string("<Icon>",13,10)) sdcard.SDStr(string("<href>colon.png</href> ",13,10)) sdcard.SDStr(string("</Icon>",13,10)) sdcard.SDStr(string("<overlayXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<screenXY x='.11' y='.1' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<rotationXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<size x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("</ScreenOverlay> ",13,10)) TakeReading sdcard.SDStr(string("<Placemark>",13,10)) TimeStamp sdcard.SDStr(string("<name>Start</name>",13,10)) WriteModel sdcard.SDStr(string("</Placemark>",13,10)) firstloopcheck := 1 PUB WriteModel case model 1: sdcard.SDStr(string("<Model id='car'>",13,10)) 2: sdcard.SDStr(string("<Model id='bike'>",13,10)) 3: sdcard.SDStr(string("<Model id='hike'>",13,10)) sdcard.SDStr(string("<altitudeMode>relativeToGround</altitudeMode>",13,10)) sdcard.SDStr(string("<Location>",13,10)) sdcard.SDStr(string("<longitude>")) sdcard.sdstr(fs.floattostring(longnew)) sdcard.SDStr(string("</longitude>",13,10)) sdcard.SDStr(string("<latitude>")) sdcard.sdstr(fs.floattostring(latnew)) sdcard.SDStr(string("</latitude>",13,10)) sdcard.SDStr(string("<altitude>0</altitude>",13,10)) sdcard.SDStr(string("</Location>",13,10)) sdcard.SDStr(string("<Orientation>",13,10)) if model == 2 case rtcheck 1: sdcard.SDStr(string("<heading>270</heading>",13,10)) 'north 2: sdcard.SDStr(string("<heading>315</heading>",13,10)) 'north east 3: sdcard.SDStr(string("<heading>0</heading>",13,10)) 'east 4: sdcard.SDStr(string("<heading>45</heading>",13,10)) 'southeast 5: sdcard.SDStr(string("<heading>90</heading>",13,10)) 'south 6: sdcard.SDStr(string("<heading>135</heading>",13,10)) ' southwest 7: sdcard.SDStr(string("<heading>180</heading>",13,10)) 'west 8: sdcard.SDStr(string("<heading>225</heading>",13,10)) 'northwest else case rtcheck 1: sdcard.SDStr(string("<heading>180</heading>",13,10)) 'north 2: sdcard.SDStr(string("<heading>225</heading>",13,10)) 'north east 3: sdcard.SDStr(string("<heading>270</heading>",13,10)) 'east 4: sdcard.SDStr(string("<heading>315</heading>",13,10)) 'southeast 5: sdcard.SDStr(string("<heading>0</heading>",13,10)) 'south 6: sdcard.SDStr(string("<heading>45</heading>",13,10)) ' southwest 7: sdcard.SDStr(string("<heading>90</heading>",13,10)) 'west 8: sdcard.SDStr(string("<heading>135</heading>",13,10)) 'northwest sdcard.SDStr(string("<tilt>0</tilt>",13,10)) sdcard.SDStr(string("<roll>0</roll>",13,10)) sdcard.SDStr(string("</Orientation>",13,10)) sdcard.SDStr(string("<Scale>",13,10)) sdcard.SDStr(string("<x>1</x>",13,10)) sdcard.SDStr(string("<y>1</y>",13,10)) sdcard.SDStr(string("<z>1</z>",13,10)) sdcard.SDStr(string("</Scale>",13,10)) sdcard.SDStr(string("<Link>",13,10)) case model 1: sdcard.SDStr(string("<href>car.dae</href> ",13,10)) 2: sdcard.SDStr(string("<href>bike.dae</href> ",13,10)) 3: sdcard.SDStr(string("<href>hike.dae</href> ",13,10)) sdcard.SDStr(string("</Link>",13,10)) sdcard.SDStr(string("</Model>",13,10)) Pub WriteIcons repeat while carpressed == 0 and bikepressed == 0 and hikepressed == 0 Shortblink CheckSatFix TakeReading AppendFile TimeOverlay if placemark == 1 PlaceFlag placemark := 0 count++ elcheck := gps.ElevationCheck rtcheck := gps.rotation sdcard.SDStr(string("<Placemark>",13,10)) sdcard.SDStr(string("<name>")) 'sdcard.sddec(gps.Long_Hour) 'sdcard.SDStr(string(":")) 'sdcard.sddec(gps.Long_minute) {sdcard.SDStr(string(" *E* ")) sdcard.SDDec(Elcheck) sdcard.SDStr(string(" *R* ")) sdcard.SDDec(rtcheck)} sdcard.SDStr(string("</name>",13,10)) ' check for being stopped. only want one icon, so need to check if still stopped. WriteModel TimeStamp sdcard.SDStr(string("</Placemark>",13,10)) sdcard.pclose waitcnt (clkfreq * 4 + cnt) Pub PlaceFlag sdcard.SDStr(string("<Placemark>",13,10)) sdcard.SDStr(string("<name>Placemark")) sdcard.SDStr(string("</name>",13,10)) 'WriteModel sdcard.SDStr(string("<Model id='flag'>",13,10)) sdcard.SDStr(string("<altitudeMode>relativeToGround</altitudeMode>",13,10)) 'sdcard.SDStr(string("<size x='-1' y='-1' xunits='fraction' yunits='fraction'/>",13,10)) was suppose to keep size sdcard.SDStr(string("<Location>",13,10)) sdcard.SDStr(string("<longitude>")) sdcard.sdstr(fs.floattostring(longnew)) sdcard.SDStr(string("</longitude>",13,10)) sdcard.SDStr(string("<latitude>")) sdcard.sdstr(fs.floattostring(latnew)) sdcard.SDStr(string("</latitude>",13,10)) sdcard.SDStr(string("<altitude>0</altitude>",13,10)) sdcard.SDStr(string("</Location>",13,10)) sdcard.SDStr(string("<Link>",13,10)) sdcard.SDStr(string("<href>flag.dae</href> ",13,10)) sdcard.SDStr(string("</Link>",13,10)) sdcard.SDStr(string("</Model>",13,10)) sdcard.SDStr(string("</Placemark>",13,10)) Pub AppendFile case filenum 1: sdcard.popen(string("track1.kml"),"a") 2: sdcard.popen(string("track2.kml"),"a") 3: sdcard.popen(string("track3.kml"),"a") 4: sdcard.popen(string("track4.kml"),"a") 5: sdcard.popen(string("track5.kml"),"a") 6: sdcard.popen(string("track6.kml"),"a") 7: sdcard.popen(string("track7.kml"),"a") 8: sdcard.popen(string("track8.kml"),"a") 9: sdcard.popen(string("track9.kml"),"a") 10: sdcard.popen(string("track10.kml"),"a") 11: sdcard.popen(string("track11.kml"),"a") 12: sdcard.popen(string("track12.kml"),"a") 13: sdcard.popen(string("track13.kml"),"a") 14: sdcard.popen(string("track14.kml"),"a") 15: sdcard.popen(string("track15.kml"),"a") 16: sdcard.popen(string("track16.kml"),"a") 17: sdcard.popen(string("track17.kml"),"a") 18: sdcard.popen(string("track18.kml"),"a") 19: sdcard.popen(string("track19.kml"),"a") 20: sdcard.popen(string("track20.kml"),"a") Pub ShortBlink outa[greenLED] := 0 repeat 8 !outa[orangeLED] waitcnt(9000_000 + cnt) outa[greenLED] := 1 Pub LongBlink outa[greenLED] := 0 outa[orangeLED] := 1 waitcnt(clkfreq * 4 + cnt) outa[orangeLED] := 0 outa[greenLED] := 1 Pub RecordOn outa[14] := 1 Pub RecordOff outa[14] := 0 PUB TakeReading CheckSatFix longold := longnew latold := latnew longnew := gps.Float_Longitude_Deg latnew := gps.Float_Latitude_Deg if firstloopcheck <> 0 gps.distance(latold,longold,latnew,longnew) distance := gps.final Pub TimeStamp sdcard.SDStr(string("<TimeSpan>",13,10)) sdcard.SDStr(string("<begin>")) year:=gps.Long_year month:=gps.long_month day:=gps.long_day hour:=gps.long_hour - 4 minute:=gps.long_minute second:=gps.long_second sdcard.sddec(gps.Long_year) sdcard.SDStr(string("-")) if month < 10 sdcard.SDStr(string("0")) sdcard.sddec(month) else sdcard.sddec(month) sdcard.SDStr(string("-")) if day < 10 sdcard.SDStr(string("0")) sdcard.sddec(day) else sdcard.sddec(day) sdcard.SDStr(string("T")) if hour < 10 sdcard.SDStr(string("0")) sdcard.sddec(hour) else sdcard.sddec(hour) sdcard.SDStr(string(":")) if minute < 10 sdcard.SDStr(string("0")) sdcard.sddec(minute) else sdcard.sddec(minute) sdcard.SDStr(string(":")) if second < 10 sdcard.SDStr(string("0")) sdcard.sddec(second) else sdcard.sddec(second) sdcard.SDStr(string("Z</begin>")) sdcard.SDStr(string("<end>")) CalculateEndTime sdcard.sddec(gps.Long_year) sdcard.SDStr(string("-")) if month < 10 sdcard.SDStr(string("0")) sdcard.sddec(month) else sdcard.sddec(month) sdcard.SDStr(string("-")) if day < 10 sdcard.SDStr(string("0")) sdcard.sddec(day) else sdcard.sddec(day) sdcard.SDStr(string("T")) if endhour < 10 sdcard.SDStr(string("0")) sdcard.sddec(endhour) else sdcard.sddec(endhour) sdcard.SDStr(string(":")) if endminute < 10 sdcard.SDStr(string("0")) sdcard.sddec(endminute) else sdcard.sddec(endminute) sdcard.SDStr(string(":")) if endsecond < 10 sdcard.SDStr(string("0")) sdcard.sddec(endsecond) else sdcard.sddec(endsecond) sdcard.SDStr(string("Z</end>")) sdcard.SDStr(string("</TimeSpan>",13,10)) Pub CalculateEndTime if (second + 10) > 60 if (minute + 1) > 60 endhour := hour + 1 endminute := 0 endsecond := (second + 10) - 60 else endhour := hour endminute := minute + 1 endsecond := (second + 10) - 60 else endhour := hour endminute := minute endsecond := second + 10 PUB TimeOverlay '-------------hour 1 -------- hour:=gps.long_hour have to separate into two digits argh 24 hour plus need -4 for this time OLhour := gps.long_hour - 4 'eastern time OLminute := gps.long_minute sdcard.SDStr(string("<ScreenOverlay>",13,10)) sdcard.SDStr(string("<name>hour 1st digit</name>",13,10)) sdcard.SDStr(string("<Icon>",13,10)) case OLhour 'convert to 12 hour clock 0..9: sdcard.SDStr(string("<href>zero.png</href> ",13,10)) 10..12: sdcard.SDStr(string("<href>one.png</href> ",13,10)) 13..21: sdcard.SDStr(string("<href>zero.png</href> ",13,10)) '1 to 9 22..24: sdcard.SDStr(string("<href>one.png</href> ",13,10)) '10 to 12 sdcard.SDStr(string("</Icon>",13,10)) sdcard.SDStr(string("<overlayXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<screenXY x='.01' y='.1' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<rotationXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<size x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) OverlayTimeStamp 'special time stamp with no end time sdcard.SDStr(string("</ScreenOverlay> ",13,10)) '-------------hour 2 ------------------------ sdcard.SDStr(string("<ScreenOverlay>",13,10)) sdcard.SDStr(string("<name>hour 2nd digit</name>",13,10)) sdcard.SDStr(string("<Icon>",13,10)) case OLhour 1: sdcard.SDStr(string("<href>one.png</href> ",13,10)) 2: sdcard.SDStr(string("<href>two.png</href> ",13,10)) 3: sdcard.SDStr(string("<href>three.png</href> ",13,10)) 4: sdcard.SDStr(string("<href>four.png</href> ",13,10)) 5: sdcard.SDStr(string("<href>five.png</href> ",13,10)) 6: sdcard.SDStr(string("<href>six.png</href> ",13,10)) 7: sdcard.SDStr(string("<href>seven.png</href> ",13,10)) 8: sdcard.SDStr(string("<href>eight.png</href> ",13,10)) 9: sdcard.SDStr(string("<href>nine.png</href> ",13,10)) 10: sdcard.SDStr(string("<href>zero.png</href> ",13,10)) 11: sdcard.SDStr(string("<href>one.png</href> ",13,10)) 12: sdcard.SDStr(string("<href>two.png</href> ",13,10)) 13: sdcard.SDStr(string("<href>one.png</href> ",13,10)) 14: sdcard.SDStr(string("<href>two.png</href> ",13,10)) 15: sdcard.SDStr(string("<href>three.png</href> ",13,10)) 16: sdcard.SDStr(string("<href>four.png</href> ",13,10)) 17: sdcard.SDStr(string("<href>five.png</href> ",13,10)) 18: sdcard.SDStr(string("<href>six.png</href> ",13,10)) 19: sdcard.SDStr(string("<href>seven.png</href> ",13,10)) 20: sdcard.SDStr(string("<href>eight.png</href> ",13,10)) 21: sdcard.SDStr(string("<href>nine.png</href> ",13,10)) 22: sdcard.SDStr(string("<href>zero.png</href> ",13,10)) 23: sdcard.SDStr(string("<href>one.png</href> ",13,10)) 24: sdcard.SDStr(string("<href>two.png</href> ",13,10)) sdcard.SDStr(string("</Icon>",13,10)) sdcard.SDStr(string("<overlayXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<screenXY x='.06' y='.1' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<rotationXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<size x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) OverlayTimeStamp 'special time stamp with no end time sdcard.SDStr(string("</ScreenOverlay> ",13,10)) '-------------minute 1 -------- minute:=gps.long_minute separate into two digits sdcard.SDStr(string("<ScreenOverlay>",13,10)) sdcard.SDStr(string("<name>minute 1st digit</name>",13,10)) sdcard.SDStr(string("<Icon>",13,10)) case OLminute 0..9: sdcard.SDStr(string("<href>zero.png</href> ",13,10)) 10..19: sdcard.SDStr(string("<href>one.png</href> ",13,10)) OLminute := OLminute - 10 20..29: sdcard.SDStr(string("<href>two.png</href> ",13,10)) OLminute := OLminute - 20 30..39: sdcard.SDStr(string("<href>three.png</href> ",13,10)) OLminute := OLminute - 30 40..49: sdcard.SDStr(string("<href>four.png</href> ",13,10)) OLminute := OLminute - 40 50..59: sdcard.SDStr(string("<href>five.png</href> ",13,10)) OLminute := OLminute - 50 sdcard.SDStr(string("</Icon>",13,10)) sdcard.SDStr(string("<overlayXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<screenXY x='.16' y='.1' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<rotationXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<size x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) OverlayTimeStamp 'special time stamp with no end time sdcard.SDStr(string("</ScreenOverlay> ",13,10)) '-------------minute 2 ------------------------ sdcard.SDStr(string("<ScreenOverlay>",13,10)) sdcard.SDStr(string("<name>minute 2nd digit</name>",13,10)) sdcard.SDStr(string("<Icon>",13,10)) case OLminute 0: sdcard.SDStr(string("<href>zero.png</href> ",13,10)) 1: sdcard.SDStr(string("<href>one.png</href> ",13,10)) 2: sdcard.SDStr(string("<href>two.png</href> ",13,10)) 3: sdcard.SDStr(string("<href>three.png</href> ",13,10)) 4: sdcard.SDStr(string("<href>four.png</href> ",13,10)) 5: sdcard.SDStr(string("<href>five.png</href> ",13,10)) 6: sdcard.SDStr(string("<href>six.png</href> ",13,10)) 7: sdcard.SDStr(string("<href>seven.png</href> ",13,10)) 8: sdcard.SDStr(string("<href>eight.png</href> ",13,10)) 9: sdcard.SDStr(string("<href>nine.png</href> ",13,10)) sdcard.SDStr(string("</Icon>",13,10)) sdcard.SDStr(string("<overlayXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<screenXY x='.21' y='.1' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<rotationXY x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) sdcard.SDStr(string("<size x='0' y='0' xunits='fraction' yunits='fraction'/> ",13,10)) OverlayTimeStamp 'special time stamp with no end time sdcard.SDStr(string("</ScreenOverlay> ",13,10)) Pub OverlayTimeStamp sdcard.SDStr(string("<TimeSpan>",13,10)) sdcard.SDStr(string("<begin>")) year:=gps.Long_year month:=gps.long_month day:=gps.long_day hour:=gps.long_hour - 4 minute:=gps.long_minute second:=gps.long_second sdcard.sddec(gps.Long_year) sdcard.SDStr(string("-")) if month < 10 sdcard.SDStr(string("0")) sdcard.sddec(month) else sdcard.sddec(month) sdcard.SDStr(string("-")) if day < 10 sdcard.SDStr(string("0")) sdcard.sddec(day) else sdcard.sddec(day) sdcard.SDStr(string("T")) if hour < 10 sdcard.SDStr(string("0")) sdcard.sddec(hour) else sdcard.sddec(hour) sdcard.SDStr(string(":")) if minute < 10 sdcard.SDStr(string("0")) sdcard.sddec(minute) else sdcard.sddec(minute) sdcard.SDStr(string(":")) if second < 10 sdcard.SDStr(string("0")) sdcard.sddec(second) else sdcard.sddec(second) sdcard.SDStr(string("Z</begin>")) sdcard.SDStr(string("</TimeSpan>",13,10))
graphics.zip
GPS Datalogger.zip
But it got me searching the internet for the cases and I finally found a source for them. Beach floats
I still got to find a place to just get a few.
Sorry to hear about the broken case. It's a pain when something like that happens.
I found a place on ebay that will sell just one. I think $12.50 shipped is a bit excessive.
I just requested a quote from the place you linked to for unprinted totes. I also asked if they'd sell just 100.
If I buy some, I'll sell you part of my order if you want.
I think I might could get a used otter box for that range which would be a stronger box.
Getting a few of these at around the wholesale price would be great!
http://www.goldmine-elec-products.com/prodinfo.asp?number=25JULY12
I was trying to compile the code you posted on 5-20-2012, but I get an error on line 295. Tried it with PropTool and BST.
Thanks!
Jim
PS Nice Work on all the extras!
I'd really like to see how it turned out.
BTW, after you mentioned OtterBoxes, I ordered a several different sizes. They're really nice little water tight boxes. I might move my GPS project into the smallest one.
That should be method call mainprogram. I must of not saved it after changing it.
Can do.
@Ragtop
Kinda what if figured. I had replace main2 with main program before and it complied correctly.
Now to build the hardware!
Thanks!
Jim
getting out to put it to use, so was waiting on next 24 hour scenario paintball game
to do this video.
[video=youtube_share;QhyoDmMpV4o]
I convert that to video using a screen capture program called FastStone.