/******************************************************************************* Projeto 101 - Medir temperatura, pressão e altitude - BMP280 Autor: Angelo Luis Ferreira Data: 06/01/2022 http://squids.com.br/arduino *******************************************************************************/ #include // biblioteca requerida para rodar I2C #include // biblioteca requerida para rodar I2C #include #include // biblioteca BMP280 #include // inclui a biblioteca LCD com I2C // objetos Adafruit_BMP280 bmp; // cria o objeto bmp LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); // cria o objeto lcd // pinos conexão com o Arduino byte btnRight = 12; byte btnLeft = 11; // constantes const byte menuMax = 3; // número de itens do menu // variáveis globais byte menu = 1; unsigned long previous = 0; void setup() { //define pinMode (entrada ou saída) pinMode(btnRight, INPUT_PULLUP); pinMode(btnLeft, INPUT_PULLUP); // inicializações Serial.begin(9600); // inicializa a comunicação serial lcd.begin(16,2); // inicializa o lcd 16X2 com I2C bmp.begin(); // inicializa o módulo bmp280 // verifica a conexão do sensor if (!bmp.begin()) { Serial.println("Sensor não encontrado. Verifique as conexoes do circuito!"); while (1); }; } void loop() { unsigned long current = millis(); controle(); // le se os botões foram pressionados // exibe valores a cada 1 segundo (1000ms) if (current - previous > 2000) { switch(menu) { case(1): menu1(); break; case(2): menu2(); break; case(3): menu3(); break; } previous = current; } } // funções de controle void controle() { if (!digitalRead(btnRight)) { delay(250); // unbounce if (menu < menuMax) { menu++; lcd.clear(); previous = 0; } Serial.println(menu); } if (!digitalRead(btnLeft)) { delay(250); // unbounce if (menu > 1) { menu--; lcd.clear(); previous = 0; } Serial.println(menu); } } // funçoes do menu void menu1() { lcd.setCursor(0,0); lcd.print(" Temperature >"); lcd.setCursor(5,1); lcd.print(bmp.readTemperature(), 2); lcd.setCursor(9,1); lcd.print((char)223); lcd.setCursor(10,1); lcd.print("C"); } void menu2() { lcd.setCursor(0,0); lcd.print("< Pressure >"); lcd.setCursor(4,1); lcd.print(bmp.readPressure()/101325, 2); // converte pressão em hPa para atm lcd.setCursor(9,1); lcd.print("atm"); } void menu3() { lcd.setCursor(0,0); lcd.print("< Altitute "); lcd.setCursor(6,1); lcd.print(bmp.readAltitude(1013.25), 0); // altitude local em relação ao nível do mar lcd.setCursor(10,1); lcd.print("m"); }