• 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
DS3231 i DS18B20 Jak dokończyć dodać menu do ustawień z klawiatury
#1
Bug 
Jestem od kilku dni użytkownikiem arduino. Czytam i staram się coś nauczyć ale moja wiedza w C i jak działają niektóre moduły są bliskie zera. Potrzebuje pomocy. Chciałem dodać ustawianie zegara i temperatury z np. klawiszy lub encodera ale przerosło mnie znacznie. Kod jest pobrany z różnych przykładów. Może ktoś pomoże? Dosiego Roku 2018.
To co mam teraz:
Kod:
#include <DS18B20.h>
#include <Wire.h>
#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>
DS3231 clock;
#define TEMPERATURE_PRECISION 12  // rozdzielczosc czujnika
#include <EEPROM.h>
OneWire onewire(2); //ustawia pin podłączenia DS18B20
DS18B20 sensors(&onewire);;
LiquidCrystal_I2C lcd(0x27, 20, 4);  // Ustawienie adresu ukladu na 0x27
#define DS3231_I2C_ADDRESS 0x68
byte stopnie[8] = { //konfigurajca znaku stopnie
0b00110,
0b01001,
0b01001,
0b00110,
0b00000,
0b00000,
0b00000,
0b00000
};
// 0x28, 0x60, 0xE0, 0xBE, 0x8, 0x0, 0x0, 0xA6
// 0x28, 0xD2, 0xD7, 0xE2, 0x8, 0x0, 0x0, 0xD0
byte address2[8] = {0x28, 0x60, 0xE0, 0xBE, 0x8, 0x0, 0x0, 0xA6};
byte address1[8] = {0x28, 0xD2, 0xD7, 0xE2, 0x08, 0x00, 0x00, 0xD0}; // wpisany adres DS18B20
// Konwersja liczby dziesiętnej do postaci binarnej
byte decToBcd(byte val){
  return( (val/10*16) + (val%10) );
}
// Konwersja liczby binarnej do postaci dziesiętnej
byte bcdToDec(byte val){
  return( (val/16*10) + (val%16) );
}

void setup(){
  Wire.begin();
// Ustawienie czasu w momencie inicjacji układu: 6- piątek, 7-sobota, 1-niedziela
// DS3231 seconds, minutes, hours, day, date, month, year
// setDS3231time(03,26,23,6,29,12,17); //ustawienie czasu i daty na DS3231 (sekundy, minuty, godzina, nazwa dnia, dzień, miesiąć,)
// Inicjacja czujnika
  sensors.begin();
  sensors.request(address1);
  sensors.request(address2);
  lcd.begin(20,4);   
  lcd.backlight(); // załączenie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Dzien:");
  lcd.setCursor(0,1);
 lcd.print("Data :");
  lcd.setCursor(0,2);
 lcd.print("Czas :");
//  lcd.setCursor(0,3);
// lcd.print("Temp.:");
lcd.createChar(0, stopnie);
  delay(200);  
}
/*
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)

{
  // ustawienie czasu i daty w DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);                    // określa, że następna wartość ma trafić do rejestru sekund
  Wire.write(decToBcd(second));     // ustawienie sekund
  Wire.write(decToBcd(minute));     // ustawienie minuty
  Wire.write(decToBcd(hour));       // ustawienie godziny
  Wire.write(decToBcd(dayOfWeek));  // ustawienie dnia tygodnia (1=niedziela, 7=sobota itd.)
  Wire.write(decToBcd(dayOfMonth)); // ustawienie dnia (1-31)
  Wire.write(decToBcd(month));      // ustawienie miesiąca
  Wire.write(decToBcd(year));       // ustawienie roku (0-99)
  Wire.endTransmission();
}
*/
void readDS3231time(
byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // ustawia rejestr DS3231 na 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // żąda 7 bajtów danych od modułu DS3231 począwszy od rejestru 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;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
// Przekazanie danych do wyświetlenie LCD
// CZAS
// Godziny
// podczas wyświetlania konwertuje wartość zmiennej typu bitowego do postaci dziesiętnej
// Serial.print(hour, DEC);
  if (hour<10) {
    lcd.setCursor(7,2);
    lcd.print("0");
    lcd.print(hour, DEC);
  } else {
    lcd.setCursor(7,2);
    lcd.print(hour, DEC);
    }
  lcd.print(":");
  // Minuty
  if (minute<10) {
  //  Serial.print("0");
    lcd.setCursor(10,2);
    lcd.print("0");
    lcd.print(minute, DEC);
  } else {
    lcd.setCursor(10,2);
    lcd.print(minute, DEC);
    }
  lcd.print(":");
  //Sekundy
  if (second<10){
  lcd.setCursor(13,2);
  lcd.print("0");
  lcd.print(second, DEC);
  } else {
    lcd.setCursor(13,2);
    lcd.print(second, DEC);
 //   lcd.print("'");
    }
// DATA
  lcd.setCursor(7,1);
  if (dayOfMonth<10){
    lcd.setCursor(7,1);
    lcd.print("0");
    lcd.print(dayOfMonth, DEC);
  } else {
    lcd.setCursor(7,1);
    lcd.print(dayOfMonth, DEC);
    }
    lcd.print(".");
  // Miesiąc
  if (month<10){
    lcd.setCursor(10,1);
    lcd.print("0");
    lcd.print(month, DEC);
  } else {
    lcd.setCursor(10,1);
    lcd.print(month, DEC);
    }
    lcd.print(".");
   //Rok
    lcd.print("20");
    if (year<10){
    lcd.setCursor(15,1);
    lcd.print("0");
    lcd.print(year, DEC);
  } else {
    lcd.setCursor(15,1);
    lcd.print(year, DEC);
    }
  lcd.setCursor(7,0);
  switch(dayOfWeek){
  case 1:
    lcd.print("Niedziela   ");
    break;
  case 2:
    lcd.print("Poniedzialek");
    break;
  case 3:
    lcd.print("Wtorek      ");
    break;
  case 4:
    lcd.print("Sroda       ");
    break;
  case 5:
    lcd.print("Czwartek    ");
    break;
  case 6:
    lcd.print("Piatek      ");
    break;
  case 7:
    lcd.print("Sobota      ");
    break;
  }
}
void loop()
{ if (sensors.available())
  {
    float temperature = sensors.readTemperature(address1);
    float temperature2 = sensors.readTemperature(address2);
    sensors.request(address1);
    sensors.request(address2);
 byte temperatura2;   
  displayTime(); // wyświetlanie czasu rzeczywistego
lcd.setCursor(0,3);
lcd.print("CWU:");
lcd.print((temperature),1);
lcd.print((char)0);
lcd.print("C ");
lcd.setCursor(11,3);
lcd.print("CO:");
lcd.print((temperature2),1);
lcd.print((char)0);
lcd.print("C");
// if (sensors.readTemperature(address2)>55){
// lcd.noBacklight();
// delay(1000);
// lcd.backlight();
// }
// mruga : po godzinie
 delay(500);
 lcd.setCursor(9,2);
 lcd.print(" ");
 delay(500);
 }}
 
Odpowiedź
  


Wiadomości w tym wątku
DS3231 i DS18B20 Jak dokończyć dodać menu do ustawień z klawiatury - przez OMK - 31-12-2017, 14:35

Skocz do:


Przeglądający: 1 gości