Manual Mercury V1
Descubra como voar rapidamente com facilidade, conecte seu altímetro para fazer upload para o site Altimeter Cloud e todas as funcionalidades avançadas também. Se você está com dificuldades ou apenas começando, este é o lugar certo para estar.

Exemplo de código: Sensor de pressão BMP390 e BMP581 com detecção automática

PDF

O Mercury possui um sensor de pressão Bosch BMP390 ou Bosch BMP581 a bordo.
Este script mostra como detectar qual você possui e ler sua temperatura e pressão e convertê-las para uma altitude.

A conversão padrão usada neste programa assume uma pressão de 1013.25 Hpa (média) e uma temperatura ambiente de 15 graus Celsius. 

Se você encontrar a previsão do tempo local para sua localização e hora e inserir essa pressão em vez disso, você deverá ver aproximadamente sua altura acima do nível do mar com este script.
Se estiver usando nosso compilador e uploader online, não se esqueça de conectar o monitor Serial após redefinir (pressionar o botão de energia) seu Mercury para ver as informações sendo transmitidas. 

Usando Arduino IDE? Nosso programador online inclui Mercury_Pins.h por padrão, portanto os nomes de pino funcionam sem problemas. Se você estiver usando Arduino IDE ou outro programador, copie o conteúdo da aba Mercury_Pins.h e cole-o no topo do seu programa.
// Exemplo de teste de sensor de pressão para altímetros Mercury (altimetercloud.com)
#include "Wire.h"
#include "Mercury_Pins.h"

// Existem muitas opções de bibliotecas, escolhemos estas para nosso exemplo
#include "Adafruit_BMP3XX.h"
#include "Adafruit_BMP5xx.h"

Adafruit_BMP3XX bmp3;
Adafruit_BMP5xx bmp5;

bool hasBMP581 = false;
bool hasBMP390 = false;

float seaLevelHpa = 1013.25;   // A pressão do nível do mar de previsão do tempo para sua localização. 

void setup() {
    Serial.begin(115200);

    // Ligue a energia para os sensores no altímetro Mercury
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Inicie I2C nos pinos SDA e SCL do Mercury
    Wire.begin(SDA, SCL);

    // Detecte qual sensor de pressão está presente em seu Mercury, as revisões anteriores tinham um Bosch BMP390 e as revisões posteriores (3+) têm o Bosch BMP581
    if (bmp5.begin(0x47, &Wire)) {
        hasBMP581 = true;
        Serial.println("BMP581 encontrado");
    } else if (bmp3.begin_I2C(0x77, &Wire)) {
        hasBMP390 = true;
        Serial.println("BMP390 encontrado");
    } else {
        Serial.println("Nenhum sensor encontrado!");
    }
}

void loop() {
    float temp = 0, pressure = 0, alt = 0;

    // Leia o sensor detectado para sua pressão e temperatura
    if (hasBMP581 && bmp5.performReading()) {
        temp = bmp5.temperature;
        pressure = bmp5.pressure;
    } else if (hasBMP390 && bmp3.performReading()) {
        temp = bmp3.temperature;
        pressure = bmp3.pressure / 100.0;
    } else {
        delay(500);
        return;
    }

    // Converta a pressão para altitude usando a suposição padrão de 15 graus Celsius de temperatura ambiente e a pressão do nível do mar definida anteriormente.
    alt = 44330.0 * (1.0 - pow(pressure / seaLevelHpa, 0.1903));
    Serial.printf("Temp: %.1fC  Pressão: %.2f hPa  Alt: %.1f m\n", temp, pressure, alt);
    delay(500);
}

#pragma once
/*
 * Definições de pinos Mercury (ESP32-C6)
 * Atribuições de GPIO específicas da placa
 */

// ââ LED de Status (NeoPixel) ââ
#define LEDPOWER      3    // Energia NeoPixel (dirija HIGH para ativar)
#define LED           2    // Sinal de dados NeoPixel

// ââ Barramento I2C ââ
#define SDA           21   // Dados I2C
#define SCL           22   // Relógio I2C

// ââ Energia do Sensor ââ
#define VACC          20   // Trilho de energia do sensor (dirija HIGH para ativar)

// ââ Portas de Uso Geral ââ
#define GP06          6    // Porta GP06
#define GP07          7    // Porta GP07

// ââ Saída de Alta Corrente ââ
#define OUT1          5    // Saída de alta corrente (ex: pirotécnico / relé)

// ââ LEDs da Barra de Bateria ââ
#define BL1           4    // LED de Bateria 1 (mais baixo)
#define BL2           14   // LED de Bateria 2
#define BL3           15   // LED de Bateria 3
#define BL4           18   // LED de Bateria 4
#define BL5           19   // LED de Bateria 5 (mais alto)

// ââ Indicadores ââ
#define DISK          8    // LED de atividade de disco

// ââ Analógico / Detecção ââ
#define BATIN         0    // Tensão da bateria (divisor 1:1)
#define USBDETECT     1    // Detecção de energia USB (HIGH = USB presente)
#define BUTTON        9    // BOTÃO na placa, botão de inicialização, mas pode ser usado