Кто подскажет о преобразовании типов данных?
- Войдите на сайт для отправки комментариев
Хранение всякой информации, например, в EEPROM - дело тонкое, каждый байт на счету. Подскажите (лучше кодом) следующие непонятки:
Дата. Дату, сцуко, надо преобразовать в минимальное количество байтов. Если год хранить в "простом" формате, прибавляя к "20" нужную последовательность, я представляю себе это так
день - один байт (255 вариантов, нам нужно 30)
месяц - один байт (255 вариантов, нам нужно 12)
год - один байт (255 вариантов, нам нужно 99)
часы - один байт (255 вариантов, нам нужно 12)
минуты, секунды - по одному (255 вариантов, нам нужно 60)
Итого 6 байт. Хреново, но даже если делать так - как преобразовать int (3 день например) в byte правильно, чтобы его потом можно было просто считать и преобразовать обратно?
Далее мысли о том, что куча "места" остается неиспользованной. И тут я вспоминаю про unix time, которое представлет собой некое количество секунд, прошедших с момента такого-то. Кто напишет процедуры преобразования даты-времени в юнихтайм и обратно?
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()
Хранить и читать будет удобно как здесь: http://freeduino.ru/arduino/sample_EEPROM.html