Arduino с датчиком bmp280 не входит в void loop

Я работаю над проектом, в котором мне нужно знать свою высоту. Для этой цели я использовал датчик BMP280. Но у меня есть проблема.

Я пытался проверить, работает ли датчик с программой "bmp280_sensortest.ino", уже включенной в библиотеку. Когда я открываю последовательный монитор, появляется сообщение "BMP280 Sensor event test", указывающее на наличие действительного датчика на борту. Ниже этого должны отображаться данные о температуре, давлении и высоте, но ничего не происходит.

Я добавил простой Serial.print("hello") в начале void loop(), но даже это не отображается. Программа, кажется, не вводит void loop (), и я не знаю, почему.

Вот этот код:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp; // use I2C interface
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 Sensor event test"));

  if (!bmp.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1) delay(10);
  }

  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */

  bmp_temp->printSensorDetails();
}

void loop() {
  sensors_event_t temp_event, pressure_event;
  bmp_temp->getEvent(&temp_event);
  bmp_pressure->getEvent(&pressure_event);
  
  Serial.print("hello");
  Serial.print(F("Temperature = "));
  Serial.print(temp_event.temperature);
  Serial.println(" *C");

  Serial.print(F("Pressure = "));
  Serial.print(pressure_event.pressure);
  Serial.println(" hPa");

  Serial.println();
  delay(2000);
}

Любой ответ очень ценен. правка:

если я удалю !bmp.begin()

из оператора if и замените его на 1 он входит в цикл void но отображает 0°C и 0pa

, 👍0

Обсуждение

Если вы используете Serial.print("hello"); для проверки ввода void loop(), вы должны следовать за ним с Serial.flush ();, чтобы вы знали, что ваше сообщение было отправлено до того, как ваш код получит возможность заблокировать, потому что в этом случае отсутствие сообщения "Hello" может привести вас к мысли, что вы не попали в эту строку, когда вы на самом деле сделали это., @timemage

поместите инструкции печати по всей настройке(), @jsotola

Но вы не получаете сообщения "проверить проводку"?;), @Sim Son

Добавляйте отпечатки после каждого вызова в настройках, чтобы точно определить, какой из этих вызовов не возвращается..., @Sim Son

Появится ли ваш BMP280, если вы запустите [скетч сканера I2C](https://playground.arduino.cc/Main/I2cScanner/)? Неужели этот скетч не может быть доведен до конца?, @timemage

@timemage скетч сканера I2C застрял в " сканировании...", @Leko Mleko

Есть что-то фундаментальное, происходящее тогда, и недостаточно информации, чтобы дать правильный ответ, который соответствует вашему вопросу. Это может быть, как предположил @SimSon, проводка. Может быть, ваши подтягивающие резисторы слишком слабы или вообще отсутствуют. Простой способ заблокировать реализацию AVR Wire - держать SCL низким бесконечно долго. Но это может быть что угодно другое., @timemage

Что вы можете сделать, так это удалить этот вопрос *до того, как на него "ответят". Поработайте над своей проводкой, и если у вас все еще есть проблемы с ней, начните новый вопрос типа "почему мой bme280, подключенный к nano ble и т. Д., не отображается в сканере i2c" и предоставьте детали, необходимые для устранения неполадок. Например, ссылка на используемый прорыв bme280. Фотографии электропроводки и т. Д. Тогда любой ответ, что результаты будут соответствовать вопросу. Хотя, вы, вероятно, поймете это сами., @timemage

"замените его 1, он входит в пустой цикл" - в этом случае скетч *не* должен входить в цикл, вместо этого он застрянет в цикле `while(1)'. Пожалуйста, проясните этот момент. Все время классический отсутствует pullup резисторы, у вас есть те, что прилагаются?, @Sim Son


1 ответ


1

Это может быть неисправная библиотека/датчик, скорее всего датчик, иногда датчики могут начать работать, но тогда другое соединение может быть неисправно или сам чип неисправен, и поэтому Arduino может просто вечно ждать ответа, который никогда не придет.

Чтобы увидеть, где он застрял, вы можете добавить Serial.println(F("1")); после bmp.setsampling затем Serial.println(F("2")); после bmp_temp->printSensorDetails, чтобы увидеть, где именно он застрял>

Одна вещь, которую я также люблю делать, это покупать два/три датчика, чтобы я мог заменить один датчик другим. Таким образом, если часть кода не работает для всех трех датчиков, то я могу быть уверен, что это проблема с кодом, а не с устройством. Не уверен, есть ли у вас запасной датчик, чтобы попробовать это, но я бы рекомендовал его в будущем

,