ct v1 — ESP32 simulation

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

Components

Sketch code

#include <TinyGPSPlus.h>
#include <SPI.h>
#include <SD.h>
#include <Wire.h>

uint8_t mpuEndereco = 0x68;
uint8_t mpuQuem = 0;
bool mpuOk = false;

const float ACC_LSB_POR_G    = 4096.0f;  // faixa +-8 g
const float GYRO_LSB_POR_DPS = 65.5f;    // faixa +-500 graus/s

// Aceleracao em g, giroscopio em graus/s, temperatura do sensor em graus C
float ACCX = 0, ACCY = 0, ACCZ = 0;
float GYROX = 0, GYROY = 0, GYROZ = 0;
float TEMPM = 0;

bool mpuEscrever(uint8_t reg, uint8_t valor) {
  Wire.beginTransmission(mpuEndereco);
  Wire.write(reg);
  Wire.write(valor);
  return Wire.endTransmission() == 0;
}

bool mpuLerRegs(uint8_t reg, uint8_t* buf, uint8_t n) {
  Wire.beginTransmission(mpuEndereco);
  Wire.write(reg);
  if (Wire.endTransmission(false) != 0) return false;
  if (Wire.requestFrom((int)mpuEndereco, (int)n) != n) return false;
  for (uint8_t i = 0; i < n; i++) buf[i] = Wire.read();
  return true;
}

bool mpuIniciar() {
  // procura em 0x68 e depois 0x69
  bool achou = false;
  for (uint8_t end = 0x68; end <= 0x69; end++) {
    Wire.beginTransmission(end);
    if (Wire.endTransmission() == 0) { mpuEndereco = end; achou = true; break; }
  }
  if (!achou) return false;

  if (!mpuLerRegs(0x75, &mpuQuem, 1)) return false;   // WHO_AM_I

  if (!mpuEscrever(0x6B, 0x01)) return false;  // acorda, clock do giroscopio
  delay(100);
  mpuEscrever(0x19, 9);      // taxa de amostragem interna: 100 Hz
  mpuEscrever(0x1A, 0x04);   // filtro digital ~21 Hz
  mpuEscrever(0x1B, 0x08);   // giroscopio +-500 graus/s
  mpuEscrever(0x1C, 0x10);   // acelerometro +-8 g
  mpuEscrever(0x1D, 0x04);   // filtro do acelerometro (so existe no 6500; no 6050 e ignorado)
  delay(50);
  return true;
}

// ---------------- GPS ----------------
// O baud tem que ser o mesmo que o modulo esta usando (9600 de fabrica;
// 115200 se voce rodou config_gps_10hz.ino e a configuracao foi salva).
#define GPS_BAUD 9600
TinyGPSPlus gps;

// Pinos (mantidos como no seu codigo)
#define LED 4
#define LED2 2
#define ACELERADOR 32
#define FREIO 33
#define VOLANTE 34
#define PRESAO_OLEO 25
#define TEMPERATURA_MOTOR 26
#define GPS_RX 16
#define GPS_TX 17
#define SD_CS 5
#define SD_SCK 18
#define SD_MISO 19
#define SD_MOSI 23
#define BOTTON 27
#define MPU_SDA 21
#define MPU_SCL 22

File arquivo;

// Controle de gravacao
bool gravando = false;
bool ultimaLeituraBotao = HIGH;
bool estadoEstavelBotao = HIGH;

unsigned long tempoDebounce = 0;
const unsigned long debounce = 50;

unsigned long ultimaGravacao = 0;
const unsigned long intervalo = 100;  // 10 Hz

// LED de gravacao sem delay()
unsigned long ultimoPisca = 0;
bool ledPiscaEstado = false;

// Flush periodico no SD
unsigned long ultimoFlush = 0;
const unsigned long intervaloFlush = 2000;

char nomeArquivo[20];

// Cria um arquivo novo sem sobrescrever os anteriores
bool iniciarGravacao() {
  int numero = 1;

  while (numero <= 999) {
    snprintf(nomeArquivo, sizeof(nomeArquivo), "/CT%03d.CSV", numero);
    if (!SD.exists(nomeArquivo)) break;

More projects by felipe021-com