Quantcast
Channel: Arduino Polska Forum - Wszystkie działy
Viewing all articles
Browse latest Browse all 256

Zegarek z czujnikami

$
0
0
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 &tTimerOne.h&t
#include &tWire.h&t
#include &tDS3231.h&t
#include &tLiquidCrystal_I2C.h&t
#include &tOneWire.h&t
#include &tDallasTemperature.h&t

//////////////////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 &t 10 )
  {
    lcd.print(F(" "));
  }
  lcd.print(dt.hour);
  lcd.print(F(":"));
  if (dt.minute &t 10 )
  {
    lcd.print(F("0"));
  }
  lcd.print(dt.minute);
  lcd.print(F(":"));
  if (dt.second &t 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 &t 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 &t 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;
}

Viewing all articles
Browse latest Browse all 256

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra