Пытаюсь написать программу, требуется давление с датчика BMP 280 при старте ардуино, но я не могу разобраться как это реализовать, моя программа перестаёт работать после объявления переменной/
Вот программа, нужна библиотека Гайвера для BME 280
GyverBME280 bme;
const float press = (bme.readPressure()); //переменная, определяющая начальное давление
void setup() {
Serial.begin(9600);
Serial.println("Start");
// запуск датчика и проверка на работоспособность
if (!bme.begin(0x76)) Serial.println("Error!");
}
void loop() {
// температура
Serial.print("Temperature: ");
Serial.println(bme.readTemperature());
// влажность
Serial.print("Humidity: ");
Serial.println(bme.readHumidity());
// давление
Serial.print("Pressure: ");
Serial.println(bme.readPressure());
// начальное давление
Serial.print("Start pressure: ");
Serial.println(press);
delay(1000);
}
Вы прямо при обьявлении переменной в строке 2 пытаетесь читать значения с датчика, который будет проинициализирован только в строке 8 (и еще не известно - успешно ли).
Так нельзя.
В строке два надо оставить только обьявление переменной:
а измерять давление только после запуска датчика в строке 8
Исправление - убрал ошибочное const в обьявлении переменной, иначе ей потом нельзя будет присвоить значение.
один раз она точно изменится с 0 на значение, а по ретурну тебе видней куда, я жеж не настоящий сталевар
PS тут хорошо GOTO отработает, отправив в вечный пустой цикл видимо
int main() {
init(); // Инициализация аппаратных компонентов (таймеры, UART и т. д.)
setup(); // Вызов пользовательской функции setup()
while (true) {
loop(); // Вызов пользовательской функции loop()
// Если используется Serial, то вызывается yield() для поддержки фоновых задач
}
return 0;
}
надо запустить процедуру поиска I2C устройств, найденные адреса проверить на соответствие датчику BME280 и если какой-то адрес соответствует запустить инициализацию с этим адресом, а если устройство не найдено вывести соответствующее предупреждение и варианты устранения неисправности, разве не так?
Тема в Песочницу. Если ТС сам не захочет делать - то место ей в “Ищу исполнителя”. Ну или на крайний случай ЧЧ.
“нужна библиотека Гайвера для BME 280” - А где Вы её подключаете?
Во второй строке Вы объявляете константу (это нормально), но которой присваиваете считанные значения с датчика (напрягитесь), доступность которого (датчика имеется ввиду) проверяете в 8 строке. Ничего не навивает странного???
“моя программа перестаёт работать после объявления переменной” - А где у Вас в программе, простите, переменная? Вы бы хоть обозначили оную, потому что я в упор никаких переменных в программе не вижу.
А если извращаться, то надо иначе. Хотя бы
вот так
#include <БИБЛИОТЕКА_ОТ_GYVERA_ТОЧКА_ХЭ> // Подключаем реальную библиотеку, я просто не знаю как она называется.
GyverBME280 bme;
float press; //переменная, определяющая начальное давление
void setup() {
Serial.begin(9600);
Serial.println("Start");
// запуск датчика и проверка на работоспособность
if (!bme.begin(0x76)) { // Трындец, датчик не отвечает
Serial.println("Error!");
while (1) { // Уходим в безсознательное и сигнализируем об этом мигаением на 13 пине ардуины (13 пин - это пин на котором у ардуино нано подключен встроенный светодиод)
pinMode(13, OUTPUT);
digitalWrite(13, !digitalRead(13));
delay(300);
}
}
press = bme.readPressure(); // задаём начальное давление
}
void loop() {
// температура
Serial.print("Temperature: ");
Serial.println(bme.readTemperature());
// влажность
Serial.print("Humidity: ");
Serial.println(bme.readHumidity());
// давление
Serial.print("Pressure: ");
Serial.println(bme.readPressure());
// начальное давление
Serial.print("Start pressure: ");
Serial.println(press);
delay(1000);
}