Close

Code

A project log for Engagement ring GPS box

Arduino controlling a servo motor, a GPS, a buzzer, LCD 2x16 with a LiPo baterry, to produce the right engagement proposal.

thomasThomas 04/20/2014 at 20:320 Comments

//GPS

#include <SoftwareSerial.h>

#include <TinyGPS.h>

//LCD

#include <LiquidCrystal.h> //Inclui a biblioteca do LCD

//Servo

#include <Servo.h>

//Defines

#define GPS_TX 2

#define GPS_RX 3

#define LCD1 13

#define LCD2 12

#define LCD3 11

#define LCD4 10

#define LCD5 9

#define LCD6 8

//#define LUZ_FUNDO 6

#define MOTORPIN 6

#define POWERPIN 5

#define GPSRATE 9600

#define SERIALRATE 115200

#define LATDESTINO -18.919555 //UFU LATITUDE

#define LONDESTINO -48.256945 //UFU LONGITUDE

//#define LATDESTINO -18.885643 //Teste LATITUDE

//#define LONDESTINO -48.256570 //Teste LONGITUDE

//#define LATDESTINO -18.885277 //Teste mto proximo LATITUDE

//#define LONDESTINO -48.255819 //Teste mto proximo LONGITUDE

#define PROXIMIDADE 10 //Quantos metros para abrir a caixa.

#define buzzer 4

#define compasso 1500 //Altera o compasso da música

#include "pitches.h"

const int gameover[] = {

NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4

};

const int tempo_gameover[] = {

8,8,8,8,8,8,8,8,8,8,8,8

};

//GPS

TinyGPS gps;

SoftwareSerial serialgps(GPS_TX,GPS_RX); //TX -> 2(amarelo), RX -> 3(Verde), Vermelho -> 3,3

int year;

byte month, day, hour, hour1, minute, second, hundredths;

unsigned long chars;

unsigned short sentences, failed_checksum;

long previousMillis = 0;

long interval = 5000; //Set 10000

float DLA = 0;

float DLO = 0;

float DistDestino = 0;

float DistMax = 10000;

//Servo

Servo motor;// Motor de 10 à 130

//LCD

LiquidCrystal lcd(LCD1, LCD2, LCD3, LCD4, LCD5, LCD6); //LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

unsigned long UtlTime;

void setup()

{

//GPS

//Serial.begin(SERIALRATE);

serialgps.begin(GPSRATE);

//Serial.println("Print no serial");

//Servo

//motor.attach(MOTORPIN);

//LCD

lcd.begin(16, 2);

lcd.setCursor(4,0);

lcd.print("Procura");

lcd.setCursor(4,1);

lcd.print("Tesouros");

delay (5000);

//lcd.clear();

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" Aguardando GPS ");

delay(1000);

}

void loop()

{

motor.attach(MOTORPIN);

motor.write(10);

delay(350);

motor.detach();

while(1)

{

//INICIO GPS

while(serialgps.available())

{

int c = serialgps.read();

if(gps.encode(c))

{

float latitude, longitude;

gps.f_get_position(&latitude, &longitude);

gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);

gps.stats(&chars, &sentences, &failed_checksum);

if (millis() - previousMillis > interval)

{

previousMillis = millis(); // remember the last time we blinked the LED

DLA = LATDESTINO - latitude;

DLA = (DLA*60)*1852;

DLO = LONDESTINO - longitude;

DLO = (DLO*60)*1852;

DistDestino = sqrt((DLA*DLA) + (DLO*DLO));

if (DistDestino < DistMax)

{

//lcd.clear();

lcd.setCursor(0,0);

lcd.print("Distancia: ");

lcd.setCursor(4,1);

lcd.print(" ");

lcd.setCursor(0,1);

lcd.print(DistDestino,1);

lcd.setCursor(10,1);

lcd.print("metros");

if (DistDestino < 10000)

{

DistMax = 10000;

}

}

else

{

DistMax = DistMax + 10000;

}

while(DistDestino < PROXIMIDADE)

{

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Voce chegou!!!");

//Tocar som.

for (int Nota = 0; Nota < 12; Nota++) {

int tempo = compasso/tempo_gameover[Nota];

tone(buzzer, gameover[Nota],tempo);

delay(tempo*1.25);

}

delay(7000);

lcd.setCursor(0,0);

lcd.print("Lembra do nosso ");

lcd.setCursor(0,1);

lcd.print("primeiro beijo? ");

delay(5000);

lcd.setCursor(0,0);

lcd.print("Foi bem aqui ");

lcd.setCursor(0,1);

lcd.print("nesta esquina...");

delay(5000);

lcd.setCursor(0,0);

lcd.print("Como mudou esse ");

lcd.setCursor(0,1);

lcd.print("lugar, neh!? ");

delay(5000);

lcd.setCursor(0,0);

lcd.print("Como nos mudamos");

lcd.setCursor(0,1);

lcd.print("tambem... ");

delay(5000);

lcd.setCursor(0,0);

lcd.print("E mudamos para ");

lcd.setCursor(0,1);

lcd.print("melhor, certeza!");

delay(5000);

lcd.setCursor(0,0);

lcd.print("Chegou a hora de");

lcd.setCursor(0,1);

lcd.print("mudar denovo!!! ");

delay(5000);

lcd.setCursor(0,0);

lcd.print("Chegou a hora do");

lcd.setCursor(0,1);

lcd.print("proximo passo!!!");

delay(5000);

lcd.setCursor(0,0);

lcd.print("Abre-te sesamo! ");

lcd.setCursor(0,1);

lcd.print("=D, linda!!! ");

delay(5000);

//Inicio abrir a caixa.

motor.attach(MOTORPIN);

motor.write(170);

delay(350);

motor.detach();

//Fim abrir a caixa.

if(day<=9)

{

lcd.setCursor(0,1);

lcd.print("0");

lcd.setCursor(1,1);

lcd.print(day, DEC);

}

else

{

lcd.setCursor(0,1);

lcd.print(day, DEC);

}

lcd.setCursor(2,1);

lcd.print("/");

if(month<=9)

{

lcd.setCursor(3,1);

lcd.print("0");

lcd.setCursor(4,1);

lcd.print(month, DEC);

}

else

{

lcd.setCursor(3,1);

lcd.print(month, DEC);

}

lcd.setCursor(5,1);

lcd.print("/");

lcd.setCursor(6,1);

lcd.print(year, DEC);

lcd.setCursor(10,1);

lcd.print(" ");

hour1 = hour - 3;

if(hour1<=9)

{

lcd.setCursor(11,1);

lcd.print("0");

lcd.setCursor(12,1);

lcd.print(hour1, DEC);

}

else

{

lcd.setCursor(11,1);

lcd.print(hour1, DEC);

}

lcd.setCursor(13,1);

lcd.print(":");

if(minute<=9)

{

lcd.setCursor(14,1);

lcd.print("0");

lcd.setCursor(15,1);

lcd.print(minute, DEC);

}

else

{

lcd.setCursor(14,1);

lcd.print(minute, DEC);

}

delay(1200000);

motor.attach(MOTORPIN);

motor.write(10);

delay(350);

motor.detach();

DistDestino = PROXIMIDADE + 1;

lcd.clear();

}

}

}

}

}

}

Discussions