Здравствуйте. Попытался подключить магнитометр GY-273 к плате esp-8266(lolin d1). Скетч код записал на плату. Теперь индикатор в виде светодиода горит все время и не переставая при подаче питания. На изменение положения или и приближении металлов нет никакой реакции. Почему всегда горит светодиод и как решить эту проблему. Помогите пожалуйста!
#include “Wire.h”
#define HA5883_ADDRESS 0x0D // Адрес HA5883
#define DATA_REGISTER_BEGIN 0x00 // Адрес регистра данных
#define LED_PIN 4 // Пин для светодиода
int16_t initialX = 0; // Начальное значение по оси X
int16_t initialY = 0; // Начальное значение по оси Y
int16_t initialZ = 0; // Начальное значение по оси Z
bool isInitialized = false; // Флаг, указывающий, инициализировано ли начальное значение
void i2cScan();
void initHA5883();
void readHA5883(int16_t *x, int16_t *y, int16_t *z);
void setup() {
Serial.begin(115200);
Wire.begin(2, 1); // Инициализация I2C на пинах SDA=2 и SCL=1
pinMode(LED_PIN, OUTPUT); // Установка пина для светодиода в режим OUTPUT
// Задержка перед началом работы
delay(5000); // Задержка на 5 секунд
Serial.println(“Сканирование I2C-устройств…”);
i2cScan(); // Запускаем сканирование устройств на шине
Serial.println(“Инициализация HA5883…”);
initHA5883(); // Инициализация HA5883
delay(100); // Задержка для стабилизации после инициализации
// Чтение начальных значений по осям X, Y и Z
readHA5883(&initialX, &initialY, &initialZ);
// Проверка на нулевые значения
if (initialX == 0 && initialY == 0 && initialZ == 0) {
Serial.println(“Предупреждение: начальные значения равны нулю!”);
}
isInitialized = true; // Устанавливаем флаг инициализации
}
void loop() {
int16_t x, y, z;
// Чтение данных с HA5883
readHA5883(&x, &y, &z);
// Вывод значений в монитор
Serial.print("X: “); Serial.print(x);
Serial.print(” Y: “); Serial.print(y);
Serial.print(” Z: "); Serial.println(z);
// Проверка изменения по оси X, Y и Z только если начальное значение установлено
if (isInitialized) {
if (abs(x - initialX) > 60 || abs(y - initialY) > 60 || abs(z - initialZ) > 60) {
digitalWrite(LED_PIN, HIGH); // Включаем светодиод
delay(2000); // Задержка на 2 секунды
digitalWrite(LED_PIN, LOW); // Выключаем светодиод
} else {
digitalWrite(LED_PIN, LOW); // Выключаем светодиод, если нет изменений
}
}
delay(70); // Задержка перед следующим чтением
}
// Функция сканирования I2C-устройств
void i2cScan() {
byte error, address;
int devicesFound = 0;
for (address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("Устройство найдено по адресу 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
devicesFound++;
}
}
if (devicesFound == 0) {
Serial.println("Устройства не найдены.");
} else {
Serial.print("Найдено устройств: ");
Serial.println(devicesFound);
}
}
// Функция инициализации HA5883
void initHA5883() {
Wire.beginTransmission(HA5883_ADDRESS);
Wire.write(0x0B); // Регистр управления
Wire.write(0x01); // Включение режима работы
if (Wire.endTransmission() != 0) {
Serial.println("Ошибка при инициализации HA5883");
return;
}
Wire.beginTransmission(HA5883_ADDRESS);
Wire.write(0x09); // Конфигурация
Wire.write(0x1D); // Настройка фильтра и диапазона
if (Wire.endTransmission() != 0) {
Serial.println("Ошибка при настройке конфигурации HA5883");
return;
}
}
// Функция чтения данных с HA5883
void readHA5883(int16_t *x, int16_t *y, int16_t *z) {
Wire.beginTransmission(HA5883_ADDRESS);
Wire.write(DATA_REGISTER_BEGIN); // Указание на начало данных
if (Wire.endTransmission() != 0) {
Serial.println("Ошибка при запросе данных с HA5883");
return;
}
// Чтение данных с регистра
Wire.requestFrom(HA5883_ADDRESS, 6);
if (Wire.available() == 6) {
*x = (Wire.read() << 8) | Wire.read(); // Чтение X
*y = (Wire.read() << 8) | Wire.read(); // Чтение Y
*z = (Wire.read() << 8) | Wire.read(); // Чтение Z
} else {
Serial.println("Недостаточно данных для чтения");
}
}
Вот мой скетч код
Где? Не нашёл.
- Первый шаг - научиться правильно вставлять код и вставить его.
- Второй шаг: выложить схему подключений (полностью, с питанием и всем остальным)
- Третий шаг: выложить фото сборки на которых видно что и как. Если надо, несколько фото, но чтобы всё видно было, а не “для галочки”.
и 4) я бы посоветовал оставить ссылку на модуль, дабы определить что в модуле диода анод или катод)))
А так же копия паспорта 2 и 8 страница, СНИЛС, выписка из домовой книги, и ПФР, ЕГРЮЛ, ЕГРН, справка о судимости, последние 30 страниц трудовой и оценки по математике за 2ю четверть 3го класса…пока достаточно)