Zaloguj się do swojego konta Altimeter Cloud
Nie masz konta? Utwórz konto
Wyślemy link potwierdzający na Twój e-mail. Sprawdź folder spam, jeśli go nie otrzymasz.
Masz już konto? Zaloguj się
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.
/* * 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ć