Помогите с выводом температуры на 1602

Тема в разделе "Arduino & Shields", создана пользователем White5121, 13 апр 2016.

  1. White5121

    White5121 Нуб

    Здравствуйте, захотелось сделать bluetooth метеостанция с выводом на экран значений. Вывести влажность и давление получилось, а с температурой не могу понять.

    Код (C++):
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #include <Wire.h>
    #include <BMP085.h>
    #include <DHT.h>
    #include <LiquidCrystal_I2C.h>

    #include <EEPROM.h>

    #define ONE_WIRE_BUS 4

    OneWire oneWire(ONE_WIRE_BUS);
    LiquidCrystal_I2C lcd(0x3F,16,2);
    DallasTemperature sensors(&oneWire);

    DeviceAddress Thermometer1 = {
      0x28, 0x15, 0x3A, 0x01, 0x00, 0x00, 0x80, 0x94 };
    DeviceAddress Thermometer3 = {
      0x28, 0xF3, 0x4C, 0x03, 0x00, 0x00, 0x80, 0xF9 };

      BMP085 dps = BMP085();  
      long Temperature = 0, Pressure = 0, Altitude = 0;

      DHT dht(8, DHT11);

      char incomingByte;

    int x=0;

    void setup()   {

      lcd.init();                  
      lcd.backlight();


      sensors.begin();
      sensors.setResolution(Thermometer1, 10);
      sensors.setResolution(Thermometer3, 10);

      Wire.begin();
      dps.init(MODE_ULTRA_HIGHRES, 21000, true);
      dht.begin();

      Serial.begin(9600);
    }

    void printTemperature(DeviceAddress deviceAddress) {
      float tempC = sensors.getTempC(deviceAddress);
      Serial.println(tempC,1);
    }





    void loop(){

      sensors.requestTemperatures();

      dps.getPressure(&Pressure);

      int h = dht.readHumidity();
      float t = dht.readTemperature();

        if (Serial.available() > 0) {
        incomingByte = Serial.read();
        if(incomingByte == '1') {
          x=2;
        }
        if(incomingByte == '2') {
          x=1;
        }
        if(incomingByte == '3') {
          x=3;
        }
         if(incomingByte == '4') {
          x=4;
        }
      }
      delay(100);
      switch (x) {
        case 1:
          printTemperature(Thermometer1);
          break;
        case 2:
          printTemperature(Thermometer3);
          break;
        case 3:
          Serial.println(Pressure/133.3,1);
          break;
        case 4:
          Serial.println(h);
          break;
      }
    {

      lcd.setCursor(0, 0);
      lcd.print("T1=");
      lcd.print(??????);

      lcd.setCursor(0, 1);
      lcd.print("T2=");
      lcd.print(???????);

      lcd.setCursor(9, 0);
      lcd.print("P=");
      lcd.print(Pressure/133.3,1);

      lcd.setCursor(9, 1);
      lcd.print("H=");
      lcd.print(h);
      lcd.print('%');
    }
    }
     
    Последнее редактирование: 13 апр 2016
  2. AlexVS

    AlexVS Гик

    Как вариант: превратите printTemperature в функцию, пущай возвращает значение температуры
    Код (C++):
    float printTemperature(DeviceAddress deviceAddress) {
      float tempC = sensors.getTempC(deviceAddress);
      Serial.println(tempC,1);
      return tempC ;
    }
     
    А далее вызывайте Temperature = printTemperature(Thermometer1);
     
  3. White5121

    White5121 Нуб

    Спасибо большое, все получилось!