Не работает 0,96 OLED!

Тема в разделе "Arduino & Shields", создана пользователем WinTor228, 16 фев 2019.

  1. WinTor228

    WinTor228 Нерд

    Сейчас я собираю метеостанцию и в этой схеме есть Arduino Nano, DHT22, NRF24L01, DS3231 RTC и 0,96 OLED. Пытаюсь загрузить код на плату (именно вставленую в схему) и пишет:
    выбранный последовательный порт
    не существует или плата не подключена к нему

    Если загружать на плату отдельно, не вставляя ее в схему, то код спокойно загружается. Еще не работает OLED с этим кодом.

    Метеостанция состоит из двух частей - одна часть стоит на улице и по NRF24L01 передает на часть дома
     
  2. WinTor228

    WinTor228 Нерд

    Код части дома:


    Код (C++):
    #include <U8g2lib.h>
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include <dht.h>
    #include <DS3231.h>
    #include <Wire.h>
    #define dataPin 8 // DHT22 sensor
    dht DHT; // Creats a DHT object
    DS3231  rtc(SDA, SCL);
    U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
    RF24 radio(10, 9); // CE, CSN
    const byte address[6] = "00001";
    char text[6] = "";
    int readDHT22, t, h;
    String inTemp, inHum, outTemp, outHum;
    String rtcTime, rtcDate;
    int draw_state = 0;
    unsigned long previousMillis = 0;
    long interval = 3000;
    #define Temperature_20Icon_width 27
    #define Temperature_20Icon_height 47
    static const unsigned char Temperature_20Icon_bits[] U8X8_PROGMEM = {
      0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00,
      0xc0, 0xe1, 0x00, 0x00, 0xe0, 0xc0, 0x01, 0x00, 0x60, 0x80, 0xf9, 0x03,
      0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x79, 0x00,
      0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0xf9, 0x03,
      0x60, 0x80, 0x01, 0x00, 0x60, 0x80, 0x01, 0x00, 0x60, 0x8c, 0x79, 0x00,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0xf9, 0x03,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x79, 0x00,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0xf9, 0x03,
      0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00, 0x60, 0x9e, 0x01, 0x00,
      0x70, 0x9e, 0x03, 0x00, 0x38, 0x1e, 0x07, 0x00, 0x18, 0x3e, 0x0e, 0x00,
      0x1c, 0x3f, 0x0c, 0x00, 0x0c, 0x7f, 0x18, 0x00, 0x8c, 0xff, 0x18, 0x00,
      0x8e, 0xff, 0x38, 0x00, 0xc6, 0xff, 0x31, 0x00, 0xc6, 0xff, 0x31, 0x00,
      0xc6, 0xff, 0x31, 0x00, 0x8e, 0xff, 0x38, 0x00, 0x8c, 0xff, 0x18, 0x00,
      0x0c, 0x7f, 0x1c, 0x00, 0x3c, 0x1c, 0x0e, 0x00, 0x78, 0x00, 0x06, 0x00,
      0xe0, 0x80, 0x07, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x80, 0xff, 0x00, 0x00,
      0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    };
    #define Humidity_20Icon_width 27
    #define Humidity_20Icon_height 47
    static const unsigned char Humidity_20Icon_bits[] U8X8_PROGMEM = {
      0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00,
      0x00, 0x70, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00,
      0x00, 0xdc, 0x01, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x86, 0x03, 0x00,
      0x00, 0x06, 0x03, 0x00, 0x00, 0x03, 0x07, 0x00, 0x80, 0x03, 0x06, 0x00,
      0x80, 0x01, 0x0c, 0x00, 0xc0, 0x01, 0x1c, 0x00, 0xc0, 0x00, 0x18, 0x00,
      0xe0, 0x00, 0x38, 0x00, 0x60, 0x00, 0x30, 0x00, 0x70, 0x00, 0x70, 0x00,
      0x30, 0x00, 0xe0, 0x00, 0x38, 0x00, 0xc0, 0x00, 0x18, 0x00, 0xc0, 0x01,
      0x1c, 0x00, 0x80, 0x01, 0x0c, 0x00, 0x80, 0x03, 0x0e, 0x00, 0x80, 0x03,
      0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x07,
      0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06,
      0x63, 0x00, 0x00, 0x06, 0x63, 0x00, 0x00, 0x06, 0x63, 0x00, 0x00, 0x06,
      0xe3, 0x00, 0x00, 0x06, 0xc7, 0x00, 0x00, 0x06, 0xc6, 0x01, 0x00, 0x07,
      0x86, 0x03, 0x00, 0x03, 0x0e, 0x1f, 0x00, 0x03, 0x0e, 0x1e, 0x80, 0x01,
      0x1c, 0x00, 0xc0, 0x01, 0x38, 0x00, 0xe0, 0x00, 0x78, 0x00, 0x70, 0x00,
      0xf0, 0x00, 0x38, 0x00, 0xe0, 0x07, 0x1f, 0x00, 0x80, 0xff, 0x0f, 0x00,
      0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
    };
    void setup() {
      radio.begin();
      radio.openReadingPipe(0, address);
      radio.setPALevel(RF24_PA_MIN);
      radio.startListening();
      u8g2.begin();
      rtc.begin();
    }
    void loop() {
      if (radio.available()) {
        radio.read(&text, sizeof(text)); // Read incoming data
        outTemp = String(text[0]) + String(text[1]) + char(176) + "C"; // Outdoor Temperature
        outHum = String(text[2]) + String(text[3]) + "%"; // Outdoor Humidity
      }
      unsigned long currentMillis = millis();
      if (currentMillis - previousMillis > interval) {
        previousMillis = currentMillis;
        u8g2.firstPage();
        do {
          switch (draw_state ) {
            case 0: drawDate(); break;
            case 1: drawInTemperature(); break;
            case 2: drawInHumidity(); break;
            case 3: drawOutTemperature(); break;
            case 4: drawOutHumidity(); break;
          }
        } while ( u8g2.nextPage() );
        draw_state++;
        if (draw_state > 4) {
          draw_state = 0;
        }
      }
    }
    void drawDate() {
      String dowa = rtc.getDOWStr();
      dowa.remove(3);
      rtcDate = dowa + " " + rtc.getDateStr();
      u8g2.setFont(u8g2_font_timB14_tr);
      u8g2.setCursor(0, 15);
      rtcTime = rtc.getTimeStr(); // DS3231 RTC time
      rtcTime.remove(5);
      u8g2.print(rtcDate);
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(8, 58);
      u8g2.print(rtcTime);
    }
    void drawInTemperature() {
      readDHT22 = DHT.read22(dataPin); // Reads the data from the sensor
      t = DHT.temperature; // Gets the values of the temperature
      inTemp = String(t) + char(176) + "C";
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(24, 15);
      u8g2.print("INDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(inTemp);
      u8g2.drawXBMP( 0, 17, Temperature_20Icon_width, Temperature_20Icon_height, Temperature_20Icon_bits);
    }
    void drawInHumidity() {
      h = DHT.humidity; // Gets the values of the humidity
      inHum = String(h) + "%";
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(24, 15);
      u8g2.print("INDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(inHum);
      u8g2.drawXBMP( 0, 17, Humidity_20Icon_width, Humidity_20Icon_height, Humidity_20Icon_bits);
    }
    void drawOutTemperature() {
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(12, 15);
      u8g2.print("OUTDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(outTemp);
      u8g2.drawXBMP( 0, 17, Temperature_20Icon_width, Temperature_20Icon_height, Temperature_20Icon_bits);
    }
    void drawOutHumidity() {
      u8g2.setFont(u8g2_font_helvR14_tr);
      u8g2.setCursor(12, 15);
      u8g2.print("OUTDOOR");
      u8g2.setFont(u8g2_font_fub30_tf);
      u8g2.setCursor(36, 58);
      u8g2.print(outHum);
      u8g2.drawXBMP( 0, 17, Humidity_20Icon_width, Humidity_20Icon_height, Humidity_20Icon_bits);
    }
     
  3. WinTor228

    WinTor228 Нерд

    Код части на улице:

    Код (C++):
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #include "dht.h"
    #include <LowPower.h>
    #define dataPin 8 // DHT22 data pin
    dht DHT; // Creates a DHT object
    RF24 radio(10, 9); // CE, CSN
    const byte address[6] = "00001";
    char thChar[32] = "";
    String thString = "";
    void setup() {
      radio.begin();
      radio.openWritingPipe(address);
      radio.setPALevel(RF24_PA_MIN);
      radio.stopListening();
    }
    void loop() {
      int readData = DHT.read22(dataPin); // Reads the data from the sensor
      int t = DHT.temperature; // Gets the values of the temperature
      int h = DHT.humidity; // Gets the values of the humidity
      thString = String(t) + String(h);
      thString.toCharArray(thChar, 12);
      // Sent the data wirelessly to the indoor unit
      for (int i = 0; i <= 3; i++) {           // Send the data 3 times
        radio.write(&thChar, sizeof(thChar));
        delay(50);
      }
      // Sleep for 2 minutes, 15*8 = 120s
      for (int sleepCounter = 15; sleepCounter > 0; sleepCounter--)
      {
        LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
      }
    }
     
  4. Значит проверяйте, что вы там собрали
     
  5. WinTor228

    WinTor228 Нерд

  6. parovoZZ

    parovoZZ Гуру

    Вопрос-то в чем?
     
    b707 нравится это.
  7. b707

    b707 Гуру

    Присоединяюсь.
    WinTor228 - четче формулируйте вопросы
    А "не работает ОЛЕД" - это не вопрос. Не работает и фиг с ним...
     
    DetSimen и parovoZZ нравится это.
  8. WinTor228

    WinTor228 Нерд

    Экран работает с другими кодами. Проблема в данном случае в программе или в схеме?
     
  9. ImrDuke

    ImrDuke Гик

    Попробовал - работает OLED + BMP180
     
  10. WinTor228

    WinTor228 Нерд

    А с DHT22 почему не работает? Можно ли вместо него поставить DHT11?
     
  11. WinTor228

    WinTor228 Нерд

    У меня все детали припаяны к плате. Возможно, это проблема в том, что я где-то я плохо припаял или два контакта соеденены?
     
  12. Belkin

    Belkin Гик

    Этот вопрос должен быть адресован вам, а не сюда. ;)
    Проверяйте...
     
  13. WinTor228

    WinTor228 Нерд

    Может проблема в том, что какой то датчик неисправный или где-то есть ошибка в программе? Контакты нигде не замыкают и экран сам тоже рабочий...
     
  14. WinTor228

    WinTor228 Нерд

    Я походу понял в чем проблема. Проблема в коде или самом драйвере. Каждый раз когда я пытался загрузить программу на плту то мне показывало сколько памяти занимает код и т.д. (то что бычно показывает при завершении загрузки) И я выдергивал и проверял. И только я сейчас заметил что не до конца загружалось. Я ждал пока загрузится код. Ждал, ждал и ждал и наконец то вылезла ошибка... Вот такая:
    Arduino: 1.8.8 (Windows Store 1.8.19.0) (Windows 10), Плата:"Arduino Nano, ATmega328P"

    Скетч использует 930 байт (3%) памяти устройства. Всего доступно 30720 байт.
    Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных. Максимум: 2048 байт.
    Неверная библиотека найдена в C:\Users\Yegor Stopnik\Documents\Arduino\libraries\u8g2-master: нет заголовочных файлов (.h), найденных в C:\Users\Yegor Stopnik\Documents\Arduino\libraries\u8g2-master
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xbc
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xbc


    Я обновил драйвера но все равно не помагает. Кто то знает что делать?
     
  15. b707

    b707 Гуру

    WinTor228 - судя по выделенной мной цифре - у вас не только скетч не грузится, у вас его реально нет. Тот код, что у вас в первых сообщениях - никак не может занимать всего 930 байт. 930 байт - это пустой скетч ардуино, который ИДЕ Вам открывает при нажатии на кнопку "Новый"
    Что касается проблем с загрузкой - если выдергивали кабель, не дожидаясь окончания - теперь у вас скорее всего в контроллере слетел загрузчик. если вообще чип не убили.

    Проверьте на другой ардуине, желательно на такой, которую вы не выдергивали из порта раньше времени
     
  16. WinTor228

    WinTor228 Нерд

    Я походу испортил плату... Попробую сегодня!
     
  17. b707

    b707 Гуру

    дело не только в плате. Обратите внимание на мои слова про скетч. Вы какую-то ерунду в плату грузите, похоже
     
  18. WinTor228

    WinTor228 Нерд

    Да-да, я просто загружал пустой скетч. Не легко мне дается програмирование и собирание схем...
     
  19. MESS

    MESS Гик

    Загрузи пример из библиотеки U8g2lib.h, чтобы проверить контроллер и OLED
    если плата НАНО, попробуй загружать скетч , выбрав процессор 328P (Old Bootloader ).
     
    Последнее редактирование: 4 мар 2019
    WinTor228 нравится это.
  20. WinTor228

    WinTor228 Нерд

    Окей! Сейчас попробую