BMP280, I2C, Display 12864.

Тема в разделе "Arduino & Shields", создана пользователем Уыфгдщм, 1 ноя 2017.

  1. Уыфгдщм

    Уыфгдщм Нерд

    Здравствуйте, был код:
    Код (C++):
    #include <Wire.h>
    #include <iarduino_DHT.h>                     // Библиотека для DHT-22
    #include "U8glib.h"                           // Библиотека для 12864

    iarduino_DHT     sensor(9);                       // Объявляем объект, указывая номер вывода, к которому подключён модуль
    U8GLIB_ST7920_128X64_1X u8g(12);              // Создаём объект u8g для работы с дисплеем, указывая номер вывода CS для аппаратной шины SPI

    short unsigned int humidity, temperature, ground;

    void setup()
    {
      delay(10);
    }

    void loop()
    {
      ground = map(analogRead(A0), 0, 1023, 100, 0);                //Влажность почвы

      switch (sensor.read())                                        //Темепратура и
      {                                                             //Влажность
        case DHT_OK:                                                //Воздуха
          humidity = sensor.hum ; temperature = sensor.tem ;
          break;
        case DHT_ERROR_CHECKSUM:
          humidity = 1; temperature = 99;
          break;
        case DHT_ERROR_DATA:
          humidity = 1; temperature = 99;
          break;
        case DHT_ERROR_NO_REPLY:
          humidity = 1; temperature = 99;
          break;
        default:
         humidity = 1; temperature = 99;
         break;
      }  delay(2000);

      u8g.firstPage();
      do {
        u8g.setColorIndex(1);
        u8g.drawBox(0, 0, 128, 16);
        u8g.drawBox(0, 32, 128, 16);
        u8g.setFont(u8g_font_9x15);
        u8g.setColorIndex(0);
     
        u8g.drawStr(1, 13, "HUM:  %");
        u8g.setPrintPos(36, 13); u8g.print(humidity);
        u8g.drawStr(1, 45, "SOIL:  %");
        u8g.setPrintPos(45, 45); u8g.print(ground);
        u8g.setColorIndex(1);
        u8g.drawStr(1, 29, "TEMP:  *C");
        u8g.setPrintPos(45, 29); u8g.print(temperature);
        delay(1000);
      }    while (u8g.nextPage());
    }
    С помощью которого на дисплей выводятся значения влажности и температуры окружающей среды и влажность почвы. Понадобилось подключить датчик атмосферного давления BMP-280. Дописал код для него:
    Код (C++):
    #include <Adafruit_BMP280.h>
    #include <Adafruit_Sensor.h>
    #include <Wire.h>
    #include <iarduino_DHT.h>                     // Библиотека для DHT-22
    #include "U8glib.h"                           // Библиотека для 12864

    iarduino_DHT     sensor(9);                       // Объявляем объект, указывая номер вывода, к которому подключён модуль
    Adafruit_BMP280  bmp;
    U8GLIB_ST7920_128X64_1X u8g(12);              // Создаём объект u8g для работы с дисплеем, указывая номер вывода CS для аппаратной шины SPI

    short unsigned int humidity, temperature, pressure, ground ;

    void setup()
    {
      delay(10);
    }

    void loop()
    {
      pressure = (bmp.readPressure() * 0.0075 - 1);                 //Давление воздуха
      ground = map(analogRead(A0), 0, 1023, 100, 0);                //Влажность почвы

      switch (sensor.read())                                        //Темепратура и
      {                                                             //Влажность
        case DHT_OK:                                                //Воздуха
          humidity = sensor.hum ; temperature = sensor.tem ;
          break;
        case DHT_ERROR_CHECKSUM:
          humidity = 1; temperature = 99;
          break;
        case DHT_ERROR_DATA:
          humidity = 1; temperature = 99;
          break;
        case DHT_ERROR_NO_REPLY:
          humidity = 1; temperature = 99;
          break;
        default:
         humidity = 1; temperature = 99;
         break;
      }  delay(2000);

      u8g.firstPage();
      do {
        u8g.setColorIndex(1);
        u8g.drawBox(0, 0, 128, 16);
        u8g.drawBox(0, 32, 128, 16);
        u8g.setFont(u8g_font_9x15);
        u8g.setColorIndex(0);
     
        u8g.drawStr(1, 13, "HUM:  %");
        u8g.setPrintPos(36, 13); u8g.print(humidity);
        u8g.drawStr(1, 45, "SOIL:  %");
        u8g.setPrintPos(45, 45); u8g.print(ground);
        u8g.setColorIndex(1);
     
        u8g.drawStr(1, 29, "TEMP:  *C");
        u8g.setPrintPos(45, 29); u8g.print(temperature);
        u8g.drawStr(1, 63, "PRES:  MM");
        u8g.setPrintPos(45, 63); u8g.print(pressure);
        delay(1000);
      }    while (u8g.nextPage());
    }
    И почему-то второй код отказывается работать. Не выводит на экран совсем текст и линии. Прошу помочь найти ошибку и при возможности ее устранить. Фото к 1-му и 2-му коду, фото устройства.Дисплей блеклый из-за нехватки напряжения.[​IMG] [​IMG][​IMG]
    https://yadi.sk/i/KlTJJy3s3PJvBw
    https://yadi.sk/i/HlrWrqwk3PJvEX
    https://yadi.sk/i/OLmynyTI3PJvGP
     
  2. b707

    b707 Гуру

    три фото пустого экрана?

    У вас экран и датчик подключены к одной и той же I2C - читайте как управлять взаимодействием нескольких устройств
     
  3. Уыфгдщм

    Уыфгдщм Нерд

    На фото не очень передаётся, если посмотрите внимательнее увидите текст и полоски. Вы про 0X77 и 0X76? Если я не ошибаюсь это так пишется и это их адреса?!