Location stamp with push button — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by lakshmikeerthimeesala.

Components

Sketch code

#include <TinyGPSPlus.h>

#define GPS_RX 16
#define GPS_TX 17

TinyGPSPlus gps;

// =========================
// SOURCE LOCATION
// =========================
double sourceLatitude = 0.0;
double sourceLongitude = 0.0;

// =========================
// DESTINATION LOCATION
// =========================
double destinationLatitude = 0.0;
double destinationLongitude = 0.0;

// =========================
// STATUS
// =========================
bool sourceSaved = false;
bool destinationSaved = false;

// =========================
// WALLET
// =========================
float walletBalance = 150.0;
float requiredFare = 50.0;

// Previous GPS position
double previousLatitude = 0.0;
double previousLongitude = 0.0;


void setup() {

  Serial.begin(115200);

  Serial2.begin(
    9600,
    SERIAL_8N1,
    GPS_RX,
    GPS_TX
  );

  Serial.println();
  Serial.println("========================================");
  Serial.println(" SMART FINGERPRINT DIGITAL TICKET");
  Serial.println(" LOCATION STAMP - STEP 3");
  Serial.println("========================================");

  Serial.println();
  Serial.println("Wallet Balance : Rs.150.00");
  Serial.println("Required Fare  : Rs.50.00");

  Serial.println();
  Serial.println("Waiting for GPS fix...");
  Serial.println("After GPS fix, send E for ENTRY.");
}


void loop() {

  // =====================================
  // READ GPS DATA
  // =====================================

  while (Serial2.available()) {
    gps.encode(Serial2.read());
  }


  // =====================================
  // DISPLAY CURRENT GPS
  // =====================================

  static unsigned long lastGPSPrint = 0;

  if (millis() - lastGPSPrint >= 1000) {

    lastGPSPrint = millis();

    if (gps.location.isValid()) {

      Serial.print("GPS -> Lat: ");
      Serial.print(gps.location.lat(), 6);

      Serial.print(" | Lon: ");
      Serial.println(gps.location.lng(), 6);

    } else {

      Serial.println("GPS -> Waiting for valid fix...");
    }
  }


  // =====================================
  // ENTRY COMMAND
  // =====================================

  if (Serial.available()) {

    char command = Serial.read();

    if ((command == 'E' || command == 'e') &&
        !sourceSaved) {

      Serial.println();
      Serial.println("----------------------------------------");
      Serial.println("ENTRY PROCESS");
      Serial.println("----------------------------------------");

      Serial.println("Fingerprint detected.");
      Serial.println("Passenger ID matched: P001");

      // Wallet check
      if (walletBalance >= requiredFare) {

        Serial.println("WALLET CHECK: SUFFICIENT");
        Serial.println("ENTRY ACCEPTED");

        // Check GPS
        if (gps.location.isValid()) {

          sourceLatitude = gps.location.lat();
          sourceLongitude = gps.location.lng();

          previousLatitude = sourceLatitude;
          previousLongitude = sourceLongitude;

          sourceSaved = true;

          Serial.prin

More projects by lakshmikeerthimeesala