Skocz do zawartości

Ciekawy zegar + temperatura


Pomocna odpowiedź

W ramach rozbudowania projektu możesz jeszcze pokusić się o dodanie czujnika wilgotności. Jednak trzeba pamiętać, że popularne tanie czujniki wilgotności raczej nie są zbyt dokładne - to bardziej w kategoriach wprawi progrmaistycznej.

Jeśli chodzi o własny znak dla "stopni", to zamień aktualną linię:

lcd.createChar(0, byte degree);

Na:

lcd.createChar(0, Degree);

Daj znać, czy pomogło 🙂

Link do komentarza
Share on other sites

Dzięki za informacje. Czujnik wilgotności ( a raczej wilgotność ), nie jest mi potrzebny. Tylko temperatura. Gdzieś TU jest błąd ( screen ) i nie pokazuje "stopnia" . 

Chciałem Wysłać informację z czujnika temperatury przez nadajnik FS1000A, no ale jakoś ani nie nadaje jakiegokolwiek komunikatu, ani nie odbiera ( transmiter i receiver ). Zakupiłem więc NRF24L01. Czekam na dostawę. Oczywiście chciałbym aby mi wyświetlało wszystko to , co jest na wyświetlaczu ( pierwszy post ). Może ktoś pomoże z linijką ?

Bez tytułu.jpg

Link do komentarza
Share on other sites

W kodzie, który wklejałeś pierwotnie było (poprawnie):

//Degree symbol:

W tym co widać na Twoim zrzucie ekranu, linia ta jest niepotrzebnie od komentowana. To zwykły komentarz, nie ma nic wspólnego z działaniem programy. Stad bierze się ten błąd - musisz to zakomentować lub usunąć.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wpadłem na pomysł włączenia i wyłączenia LCD na określony czas ( jak to było w przypadku "przypominacza". Program robi to co powinien ale zauważyłem defekt na wyświetlaczu. Nie odlicza czasu jeśli chodzi o zliczanie sekund tylko stoi w miejscu, jeśli LCD jest podświetlony. Zgasza się i po 5ciu sekundach się spowrotem włącza, czas oczywiście jest dalej. W czym tkwi problem ? Dodane linijki są skomentowane ( na samym dole ). Tu leży gdzieś usterka i dlatego na razie nie używam NoBacklight

#include <Wire.h>  //WireLibrary comes with arduino
#include <LiquidCrystal_I2C.h> //i2c LCD Library 
#define DS3231_I2C_ADDRESS 0x68 //RTC Address
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is conntec to the Arduino digital pin 4
#define ONE_WIRE_BUS 4
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);  // Set the LCD I2C address

byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};
void setup()
{
lcd.createChar(0, Degree);
  Wire.begin(); //initialise the TWI
  lcd.begin(20, 4);  //20 x 4 LCD (Change if required)

  for (int i = 0; i < 2; i++) //Flash LCD backlight 2 times on startup
  {
    lcd.backlight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on
  lcd.setCursor(0, 0); //Start at character 0 on line 0
  lcd.print("....WELCOME HOME....");
// Start serial communication for debugging purposes
Serial.begin(115200);     // initialize the Serial Monitor at a baud rate of 9600
// Start up the library
sensors.begin();        // initialize the DS18B20 temperature sensor:
}

void loop()
{
  displayTime(); //calls the display time function

  {
   sensors.requestTemperatures();            //zazadaj odczyt temperatury z czujnika
  lcd.setCursor(0,3);                       //ustaw kursor w pozycji 0,0
  lcd.print("Temperatura: ");               //wyswietl "Temperatura: "
  lcd.print(sensors.getTempCByIndex(0));    //wyswietl wartosc z czujnika 0
  lcd.print((char)0);                       //wyswietl znak stopnia
  lcd.print("C");         
  delay(50);  


  }
  delay(100); 
}



byte decToBcd(byte val)//used when sending time
{
  return ( (val / 10 * 16) + (val % 10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return ( (val / 16 * 10) + (val % 16) );
}

void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}

void displayTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
                 &year);
  if (hour < 10)
  {
    lcd.setCursor(0, 1);
    lcd.print("0");
    lcd.setCursor(1, 1);
    lcd.print(hour , DEC);
  }
  if (hour > 9)
  {
    lcd.setCursor(0, 1);
    lcd.print(hour , DEC);
  }
  lcd.setCursor(2, 1);
  lcd.print(":");
  if (minute < 10)
  {
    lcd.setCursor(3, 1);
    lcd.print("0");
    lcd.setCursor(4, 1);
    lcd.print(minute , DEC);
  }
  if (minute > 9)
  {
    lcd.setCursor(3, 1);
    lcd.print(minute , DEC);
  }
  lcd.setCursor(5, 1);
  lcd.print(":");
  if (second < 10)
  {
    lcd.setCursor(6, 1);
    lcd.print("0");
    lcd.setCursor(7, 1);
    lcd.print(second, DEC);
  }
  if (second > 9)
  {
    lcd.setCursor(6, 1);
    lcd.print(second, DEC);
  }
  if (dayOfMonth < 10)
  {
    lcd.setCursor(9, 1);
    lcd.print("0");
    lcd.setCursor(10, 1);
    lcd.print(dayOfMonth, DEC);
    lcd.setCursor(11, 1);
    lcd.print("/");
  }
  if (dayOfMonth > 9)
  {
    lcd.setCursor(9, 1);
    lcd.print(dayOfMonth, DEC);
    lcd.setCursor(11, 1);
    lcd.print("/");
  }
  if (month < 10)
  {
    lcd.setCursor(12, 1);
    lcd.print("0");
    lcd.setCursor(13, 1);
    lcd.print(month, DEC);
    lcd.setCursor(14, 1);
    lcd.print("/");
  }
  if (month > 9)
  {
    lcd.setCursor(12, 1);
    lcd.print(month, DEC);
    lcd.setCursor(14, 1);
    lcd.print("/");
  }
  lcd.setCursor(15, 1);
  lcd.print(year, DEC);

  switch (dayOfWeek) {
    case 1:
      lcd.setCursor(0, 2);
      lcd.print("Dzis Poniedzialek");
      break;
    case 2:
      lcd.setCursor(0, 2);
      lcd.print("Dzis jest Wtorek");
      break;
    case 3:
      lcd.setCursor(0, 2);
      lcd.print("Dzis jest Sroda");
      break;
    case 4:
      lcd.setCursor(0, 2);
      lcd.print("Dzis jest Czwartek");
      break;
    case 5:
      lcd.setCursor(0, 2);
      lcd.print("Dzis jest Piatek");
      break;
    case 6:
      lcd.setCursor(0, 2);
      lcd.print("Dzis jest Sobota");
      break;
    case 7:
      lcd.setCursor(0, 2);
      lcd.print("Dzis jest Niedziela");
      break;
  }
//lcd.noBacklight(); // brak wyświetlacza
//  delay(5000); // 60 sekund, jedna minuta
//lcd.backlight(); // włączenie wyświetlacza
//delay(5000);
}

 

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.