Кто подскажет о преобразовании типов данных?

whoim
Offline
Зарегистрирован: 03.11.2011

 Хранение всякой информации, например, в EEPROM - дело тонкое, каждый байт на счету. Подскажите (лучше кодом) следующие непонятки:

Дата. Дату, сцуко, надо преобразовать в минимальное количество байтов. Если год хранить в "простом" формате, прибавляя к "20" нужную последовательность, я представляю себе это так

день - один байт (255 вариантов, нам нужно 30)
месяц - один байт (255 вариантов, нам нужно 12)
год - один байт (255 вариантов, нам нужно 99)
часы - один байт (255 вариантов, нам нужно 12)
минуты, секунды - по одному (255 вариантов, нам нужно 60)

Итого 6 байт. Хреново, но даже если делать так - как преобразовать int (3 день например) в byte правильно, чтобы его потом можно было просто считать и преобразовать обратно?

Далее мысли о том, что куча "места" остается неиспользованной. И тут я вспоминаю про unix time, которое представлет собой некое количество секунд, прошедших с момента такого-то. Кто напишет процедуры преобразования даты-времени в юнихтайм и обратно?

whoim
Offline
Зарегистрирован: 03.11.2011

 

DS1307 Demo Sketch
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}
void loop () {
    DateTime now = RTC.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
    
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
    
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
    
    Serial.println();
    delay(3000);
}

now.unixtime()

whoim
Offline
Зарегистрирован: 03.11.2011

Хранить и читать будет удобно как здесь: http://freeduino.ru/arduino/sample_EEPROM.html