Skocz do zawartości

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 🙂

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

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ąć.

Mimo wszystko, nie pokazuje znaczka.

Aktualizacja:

Dobra. Udało się zakomentowana była linijka    lcd.print((char)0); . odkomentowałem i zadziałało 🙂

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);
}

 

 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...