Есть два датчика BH1750, BMP085. Вот BMP085 нормально работает с глобальными переменными объявленными в начале кода. А BH1750 показывает 0, при том что если локально объявить, то все в порядке. В чем загвоздка? Заранее спасибо. Код (C++): #include <BMP085.h> #include <Wire.h> #include <BH1750.h> BH1750 lightMeter; long t_bmp = 0, p_bmp = 0, alt = 0; int lux; void setup() { } void loop() { test(); bmp(); lightm(); delay(2000); } void bmp() { BMP085 dps = BMP085(); dps.init(MODE_ULTRA_HIGHRES, 1000, true); dps.getTemperature(&t_bmp); dps.getPressure(&p_bmp); dps.getAltitude(&alt); } void lightm(){ lightMeter.begin(); uint16_t lux = lightMeter.readLightLevel(); } void test() { Serial.begin(9600); Serial.print("t_bmp:"); Serial.println(t_bmp); Serial.print("pres:"); Serial.println(p_bmp); Serial.print("alt:"); Serial.println(alt); Serial.print("Light: "); Serial.print(lux); Serial.println(" lx"); }
Такс, объяснить не смогу, но с удовольствием послушаю в чем дело. По поводу области видимости, переменная же объявляется у меня один раз: Код (C++): long t_bmp = 0, p_bmp = 0, alt = 0; int lux; А проблема с uint16_t, и переменная же не объявляется а используется глобальная: Код (C++): uint16_t lux = lightMeter.readLightLevel(); В общем не знаю я.
все понял, перечитывая свое же сообщение)) uint16_t - это и есть объявление переменной int, только с заданной шириной. Спасибочки.
В каждой функции можешь объявить свою переменную и это будут абсолютно независимые переменные с одним лишь свойством - при выходе из тела функции переменная будет уничтожена.