Smart cycle lock with gps

Hey there people,

I'm working at a project, but I'm stuck with the code and I was wondering if someone could help me? I'm working with a GPS sensor and a potsensor. When the potsensor reach a certain level he needs to activate the gps sensor, but I have no idea how. I have a working GPS sensor code and a working Potsensor code.

Potsensor code:

int potPin = A0;    // select the input pin for the potentiometer
int ledPin = 2;      // select the input pin for the LED
int potValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);  
}

// repeat this code over and over
void loop() {
  // read the value from the sensor:
  potValue = analogRead(potPin);   
  // Print potentiometer value
  Serial.println(potValue);
 
  if (potValue > 850) { 
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);  
  } else {
  // turn the ledPin off:        
  digitalWrite(ledPin, LOW); 
  }
}

GPS sensor code:
#include <SoftwareSerial.h>
#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
It requires the use of SoftwareSerial, and assumes that you have a
4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/

TinyGPS gps;

SoftwareSerial ss(10, 11);

static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
  Serial.begin(9600);
  
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.println("Sats HDOP Latitude  Longitude  Fix  Date       Time     Date Alt    Course Speed Card  Distance Course Card  Chars Sentences Checksum");
  Serial.println("          (deg)     (deg)      Age                      Age  (m)    --- from GPS ----  ---- to London  ----  RX    RX        Fail");
  Serial.println("-------------------------------------------------------------------------------------------------------------------------------------");

  ss.begin(9600);
}

void loop()
{
  float flat, flon;
  unsigned long age, date, time, chars = 0;
  unsigned short sentences = 0, failed = 0;
  static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
  
  print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
  print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
  gps.f_get_position(&flat, &flon, &age);
  print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);
  print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  print_date(gps);
  print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
  print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
  print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
  print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
  print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
  print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

  gps.stats(&chars, &sentences, &failed);
  print_int(chars, 0xFFFFFFFF, 6);
  print_int(sentences, 0xFFFFFFFF, 10);
  print_int(failed, 0xFFFFFFFF, 9);
  Serial.println();
  
  smartdelay(1000);
}

static void smartdelay(unsigned long ms)
{
  unsigned long start = millis();
  do 
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void print_float(float val, float invalid, int len, int prec)
{
  if (val == invalid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartdelay(0);
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
  char sz[32];
  if (val == invalid)
    strcpy(sz, "*******");
  else
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0) 
    sz[len-1] = ' ';
  Serial.print(sz);
  smartdelay(0);
}

static void print_date(TinyGPS &gps)
{
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned long age;
  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  if (age == TinyGPS::GPS_INVALID_AGE)
    Serial.print("********** ******** ");
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
        month, day, year, hour, minute, second);
    Serial.print(sz);
  }
  print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
  smartdelay(0);
}

static void print_str(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  smartdelay(0);
}

So my question is: Could somebody help me with making a code who activate's the gps when the potsensor reach a value of 850?

Henk de Vries

http://forum.arduino.cc/index.php/topic,148850.0.html

  1. Make a meaningful subject line

Try to summarize your problem with a helpful and informative subject line. Helpful subjects draw in people who might know the answer. Unhelpful ones are likely to be skipped.

Examples of unhelpful subject lines:

Noob here, help needed
Help me, quickly!
Got error
Lost, help me
Problem with my circuit
No idea what I am doing

if (potValue >= 850) 
{
  activateGPS ();
}

Please use code tags when poshing code.

You seem to have the basics of the code there, what is it that you want to do exactly?

Sorry for my vague question, I Will explain it again. I'm doing a school project, where I must make a smart object. I've chosen to make a smart cycle lock. The potsensor simulates the key in the lock, when the value get to 850, it will simulate the lock is locked and the gps sensor gets activated. But the problem is I've got both codes runnig individual, but I don't know how to combine these 2 codes. So my question is how can I activa the gps sensor when the pot sensor value is 850? Sorry for my bad English!!

Please go back to your first posting, select "modify" on your message, highlight the code section and click on the "#" icon above the edit window to mark it up as code.

Makes it much easier to read - and to reply to your query.


Excellent - much better!

I've modified my topic name, so now it's more clear what I mean

I suggest you take all the code currently in loop() and move it to a new function. Give the new function a meaningful name such as printGpsData(). Call your new function from loop().

Consider the following code:

void loop() {
  // read the value from the sensor:
  potValue = analogRead(potPin);   
  // Print potentiometer value
  Serial.println(potValue);
 
  if (potValue > 850) { 
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);  
  } else {
  // turn the ledPin off:        
  digitalWrite(ledPin, LOW); 
  }
}

This reads the state of an analog input and does one thing when the value is greater than 850 and another thing when it isn't. Clearly the thing it does isn't exactly what you want, so you need to change that so it does the thing you want.

Thank you for the help!!