项目代码
- /* Codigo adaptado com auxlio da IA CHATGPT*/
-
- //BIBLIOTECA, VARIVEIS e DEFINIES-----------------------------------------------------------------------------
-
- // Incluso de bibliotecas
- #include <SPI.h>
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BME280.h>
- #include <SoftwareSerial.h> //Para os pinos do Esp32 funcionar como porta serial
- #include <TinyGPS++.h>
- #include <Pushbutton.h> //Configurao dos botes
-
- //Bibliotecas e definies GPS
- #define GPS_RX 16
- #define GPS_TX 17
- #define GPS_Serial_Baud 9600
- SoftwareSerial gpsSerial(GPS_RX, GPS_TX); //Rx=16 e Tx=17
- TinyGPSPlus gps;
-
- //Variveis GPS
- int k,kr, //Variveis relgio
- HHGST,MMGST,SSGST,HLST,HLT,HL,HH,MM,DL,Seg,DJ,Ano3; //Variveis da Hora Sideral
- char c;
- long satelites;
- bool recebido = false;
- unsigned long hora1,Dia,Mes,Ano,Mes2,Ano2;
- float longit,MM1,SS1,mn2,Dia2,GMTh,EsteDia,GMST,Mes3,
- Hora,Minuto,Segundo,s2,
- regis_Z; //Varivel da inclinao
-
- int satelitesant = 0, ano;
- int AA;
- double t,passo1,passo2,passo3,to,n1,h1,n2,latitude, longitude, altitude, curso, lat, lon;
- long chs,a,b;
- unsigned long data,horaRE;
- byte mes, dia, hora, minuto, segundo, centesimo, horalocal;
- float altitudeGPS, lat1, long1, lat2, long2, s;
- float mn,hora2,d;
- int Cg; //Curso geografico - dado pelo GPS
- int Pg; //Posicao geografica - calculado
- long lat3,lon3,latAnt=0,lonAnt=0; //Latitude e longitude
- int ValorAlinha=0;
- bool recCg = false;
-
- //Variveis e definies do Sensor BME 280
- #define SEALEVELPRESSURE_HPA (1013.25) //necessrio para a leitura da altitude
- Adafruit_BME280 bme;
- bool status; // Cria uma varivel status de iniciao do sensor BME
-
- // Definio da Altura e largura do display OLED
- #define SCREEN_WIDTH 128 // Largura display, em pixels
- #define SCREEN_HEIGHT 64 // Altura display, em pixels
- // Declarao pino reset para I2C do display OLED
- #define OLED_RESET -1 // Ser o mesmo reset da placa
- #define SCREEN_ADDRESS 0x3C
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Criao objeto display
-
- // Variveis Sensor de UV
- int UVSensorPin = 2;// Conectado ao pino A0 (GPIO2)
- float sensorValue;
- int sensorUV;
- int nivelUV;
-
- //Biblioteca, variveis e definies dos botes
- #define BUTTON_NAV 18 // Boto para navegao
- #define BUTTON_SELECT 19 // Boto para seleo
-
- // Variveis do Menu
- int menuIndex = 0;
- unsigned long ultimaLeitura = 0;
- const unsigned long debounceDelay = 200;
- static bool ultimaNaveg = HIGH; //Boto de navegalo recebe alto
- static bool ultimaSelec = HIGH; //Boto de seleo recebe alto
-
- // Pino analgico que recebe a tenso da bateria (via divisor de tenso, ex: GPIO 34)
- #define VBAT_PIN 34
- // Tenso mxima e mnima da CR2032
- #define VBAT_MAX 3.0
- #define VBAT_MIN 2.0
-
- //Declaraes das Funes
- void medUv(); //Funo que mede o UV
- void GPS(); //Funo GPS
- void medTPU(); //Funo Temperatura,Presso e Umidade
- void DataHora(); //Funo Data e Hora
- void Menu(); //Funo Menu
- void gpsLoop(); //Funo de verificao de conexo com GPS
-
-
- //SETUP-------------------------------------------------------------------------------------------------------
- void setup(){
- Serial.begin(115200); //Inicia a cominicao serial
-
- gpsSerial.begin(GPS_Serial_Baud); //Inicia a conexo com gps
-
- pinMode(BUTTON_NAV, INPUT_PULLUP); //Aloca os botes
- pinMode(BUTTON_SELECT, INPUT_PULLUP);
-
- if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { //Inicia OLED
- Serial.println(F("SSD1306 allocation failed"));
- for(;;);
- }
-
- status = bme.begin(0x76, &Wire); //Inicia o sensor TPU. Endereo 0x76
-
- }
- //LOOP-------------------------------------------------------------------------------------------------
- void loop(){
-
- gpsLoop();
- Menu();
-
- switch (menuIndex) {
- case 0:
- medUV();
- break;
- case 1:
- medTPU();
- break;
- case 2:
- DataHora();
- break;
- case 3:
- GPS();
- break;
- }
-
- }
复制代码
|