Instrukcja Mercury V1
Dowiedz się, jak szybko i łatwo latać, podłącz swój wysokościomierz do przesyłania danych na stronę Altimeter Cloud i korzystaj ze wszystkich zaawansowanych funkcji. Jeśli utknąłeś w miejscu lub dopiero zaczynasz, to jest odpowiednie miejsce dla Ciebie.

Przykład kodu: akcelerometr i żyroskop LSM6DSO32

PDF

Poniższy przykład pokazuje, jak można się połączyć z czujnikiem LSM6DSO32 IMU (akcelerometr i żyroskop) i odczytać wartości.
Musisz się upewnić, że włączysz czujniki używając pinu VACC zgodnie z tym kodem.

Po zaprogramowaniu naciśnij przycisk zasilania, aby zrestartować Mercury, a następnie podłącz monitor szeregowy.

Używasz Arduino IDE? Nasz programator online domyślnie zawiera Mercury_Pins.h, więc nazwy pinów działają bez problemów. Jeśli używasz Arduino IDE lub innego programatora, skopiuj zawartość karty Mercury_Pins.h i wklej ją na początek swojego programu.
/*
 * Mercury LSM6DSO32 Example
 * Odczytuje dane akcelerometru i żyroskopu z czujnika LSM6DSO32 IMU
 * i wysyła dane do portu szeregowego co 500ms.
 *
 * Okablowanie: Podłącz LSM6DSO32 do portu I2C (SDA/SCL)
 * Adres I2C: 0x6B (SDO/SA0 HIGH na płytce Mercury)
 *
 * Biblioteka: Adafruit LSM6DS (automatycznie zainstalowana przez kompilator)
 */

#include "Wire.h"
#include "Adafruit_LSM6DS.h"
#include "Adafruit_LSM6DSO32.h"
#include "Mercury_Pins.h"

Adafruit_LSM6DSO32 imu;

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

    Serial.println("LSM6DSO32 IMU Example");
    Serial.println("=====================");

    // Włącz szynę czujnika
    pinMode(VACC, OUTPUT);
    digitalWrite(VACC, HIGH);
    delay(100);

    // Uruchom I2C na pinach Mercury
    Wire.begin(SDA, SCL);

    // Zainicjalizuj IMU na adresie 0x6B
    if (!imu.begin_I2C(0x6B)) {
        Serial.println("ERROR: LSM6DSO32 nie znaleziony na adresie 0x6B!");
        Serial.println("Uruchom przykład I2C Scanner, aby sprawdzić adres.");
        while (1) delay(100);
    }

    Serial.println("LSM6DSO32 podłączony na adresie 0x6B");

    // ââ Konfiguracja akcelerometru ââ
    // Opcje zakresu: 4G, 8G, 16G, 32G
    imu.setAccelRange(LSM6DSO32_ACCEL_RANGE_16_G);

    // Opcje częstotliwości danych: 12.5, 26, 52, 104, 208, 416, 833, 1660, 3330, 6660 Hz
    imu.setAccelDataRate(LSM6DS_RATE_104_HZ);

    // ââ Konfiguracja żyroskopu ââ
    // Opcje zakresu: 125, 250, 500, 1000, 2000 stopni na sekundę
    imu.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS);

    // Częstotliwość danych (takie same opcje jak akcelerometr)
    imu.setGyroDataRate(LSM6DS_RATE_104_HZ);

    Serial.println("Akcelerometr: zakres 16G | Żyroskop: zakres 250 dps | Częstotliwość: 104Hz");
    Serial.println();
}

void loop() {
    // Odczytaj wszystkie dane czujnika w jednym wywołaniu
    sensors_event_t accel, gyro, temp;
    imu.getEvent(&accel, &gyro, &temp);

    // Akcelerometr (m/s^2)
    Serial.printf("Akcelerometr (X/Y/Z) m/s2: %+7.2f  %+7.2f  %+7.2f",
        accel.acceleration.x,
        accel.acceleration.y,
        accel.acceleration.z);

    // Separator
    Serial.print("    |    ");

    // Żyroskop (stopnie na sekundę)
    Serial.printf("Żyroskop (X/Y/Z) dps: %+7.2f  %+7.2f  %+7.2f\n",
        gyro.gyro.x,
        gyro.gyro.y,
        gyro.gyro.z);

    delay(500);
}

#pragma once
/*
 * Mercury (ESP32-C6) Definicje pinów
 * Przypisania GPIO specyficzne dla płytki
 */

// ââ Dioda LED stanu (NeoPixel) ââ
#define LEDPOWER      3    // Zasilanie NeoPixela (ustaw HIGH, aby włączyć)
#define LED           2    // Sygnał danych NeoPixela

// ââ Szyna I2C ââ
#define SDA           21   // Dane I2C
#define SCL           22   // Zegar I2C

// ââ Zasilanie czujnika ââ
#define VACC          20   // Szyna zasilania czujnika (ustaw HIGH, aby włączyć)

// ââ Porty ogólnego przeznaczenia ââ
#define GP06          6    // Port GP06
#define GP07          7    // Port GP07

// ââ Wyjście wysokoprądowe ââ
#define OUT1          5    // Wyjście wysokoprądowe (np. zapłon / przekaźnik)

// ââ Diody LED paska baterii ââ
#define BL1           4    // Dioda LED baterii 1 (najniższa)
#define BL2           14   // Dioda LED baterii 2
#define BL3           15   // Dioda LED baterii 3
#define BL4           18   // Dioda LED baterii 4
#define BL5           19   // Dioda LED baterii 5 (najwyższa)

// ââ Wskaźniki ââ
#define DISK          8    // Dioda LED aktywności dysku

// ââ Analogue / Detekcja ââ
#define BATIN         0    // Napięcie baterii (dzielnik 1:1)
#define USBDETECT     1    // Detekcja zasilania USB (HIGH = USB obecny)
#define BUTTON        9    // PRZYCISK na płytce, przycisk rozruchu, ale można go używać