Proyecto Estacionamiento Digital — ESP32 simulation

simulador de estacionamiento digital con uso de ESP32 y ESP32-CAM

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

Components

Sketch code

// ── tipos.h PRIMERO ──
#include "tipos.h"
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <RTClib.h>
#include <SD.h>

// ── PINES ────────────────────────────────────────────────────
#define TFT_CS    5
#define TFT_DC    2
#define TFT_RST   4
#define SD_CS     15
#define TOUCH_CS  27
#define TOUCH_IRQ 32
#define RX2_PIN   16
#define TX2_PIN   17

// ── CONTRASEÑA DESARROLLADOR ──────────────────────────────────
#define PASS_DEV "181220"

// ── PANTALLA 480×320 ─────────────────────────────────────────
class Pantalla480x320 : public Adafruit_ILI9341 {
public:
  Pantalla480x320(int8_t cs, int8_t dc, int8_t rst)
    : Adafruit_ILI9341(cs, dc, rst) {}
  void iniciar() { begin(); setRotation(1); _width=480; _height=320; }
};
Pantalla480x320 tft(TFT_CS, TFT_DC, TFT_RST);
RTC_DS1307 rtc;

// ── DATOS ────────────────────────────────────────────────────
#define MAX_LUGARES 200
#define MAX_PILA     30
#define MAX_COLA     50

int   totalLugares = 0;
int   colsGrid = 1, filasGrid = 1;
Lugar listaLugares[MAX_LUGARES];

// Pila LIFO
RegistroHistorial pilaHistorial[MAX_PILA];
int topePila = -1;
void apilar(int v, int l, char a, uint32_t t) {
  if (topePila < MAX_PILA-1) pilaHistorial[++topePila] = {v,l,t,a};
}

// Cola FIFO
class ColaEspera {
  int elems[MAX_COLA], frente=0, fin=-1, total=0;
public:
  bool encolar(int v){if(total>=MAX_COLA)return false;fin=(fin+1)%MAX_COLA;elems[fin]=v;total++;return true;}
  int  desencolar(){if(!total)return -1;int v=elems[frente];frente=(frente+1)%MAX_COLA;total--;return v;}
  int  cantidad(){return total;}
} colaEspera;

// BST
NodoBST* raizBST = nullptr;
NodoBST* insertarBST(NodoBST* n, int v, int l, uint32_t t){
  if(!n) return new NodoBST{v,l,t,nullptr,nullptr};
  if(v<n->idVehiculo) n->izq=insertarBST(n->izq,v,l,t);
  else if(v>n->idVehiculo) n->der=insertarBST(n->der,v,l,t);
  return n;
}
NodoBST* eliminarBST(NodoBST* n, int v){
  if(!n) return nullptr;
  if(v<n->idVehiculo) n->izq=eliminarBST(n->izq,v);
  else if(v>n->idVehiculo) n->der=eliminarBST(n->der,v);
  else {
    if(!n->izq){NodoBST* t=n->der;delete n;return t;}
    if(!n->der){NodoBST* t=n->izq;delete n;return t;}
    NodoBST* s=n->der; while(s->izq) s=s->izq;
    n->idVehiculo=s->idVehiculo; n->idLugar=s->idLugar; n->tiempo=s->tiempo;
    n->der=eliminarBST(n->der,s->idVehiculo);
  }
  return n;
}
int contarLibres(int i){ if(i>=totalLugares)return 0; return (listaLugares[i].ocupado?0:1)+contarLibres(i+1); }
int mejorLugar(){ for(int i=0;i<totalLugares;i++) if(!listaLugares[i].ocupado) return i; return -1; }

// ── ESTADOS DE PANTALLA ───────────────────────────────────────
enum Estado {
    ST_ESPERA,         
    ST_USUARIO,        
    ST_SALIDA_SEL,     
    ST_SALIDA_CONF,    
    ST_PASS,           
    ST_DEV_MENU,       
    ST_DEV_SET_LUG     
};
Estado estadoActual = ST_ESPERA;

// ── VARIABLES GLOBALES ────────────────────────────────────────
bool   camaraLista      = false;
int    vehiculoId

More projects by panditalibre123