Изменить/объявить константу в setup и использовать ее в цикле loop

Я хочу изменить или объявить константу в setup(), а затем я хочу получить к ней доступ в цикле ().

Я много искал, но единственные вопросы, которые я нашел, можно было решить, объявив константу в начале программы. У меня это не работает, потому что я использую Adafruit BMP388 и не могу использовать давление перед настройкой ().

Я также попытался объявить переменную перед setup() и изменить ее внутри setup(), но она не изменилась, когда я использовал ее в цикле ().

Как я могу решить эту проблему?

, 👍1

Обсуждение

откуда нам знать, что вы действительно изменили его в loop()?, @jsotola

Я не менял его в loop(), я должен получить к нему доступ там. Я хочу изменить это в setup(), @Vooxe

посмотрите на скетч "затухания" в arduino IDE в качестве примера скетчей, @jsotola

откуда нам знать, что вы действительно изменили его в setup()?, @jsotola

Я хочу использовать его в loop(): мне нужно начальное давление (объявленное в setup()) и сравнить его с текущим давлением, @Vooxe

название вашего поста не соответствует содержанию вашего поста ... заголовок спрашивает о переменной, содержание спрашивает о константе... я предлагаю вам исследовать разницу, @jsotola

Константы по определению не могут быть изменены. Вы имеете в виду переменные?, @Nick Gammon

* Я также попытался объявить переменную перед setup() и изменить ее внутри setup(), но она не изменилась, когда я использовал ее в цикле (). * - Вы можете показать этот код? Переменная, измененная в настройках, останется измененной. Если только вы не объявили об этом дважды (не затеняли его)., @Nick Gammon


1 ответ


Лучший ответ:

0

Вы не получите хороших ответов, не показав свой код, но, возможно, это хорошее предположение о том, чего вы хотите:

почему бы не попробовать что-то примерно подобное этому (непроверенное и неполное)?

Adafruit_BMP3XX bmp;
float startPressure;
float difference;

void setup() {
  bmp.begin_I2C();
  startPressure = bmp.readPressure();
} 

void loop() {
  difference = startPressure - bmp.readPressure();
}

Или, лучше:

Adafruit_BMP3XX bmp;

void setup() {
  bmp.begin_I2C();
} 

void loop() {
  static const float startPressure = bmp.readPressure();
  static float difference;
  difference = startPressure - bmp.readPressure();
}
,

Я не совсем уверен, что это то направление, в котором он движется. Но если это так, вы могли бы переместить float startPressure; в цикл (), выполнить startPressure = bmp.readPressure(); как часть его инициализации и сделать его статическим и постоянным. Как в: static const float startPressure = bmp.readPressure(); Это будет вести себя так же, как у вас, но ограничит startPressure единственной областью, в которой он используется., @timemage

@timemage: Верно, и лучше, но это потребовало бы объяснения "статического", а я не чувствую себя готовым к этому 8-). Однако я добавлю это., @ocrdu

разница не обязательно должна быть статичной., @Edgar Bonet

Да, и технически это не является "постоянным" в терминах C ++. Но, насколько я понимаю, это вполне соответствует духу вопроса., @timemage

@Edgar-Bonet: Нет, это не обязательно должно быть в примере, но кто знает, хочет ли он, чтобы это оставалось неизменным в течение нескольких циклов в его коде., @ocrdu