• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zegarek z czujnikami
#1
Witam,

mam pomysł na stworzenie zegarka do mojego biurka, który będzie wyświetlał czas, datę, temperaturę, wilgotność, ciśnienie atmosferyczne, poziom CO2 w pokoju. Jestem na etapie wyświetlania czasu, daty i pomiaru temperatury. 
Część odpowiedzialną za czas i datę oparłem o moduł DS3231. Mam problem z przeskakującymi sekundami ( niekiedy co 2 sekundy). Czytałem o przeskakiwaniu sekund w google ale nie rozumiem o co tam chodzi. Nie wiem gdzie robię błąd.
Oto kod:
Kod:
#include <TimerOne.h>
#include <Wire.h>
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>

//////////////////Do czujnika/////////////////////////////
int temperatura;
const byte oneWireBus = 11;                                  // Tutaj jest określony port magistrali 1-wire.
OneWire oneWire(oneWireBus);                                 // Tutaj definiuje się port magistrali dla biblioteki.
DallasTemperature sensors(&oneWire);                         // Teraz można już przekazać bibliotece obsługi termometru namiary na bibliotekę obsługi magistrali.
///////////////////////////////////////////////


//////////////////Do wyświetlacza/////////////////////////////
LiquidCrystal_I2C lcd(0x27, 20, 4);
////////////////////////////////////////////////////////


//////////////////Do Zegara/////////////////////////////
DS3231 clock;
RTCDateTime dt;
///////////////////////////////////////////////
void setup()
{
  //////////////////Do czyjnika/////////////////////////////
  sensors.begin();
  ///////////////////////////////////////////////
  //////////////////Do wyświetlacza/////////////////////////////
  lcd.begin();
  lcd.backlight();
  ///////////////////////////////////////////////
  //////////////////Do zegara/////////////////////////////
  clock.begin();
  clock.setDateTime(__DATE__, __TIME__);
  //////////////////Do przerwania/////////////////////////////
  Timer1.initialize(500000);
  Timer1.attachInterrupt(Temperatura);
  //////////////////////////////////////////////

}

void loop()
{
  //////////////////////////////////Zegarek//////////////////////////////////////
  dt = clock.getDateTime();
  lcd.setCursor(0, 0);
  if (dt.hour < 10 )
  {
    lcd.print(F(" "));
  }
  lcd.print(dt.hour);
  lcd.print(F(":"));
  if (dt.minute < 10 )
  {
    lcd.print(F("0"));
  }
  lcd.print(dt.minute);
  lcd.print(F(":"));
  if (dt.second < 10 )
  {
    lcd.print(F("0"));
  }
  lcd.print(dt.second);
  ////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////Data do zegarka///////////////////////////////
  lcd.setCursor(0, 1);
  lcd.print(dt.day);
  lcd.print(F("/"));
  lcd.print(dt.month);
  lcd.print(F("/"));
  lcd.print(dt.year);
  ///////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////Do Temperatury//////////////////////////////////////////////////////
  lcd.setCursor(0, 2);
  lcd.print(F("Temp.:"));
  lcd.setCursor(0, 3);

  if (temperatura < 0)                                       // Gdy wartość jest ujemna...
  {
    temperatura--;                                           // odejmij jeden ze względu na zaokrąglenia liczb ujemnych.
    lcd.print(F("-"));                                       // rysuj znak minusa.
  }
  else
  {
    lcd.print(F(" "));                                       // W przeciwnym razie rysuj spację.
  }

  temperatura = abs(temperatura);                            // Wyciągnij wartość bezwzględną.

  if (temperatura < 100)                                     // Jeśli temperatura będzie większa od 9 bądź mniejsza od -9 stopni...
  {
    lcd.print(F(" "));                                       // rysuj dodatkową spację.
  }


  lcd.print(float(temperatura) / 10, 1);
  lcd.print((char)223);
  lcd.print(F("C"));
  ///////////////////////////////////////////////////////////////////////////////////////
  delay(1000);
}


void Temperatura()
{
  sensors.requestTemperatures();                             // Wyślij rozkaz zmierzenia temperatury.
  temperatura = 10 * (sensors.getTempCByIndex(0) + 0.05);    // Przekształć wartość odczytaną w całkowitą (dokładność: jedno miejsce po przecinku)
  return temperatura;
}
 
Odpowiedź
  


Wiadomości w tym wątku
Zegarek z czujnikami - przez kopcor07 - 28-12-2023, 12:28
RE: Zegarek z czujnikami - przez kaczakat - 28-12-2023, 15:14
RE: Zegarek z czujnikami - przez kopcor07 - 28-12-2023, 19:39
RE: Zegarek z czujnikami - przez oscarX - 28-12-2023, 22:22
RE: Zegarek z czujnikami - przez kopcor07 - 29-12-2023, 00:51
RE: Zegarek z czujnikami - przez kaczakat - 29-12-2023, 01:55
RE: Zegarek z czujnikami - przez kopcor07 - 29-12-2023, 11:39
RE: Zegarek z czujnikami - przez Irvin - 29-12-2023, 12:37
RE: Zegarek z czujnikami - przez kopcor07 - 01-01-2024, 14:49

Skocz do:


Przeglądający: 1 gości