A Modest Proposal

Dummy Lego Ring

Actually, it was an epic proposal. Of marriage.

As founder of Dexter Industries, I try to write every single customer and see that each purchase from our website is working out.  When I checked in on Jay Davey and his purchase of a dGPS, I thought we would be getting a usual response:  “Worked ok” “Need to improve this” or “<SPAM>”.

Instead, I got a very heart-warming response from Jay about how he used it in an epic proposal of marriage to his future wife

This wasn’t exactly what I was expecting.  I was blown away.

Jay graciously agreed to share his awesome story on our blog.  We’re flattered to have been a part, even a small part, in such a huge event in two people’s lives.  Thank you Jay for sharing this with us!  Below are some pictures, the story, and code (yes, computer code for a marriage proposal . . .  may yours be so awesome!).

Hi John,

Thank you for your email. My purchase at DI has been a part of one of the happiest days of my life.

I had wanted to ask my girlfriend to marry me for some time but couldn’t work out how to pop the question.

Long story short, I decided to use my dGPS sensor that I purchased from Dexter Industries to send Helen on a GPS guided treasure hunt around the town of Hershey in PA.

Helen had just attended a volunteer stroke rehabilitation clinic in Jamaica and so I found some time to plan out my proposal.  I chose the town of Hershey because it is close by our home but is much more beautiful!  I swear the town can sometimes literally smell like chocolate! Perfect place for an engagement.

I had decided to propose without an actual engagement ring.  This was following the advice of my mother and two sisters who insisted that I let Helen choose her own ring.  For this reason I made a ring with a Lego brick on it.  I still had to make the engagement appear personal and clever, well planned and really well executed, to show Helen that I had put lots of love and thought into my proposal, even though there wasn’t any diamonds.  I knew Hershey had a beautiful botanical gardens and I found out that the rose garden was in full bloom this time of year.  I decided this was the perfect place to propose. To make the proposal appear will organized I booked 3 days’ worth of activities for us to enjoy…

We set off for our vacation after Helen returned from Jamaica.  I assured her that I had pre-booked and prepaid everything so all she had to do was come along.  I got lucky here because Helen’s birthday happened while she was in Jamaica and so I initially told her it was part of her birthday treat.  I told her the kinds of things she would need to bring (for instance on day two we would need swimmers and day 3 we would need runners). We started our 3 day long ‘treasure hunt’ around Hershey when I gave Helen my Lego Mindstorms NXT with a dGPS sensor attached. I had pre-programmed the NXT to remember a list of GPS coordinates (found using Google maps satellite view) of every location that Helen would be going to during our time in Hershey. When she turned on the NXT in the car on our way the screen told her how many miles and feet she was from her first waypoint (checkpoint).  Helen played along really well and she enjoyed this fun game we would be playing on our trip, not knowing where exactly she was going but knowing that it was all planned and booked in advance. I told her I would let her know when we had to leave to go to the next place and where that would be along the way.

The first location was to Hersheypark which is a massive chocolate themed roller coaster park. Helen and I both love roller coasters so this was a great way to get some thrills. The next location was to find our hotel and then out to dinner (each place had its own GPS coordinate that Helen had to find before the GPS would let her go to the next location). Day two we went to a North American zoo, a water theme park, found more restaurants, and a chocolate spa. On the third day I took her to a Segway riding school where we spent all morning riding off-road Segways. By this time Helen tells me she is thinking “holy crap, I’m gonna have to try really hard for your birthday next year!”.  This was a good lead in to the last final destination – Hershey botanical gardens. Before I let her loose in the gardens I explained to her that the ‘treasure hunt’ would be really anti-climactic if she found all of the goals and at the end there was no treasure or anything to want to keep up the game. So at this point I gave her a small wooden box that I made for her. The box I had made at school in the week she was in Jamaica and had her name laser etched on the top. I had specially made the box for the proposal to hold the Lego ring. Helen found an obvious problem when she got the box. It wouldn’t open. This was deliberate. I had made the box so that it was completely sealed shut from the inside until Helen found the last goal. When she found the goal the NXT became the key to opening the box. She would have to plug the NXT into the box and the box would open if the NXT detected that the GPS was in the right location…

So! Here goes Helen and I around the botanical gardens trying to find the last goal, going only by how many feet we were away from the GPS coordinate programmed into the GPS’s memory. Gradually, Helen and I made our way down into the secluded rose garden and the GPS told Helen it was now possible for her to open the box…

…Helen found a ring with a Lego brick on it, got a little bit confused, and so then I took the ring out, got down on one knee and asked her to marry me. She was super surprised and had no idea that this was where the treasure hunt was leading to!  She said yes!  We were both super excited and she laughed super hard after realizing all the clues that she had missed leading up to the proposal. She loved the Lego ring and I did reassure her that the Lego ring is not the actual ring shortly afterwards.  She said she loved it and would wear it anyway!  We did though go straight to the shopping outlets to the Jewelers and Helen actually found a ring she really loved.  I purchased the ring for her and that was that.

John, thank you and your team at DI, for making a sweet reliable sensor that guided Helen via dGPS into my arms for life.  Our 1st Wedding Anniversary has just passed and we are living happily ever after.

Download Jay’s Source here:  HelenInHershey.nxc

[sourcecode language=”cpp”] #define OK LDR_SUCCESS

task main(){
SetSensorLowspeed(S3);

//—————————-
// Hershey waypoints
//—————————-
long Hlat[12];
long Hlng[12];
long Hr[12];

// Latitude, Longitude, Radius,
Hlat[0] = 40289674; Hlng[0]=-76663198; Hr[0]=1000;
Hlat[1] = 40282413; Hlng[1]=-76657319; Hr[1]=100;
Hlat[2] = 40285316; Hlng[2]=-76651319; Hr[2]=100;
Hlat[3] = 40282413; Hlng[3]=-76657319; Hr[3]=100;
Hlat[4] = 40289674; Hlng[4]=-76663198; Hr[4]=1000;
Hlat[5] = 40299449; Hlng[5]=-76658623; Hr[5]=500;
Hlat[6] = 40282413; Hlng[6]=-76657319; Hr[6]=100;
Hlat[7] = 40285421; Hlng[7]=-76650978; Hr[7]=100;
Hlat[8] = 40282413; Hlng[8]=-76657319; Hr[8]=100;
Hlat[9] = 40299449; Hlng[9]=-76658623; Hr[9]=100;
Hlat[10] = 40297408; Hlng[10]=-76658757; Hr[10]=100;
Hlat[11] = 40296884; Hlng[11]=-76657129; Hr[11]=40;

// Names
string Hname[12]={"- Hersheypark -",
"-Days Inn Hotel-",
"-Devon Seafood -",
"-Days Inn Hotel-",
"- Hersheypark -",
"- Chocolate Spa-",
"-Days Inn Hotel-",
"- Houlihans Bar-",
"-Days Inn Hotel-",
"- Segway Ride -",
"H’shey Gardens 1",
"H’shey Gardens 2"};

//———————————

/*
//————————————–
// Testing waypoints in Philadelphia
//————————————–
long Tlat[4];
long Tlng[4];
long Tr[4];

// lat long radius
Tlat[0] = 40089188; Tlng[0] = -75130278; Tr[0] = 100; //robs apartment dist = 2.0 miles, (10560 ft)
Tlat[1] = 40062121; Tlng[1] = -75085822; Tr[1] = 100; //pathmark dist = 1.0 miles, (5280 ft)
Tlat[2] = 40071366; Tlng[2] = -75127296; Tr[2] = 100; //elkins park station dist = 1.8 miles, (9504 ft)
Tlat[3] = 40070627; Tlng[3] = -75101611; Tr[3] = 100; //26 township line rd

// Names
string Tname[4]={
"- Rob’s Apt -",
"- Pathmark -",
"- E.P train st -",
"- 26 Township L-"
};
*/

//turn on green screen light
//SetSensorColorGreen(S4);

byte handle, time = 0;
int n, fsize,len, i;
string in;

//Find which waypoint we are up to
OpenFileRead("Waypoints.txt",fsize,handle);
ReadLnString(handle,in);
CloseFile(handle);
ClearScreen();
int WaypointIndex = StrToNum(in);
long lat;
long lng;

if(WaypointIndex<12){
// wait for GPS to establish a link with satellites
TextOut(0, LCD_LINE3, "Waiting for GPS" );
TextOut(20, LCD_LINE4, "to find" );
TextOut(10, LCD_LINE5, "satellites…" );
TextOut(0, LCD_LINE7, "GPS count:" );
while(SensorDIGPSStatus(S3)==false){
Wait(200);
NumOut(60, LCD_LINE7, SensorDIGPSTime(S3));
}
}

ClearScreen();
float x1, x2;
float y1, y2;
float a, a_2;
float b, b_2;
float c, c_2;
float c_feet, c_miles;

while(WaypointIndex<12){
x1 = Hlat[WaypointIndex];
y1 = Hlng[WaypointIndex];

//read GPS lat and long
x2 = SensorDIGPSLatitude(S3);
y2 = SensorDIGPSLongitude(S3);

a = (x2-x1);
a = a/1000; //scale number to prevent overflow in calcs
a_2 = a*a;

b = (y2-y1);
b = b/1000; //scale number to prevent overflow in calcs
b_2 = b*b;

c_2 = a_2+b_2; // pythagorus theorem
c = sqrt(c_2);
c_feet = c*309.2;
c_miles = c_feet/5280;

ClearScreen();
TextOut(0, LCD_LINE1, Hname[WaypointIndex] );
TextOut(0, LCD_LINE2, "Feet :" );
TextOut(0, LCD_LINE3, "Miles:" );
NumOut(40,LCD_LINE2, c_feet);
NumOut(40,LCD_LINE3, c_miles);
TextOut(0, LCD_LINE5, "Goal GPS coords:" );
TextOut(0, LCD_LINE6, "Lat:" );
TextOut(0, LCD_LINE7, "Long:" );
NumOut(40,LCD_LINE6, x2);
NumOut(40,LCD_LINE7, y2);
TextOut(0, LCD_LINE8, "Goal: /12" );
NumOut(50, LCD_LINE8, WaypointIndex+1);
Wait(200);

//if gps is located < 100 feet, make a sound and display "CONGRATULATIONS, you found the goal!"
if (c_feet<Hr[WaypointIndex]){
WaypointIndex++;

//update waypoint indexer in text file
byte fileHandle;
short fileSize;
short bytesWritten;
string write;
DeleteFile("Waypoints.txt" );
CreateFile("Waypoints.txt" , 512, fileHandle);
write = NumToStr(WaypointIndex);
WriteLnString(fileHandle,write, bytesWritten);
CloseFile(fileHandle);

ClearScreen();
TextOut(10, LCD_LINE2, "YAY HELEN!" );
TextOut(0, LCD_LINE4, "You’ve reached" );
TextOut(0, LCD_LINE5, "Goal /12" );
NumOut(35, LCD_LINE5, WaypointIndex);
PlayFile("Hooray.rso" );
if (WaypointIndex!=4){
Wait(20000);
}
}

}

while(1){
//last goal has been reached, pulse output A at high power to open box
ClearScreen();
TextOut(0, LCD_LINE1, "Helen, you found" );
TextOut(0, LCD_LINE2, "the last spot!" );
TextOut(0, LCD_LINE4, "Plug the box in" );
TextOut(0, LCD_LINE5, "Port ‘A’. Push" );
TextOut(0, LCD_LINE6, "Orange button to" );
TextOut(0, LCD_LINE7, "release box…" );
TextOut(0, LCD_LINE8, "…and open it!" );
//wait for button push
until(ButtonPressed(BTNCENTER, false)) Wait(100);

ClearScreen();
GraphicOut(14, 2, "Heart 01.ric" );

OnFwd(OUT_A, 100);
Wait(1000);
Off(OUT_A);
ClearScreen();
GraphicOut(19, 6, "Heart 02.ric" );

for(int j=0;j<4;j++){
Wait(500);
ClearScreen();
GraphicOut(14, 2, "Heart 01.ric" );
OnFwd(OUT_A, 100);
Wait(200);
ClearScreen();
GraphicOut(19, 6, "Heart 02.ric" );
Off(OUT_A);

}

}

}

[/sourcecode]

1 Comment

  1. John February 23, 2013

    What a great story – I particularly like the hand-made box with the NXT/dGPS as the key!

Leave a reply