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.

Usando a biblioteca ESP32 Preferences

PDF

A biblioteca NVS / Preferences permite armazenar configurações e fragmentos de informações na partição NVS na memória flash. Isso significa que essas configurações podem ser definidas e lidas sem serem perdidas quando reiniciadas ou se a energia for cortada. Você pode armazenar a maioria dos tipos de variáveis em versões assinadas e não assinadas com essa biblioteca.

Neste exemplo, fazemos o botão de reset funcionar como um botão on/off para o led. Você também poderia adicionar deep sleep se estiver no modo off para economizar energia, mas há mais sobre isso depois. Cada vez que você pressiona o botão de energia, o Neopixel será ligado ou desligado dependendo do estado de alternância. 

A biblioteca Preferences suporta todos os tipos de variáveis comuns. Para inteiros, use prefs.putInt("key", 42) e prefs.getInt("key", 0) onde o segundo parâmetro é o padrão se a chave não existir. Para inteiros sem sinal, há putUInt / getUInt, útil para contadores como prefs.putUInt("boots", bootCount). Strings são armazenadas com prefs.putString("wifi_ssid", "MyNetwork") e recuperadas com prefs.getString("wifi_ssid", ""). Para valores de ponto flutuante, use prefs.putFloat("calibration", 1.0523) e prefs.getFloat("calibration", 1.0) — útil para offsets de sensor. Valores booleanos usam prefs.putBool("enabled", true) e prefs.getBool("enabled", false). Para remover uma chave única, chame prefs.remove("key"), ou para limpar um namespace inteiro, use prefs.clear(). Cada namespace é limitado a 15 caracteres e chaves a 15 caracteres. Sempre chame prefs.end() quando terminar para liberar recursos.

Usando Arduino IDE? Nosso programador online inclui Mercury_Pins.h por padrão, portanto os nomes dos pinos 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 Preferences NVS Mercury
 * Alterna um valor (0/1) na memória flash a cada vez que a placa inicia.
 * Se 1: LEDs NeoPixel ficam verdes. Se 0: LEDs permanecem desligados.
 *
 * O valor sobrevive a ciclos de energia e reprogramação.
 * Reinicie enviando novo código que limpe o namespace.
 *
 * Nenhuma biblioteca externa necessária — Preferences e NeoPixel
 * estão integrados no framework Arduino ESP32.
 */

#include "Preferences.h"
#include "Adafruit_NeoPixel.h"
#include "Mercury_Pins.h"

Preferences prefs;
Adafruit_NeoPixel pixels(4, LED, NEO_GRB + NEO_KHZ800);

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

    // Ligar NeoPixel
    pinMode(LEDPOWER, OUTPUT);
    digitalWrite(LEDPOWER, HIGH);
    delay(10);

    pixels.begin();
    pixels.clear();
    pixels.show();

    // Abrir namespace NVS ("demo" pode ser qualquer nome, até 15 caracteres)
    prefs.begin("demo", false);  // false = modo leitura/escrita

    // Ler o valor armazenado (padrão é 0 se ainda não foi salvo)
    int state = prefs.getInt("toggle", 0);

    // Invertê-lo
    int newState = (state == 0) ? 1 : 0;

    // Salvar o novo valor na memória flash
    prefs.putInt("toggle", newState);
    prefs.end();

    Serial.println("Estado anterior: " + String(state));
    Serial.println("Novo estado: " + String(newState));

    if (newState == 1) {
        // Todos os 4 pixels verdes
        for (int i = 0; i < 4; i++) {
            pixels.setPixelColor(i, pixels.Color(0, 30, 0));
        }
        pixels.show();
        Serial.println("LEDs: VERDE (reinicie para alternar para desligado)");
    } else {
        Serial.println("LEDs: DESLIGADO (reinicie para alternar para ligado)");
    }
}

void loop() {
    // Nada a fazer — apenas demonstrando armazenamento NVS
    delay(1000);
}

#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 do NeoPixel (dirigir ALTO para habilitar)
#define LED           2    // Sinal de dados do 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 (dirigir ALTO para habilitar)

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

// ââ Saída de Alto Corrente ââ
#define OUT1          5    // Saída de alto corrente (por exemplo, pirotecnia / relé)

// ââ LEDs de 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 (ALTO = USB presente)
#define BUTTON        9    // BOTÃO na placa, botão de inicialização, mas pode ser usado