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
@Leko Mleko, 👍0
Обсуждение1 ответ
Это может быть неисправная библиотека/датчик, скорее всего датчик, иногда датчики могут начать работать, но тогда другое соединение может быть неисправно или сам чип неисправен, и поэтому Arduino может просто вечно ждать ответа, который никогда не придет.
Чтобы увидеть, где он застрял, вы можете добавить Serial.println(F("1")); после bmp.setsampling затем Serial.println(F("2")); после bmp_temp->printSensorDetails, чтобы увидеть, где именно он застрял>
Одна вещь, которую я также люблю делать, это покупать два/три датчика, чтобы я мог заменить один датчик другим. Таким образом, если часть кода не работает для всех трех датчиков, то я могу быть уверен, что это проблема с кодом, а не с устройством. Не уверен, есть ли у вас запасной датчик, чтобы попробовать это, но я бы рекомендовал его в будущем
- Чтение датчика давления от 4 до 20 мА с использованием uno
- Как связаться с датчиком через порты RX/TX Arduino?
- Лазерный датчик ToF (VL53L0X) не работает
- Подключение датчика давления к Arduino для сбора данных о давлении и времени
- Увеличение скорости датчиков Vl6180x
- Чувствительный к силе резистор Arduino с ЖК-дисплеем
- Реле давления 4-20 мА
- Можно ли подключить датчики BH1790GLC и TMP117 к плате Arduino?
Если вы используете
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