ЭЛЕКТРОНИКА Исправление часов с термометром.

Romello

✩✩✩✩✩✩✩
11 Ноя 2020
3
0
Здравствуйте. Есть сборка Uno+Ssd1306+ds3231+bme280. 20210110_205403.jpgСделал часы с переключением на температуру по нажатию кнопки. Однако, видимо где-то я ошибся. Срабатывает непонятно как, то через раз, то не срабатывает. Прошу помочь с этой проблемой и с отображением незначащих нулей. И еще. Когда часы стоят спокойно, то все работает ровно, но как только подключаю пин кнопки или просто касаюсь гнезд на самой ардуино, то изображение начинает плясать.
20210110_205737.jpg
Как это исправить?
Вот код:
C++:
#include <Wire.h>                                       // Подключаем библиотеку Wire (стандартная)
#include <Adafruit_Sensor.h>                            // Подключаем библиотеку Adafruit_Sensor
#include <Adafruit_BME280.h>                            // Подключаем библиотеку датчика BME280
#include <Adafruit_GFX.h>                               // Подключаем библиотеку Adafruit_GFX
#include <Adafruit_SSD1306.h>                           // Подключаем библиотеку дисплея ssd1306
#include "RTClib.h"

#define KeyTemp 2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


RTC_DS3231 RTC;

 Adafruit_BME280 bme;
 void setup() {
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // инициализация дисплея
    Wire.begin();
    RTC.begin(); 

 if (!bme.begin(0x76)) { 
      display.setCursor(0,0);  // Инициализация датчика BME280
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.println("error");  // сообщение об ошибке если датчика нет или он не работает
      display.display(); 
      while (1); // висим в бесконечном цикле
   }
 
    display.clearDisplay();
      if (! RTC.begin()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }}
 void loop() {

  if (digitalRead(KeyTemp)){
    
   display.setTextSize(2);
   display.setTextColor(WHITE);                              // текст белый
   display.setCursor(20,0);                                   // строка 0, позиция 0
   display.print(bme.readTemperature());                   //  температура в цельсиях
   display.println(" C");
                    
   display.setCursor(12,15);
   display.print(bme.readPressure()*  0.00750062);            //  атмосферное давление в мм ртутного столба
   display.println(" mm");     

  // display.print(bme.readHumidity());                     //  влажность в %
  // display.println(" %");                                 

   display.display();  // вывод изображения на дисплей
   //delay(5000);   // Пауза 1 секунда
   display.clearDisplay(); // очистка дисплея

    
  } 

  DateTime now = RTC.now(); 
  display.setTextSize(3);                           
  display.setTextColor(WHITE,BLACK);
  display.setCursor(0,4);                           
  display.print(now.hour(), DEC);
  display.print(':');
  display.print(now.minute(), DEC);
  display.print(':');
  display.print(now.second(), DEC);
 
//  display.setTextSize(1);                           
//  display.setTextColor(WHITE,BLACK);
//  display.setCursor(35,22);
//  display.print(now.year(), DEC);
//  display.print('/');
//  display.print(now.month(), DEC);
//  display.print('/');
//  display.print(now.day(), DEC);
 display.display();
   display.clearDisplay();
  }
Скетч прикрепил
 

Вложения

poty

★★★★★★✩
19 Фев 2020
2,956
886
Начинается цикл loop, допустим, кнопка не нажата. Читается время, выводится на экран, тут же стирается. И так тысячу раз в секунду. Это так нужно?
Допустим, кнопка нажата. Выводится температура, давление, тут же стирается, выводится время, тут же стирается. И так пятьсот раз в секунду. Это так нужно?
 
  • Лойс +1
Реакции: Romello

Romello

✩✩✩✩✩✩✩
11 Ноя 2020
3
0
Начинается цикл loop, допустим, кнопка не нажата. Читается время, выводится на экран, тут же стирается. И так тысячу раз в секунду. Это так нужно?
Допустим, кнопка нажата. Выводится температура, давление, тут же стирается, выводится время, тут же стирается. И так пятьсот раз в секунду. Это так нужно?
delay добавить? если да, то какие значения?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
с delay будет хуже отзывчивость на работу кнопок , а энкодер вообще может отказаться работать, так что это плохая идея, но ради эксперимента можно попробовать и его.
Вообще тут была тема про работу без delay ... Об этом отдельный пост был от многоуважаемого Arhat109
Вообще много тем про задержки без делай. Например это https://community.alexgyver.ru/threads/zaderzhka-bez-delay-pomogite.4328/
Вот, нашел https://community.alexgyver.ru/thre...onechnyx-avtomatov-bez-delay.2657/#post-27484
 
  • Лойс +1
Реакции: Romello и poty