Такая проблема: скетч нормально копилится, но переменная не принимает нужного значения Код (C++): pres = P,2 / 1,333; вот весь скетч Код (C++): #include <LiquidCrystal_I2C.h> #include <SFE_BMP180.h> #include <Wire.h> #include <OneWire.h> LiquidCrystal_I2C lcd(0x20, 20, 4); SFE_BMP180 pressure; #define ALTITUDE 1655.0 #include <DallasTemperature.h> #define ONE_WIRE_BUS 5 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensor(&oneWire); int pres; void setup() { lcd.init(); lcd.backlight(); Serial.begin(9600); Serial.println("REBOOT"); sensor.begin(); // устанавливаем разрешение датчика от 9 до 12 бит sensor.setResolution(12); // Initialize the sensor (it is important to get calibration values stored on the device). if (pressure.begin()) Serial.println("BMP180 init success"); else { // Oops, something went wrong, this is usually a connection problem, // see the comments at the top of this sketch for the proper connections. Serial.println("BMP180 init fail\n\n"); while (1); // Pause forever. } } void loop() { char status; double T, P, p0, a; float temperature; // отправляем запрос на измерение температуры sensor.requestTemperatures(); // считываем данные из регистра датчика temperature = sensor.getTempCByIndex(0); // Loop here getting pressure readings every 10 seconds. // If you want sea-level-compensated pressure, as used in weather reports, // you will need to know the altitude at which your measurements are taken. // We're using a constant called ALTITUDE in this sketch: Serial.println(); Serial.print("provided altitude: "); Serial.print(ALTITUDE, 0); Serial.print(" meters, "); Serial.print(ALTITUDE * 3.28084, 0); Serial.println(" feet"); // If you want to measure altitude, and not pressure, you will instead need // to provide a known baseline pressure. This is shown at the end of the sketch. // You must first get a temperature measurement to perform a pressure reading. // Start a temperature measurement: // If request is successful, the number of ms to wait is returned. // If request is unsuccessful, 0 is returned. status = pressure.startTemperature(); if (status != 0) { // Wait for the measurement to complete: delay(status); // Retrieve the completed temperature measurement: // Note that the measurement is stored in the variable T. // Function returns 1 if successful, 0 if failure. status = pressure.getTemperature(T); if (status != 0) { // Print out the measurement: Serial.print("temperature: "); Serial.print(T, 2); Serial.print(" deg C, "); Serial.print((9.0 / 5.0)*T + 32.0, 2); Serial.println(" deg F"); // Start a pressure measurement: // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait). // If request is successful, the number of ms to wait is returned. // If request is unsuccessful, 0 is returned. status = pressure.startPressure(3); if (status != 0) { // Wait for the measurement to complete: delay(status); // Retrieve the completed pressure measurement: // Note that the measurement is stored in the variable P. // Note also that the function requires the previous temperature measurement (T). // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.) // Function returns 1 if successful, 0 if failure. status = pressure.getPressure(P, T); if (status != 0) { // Print out the measurement: Serial.print("absolute pressure: "); Serial.print(P, 2); Serial.print(" mb, "); Serial.print(P * 0.0295333727, 2); Serial.println(" inHg"); // The pressure sensor returns abolute pressure, which varies with altitude. // To remove the effects of altitude, use the sealevel function and your current altitude. // This number is commonly used in weather reports. // Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m. // Result: p0 = sea-level compensated pressure in mb p0 = pressure.sealevel(P, ALTITUDE); // we're at 1655 meters (Boulder, CO) Serial.print("relative (sea-level) pressure: "); Serial.print(p0, 2); Serial.print(" mb, "); Serial.print(p0 * 0.0295333727, 2); Serial.println(" inHg"); // On the other hand, if you want to determine your altitude from the pressure reading, // use the altitude function along with a baseline pressure (sea-level or other). // Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb. // Result: a = altitude in m. pres = P,2 / 1,333; a = pressure.altitude(P, p0); Serial.print("computed altitude: "); Serial.print(a, 0); Serial.print(" meters, "); Serial.print(a * 3.28084, 0); Serial.println(" feet"); lcd.setCursor(0, 0); lcd.print(pres); lcd.setCursor(6,0); lcd.print("mmrtst"); lcd.setCursor(0,1); lcd.print(T,2); lcd.setCursor(5,1); lcd.print("T*C Input"); lcd.setCursor(0,2); lcd.print(temperature); lcd.setCursor(5,2); lcd.print("T*C Output"); } else Serial.println("error retrieving pressure measurement\n"); } else Serial.println("error starting pressure measurement\n"); } else Serial.println("error retrieving temperature measurement\n"); } else Serial.println("error starting temperature measurement\n"); delay(150); // Pause for 5 seconds. } пожалуйста помогите
Что-то совсем не понял: что за Р, потом запятые... и всю эту "радость" присвоить целому числу. Определитесь что вы хотели...
"," в си используется только для перечисления чего-либо. Что вы перечисляете в математическом варажении? Присоединяюсь к непонятливым.
P - переменная давления в миллибарах, pres - переменная для перевода из миллибар в миллиметры ртутного столба. Но при выводе на дисплей переменная pres выдаёт значение переменной P
А что означает данная запись т.к. Не понимаю, как это пропустил компилятор? Наверняка же куча варнингов посыпалась. Но мы же не читаем. А зачем? Да они и вообще отключены. Вдруг на глазу мозоль натрет. Неудобняк будет перед программистами.
И правильно сделал. И варнинг правильно показал. Потому что - приоритеты операторов, в результате переменной pres присваивается значение P, а всё, что после запятой - игнорируется, потому что - приоритеты операторов. Вот если бы было так - другое дело получилось бы на выходе: Код (C++): a = (b,c);
Грубить компилятору, даже если он и убогий - свинство. Вот это Код (C++): pres = P,2 / 1,333; С дуба рухнули? У Вас же уже: Код (C++): void loop() { char status; double T, P, p0, a; float temperature; И что для: Код (C++): int pres; это нормально? Если у Вас: Код (C++): double P; то и должно быть: Код (C++): double pres; а не: Код (C++): int pres; Конечно если вы не ходите избавиться от дробной части. Да и сделайте по нормальному: Код (C++): pres = P/1.333; ну или какая там "формула"
вранье. нет там запятых и никогда не было. Похоже вы не въезжаете, что в программировании между запятой и точкой ПРИНЦИПИАЛЬНАЯ разница