Close

LMXLuke

Vytvořené odpovědi

Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)
  • Autor
    Příspěvky
  • odpověď na: Podmínka IF s D3231 #6394
    LMXLuke
    Účastník

    To je právě ten problém, Já jsem v podstatě na začátku. našel jsem na netu nějaký kód, kterým můžu zapsat do obvodu a pak číst datum a čas. Ale potřebuju z toho obvodu času přečíst den v týdnu, hodinu a minutu a pak to použít v IFu. Když tak ten kód sem můžu dát a někdo mi vysvětlete kde se čtou tyhle hodnoty a kam se zapíšou, s kterou proměnnou můžu pracovat v podmínce. Já to v tom kódu prostě nevidím. Dál jsem taky zjistil, že zřejmě ten obvod, co jsem koupil, je vadný. Dám příklad: Zapíšu do něj 12:30 a pak čtu jestli tam je správnej čas, všechno běží jak má. Ve 12:35 odpojim arduino z usb abych zjistil jestli obvod tiká i na baterce. Ve 12:40 ho znovu připojím, znovu nahraju program do arduina, tentokrát ale BEZ zapisovací části a čtu, ale obvod začne znovu tikat od chvíle 12:35, tedy od chvíle odpojení, tudíž na baterce netiká, nebo nevím

    #include "Wire.h"
    #define DS3231_I2C_ADDRESS 0x68
    // Convert normal decimal numbers to binary coded decimal
    byte decToBcd(byte val)
    {
      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 setup()
    {
      Wire.begin();
      Serial.begin(9600);
      // set the initial time here:
      // DS3231 seconds, minutes, hours, day, date, month, year
      // setDS3231time(30,42,21,4,26,11,14);
    }
    
    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;
      // retrieve data from DS3231
      readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
      &year);
      // send it to the serial monitor
      Serial.print(hour, DEC);
      // convert the byte variable to a decimal number when displayed
      Serial.print(":");
      if (minute<10)
      {
        Serial.print("0");
      }
      Serial.print(minute, DEC);
      Serial.print(":");
      if (second<10)
      {
        Serial.print("0");
      }
      Serial.print(second, DEC);
      Serial.print(" ");
      Serial.print(dayOfMonth, DEC);
      Serial.print("/");
      Serial.print(month, DEC);
      Serial.print("/");
      Serial.print(year, DEC);
      Serial.print(" Day of week: ");
      switch(dayOfWeek){
      case 1:
        Serial.println("Sunday");
        break;
      case 2:
        Serial.println("Monday");
        break;
      case 3:
        Serial.println("Tuesday");
        break;
      case 4:
        Serial.println("Wednesday");
        break;
      case 5:
        Serial.println("Thursday");
        break;
      case 6:
        Serial.println("Friday");
        break;
      case 7:
        Serial.println("Saturday");
        break;
      }
    }
    void loop()
    {
      displayTime(); // display the real-time clock data on the Serial Monitor,
      delay(1000); // every second
    }
Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)