Как запомнить время и сравнить с текущим ?
- Войдите на сайт для отправки комментариев
Добрейшего времени. Есть модуль часов, и он нормально работает:) http://www.ebay.com/itm/261043197718?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
Вопрос в следующем. Пишим время в EEPROM(раз в 5 минут или по какому то действию) в каждую отдельную ячейку -часы и минуты.
Считываем(раз в 5 минут или по какому то действию) -всё вроде тип топ.
Задача состоит в следующем:
Как правильно сравнить разницу(вывести) в минутах между реальным временим и которое хрониться в памяти. Не могу найти функционал.
Помогите плиз кто чем может (только по существу)
Выкладывать весь код, дело не благородное -очень много лишнего (тяжело ковыряться в чужом).Мне бы только реальный пример. Как перевести два значения 18 (часы) 30 (минуты)в 1830 и то же самое сделать с реальным временем 19 часов 39 минут в 1939 . Разница между двумя значениями как раз и нужна.
Что за изврат ?
А не проще использовать функцию millis() ?
А так,проще переводить часы-минуты-секунды сразу в одно число и запоминать во флеш ..вот только количество раз записи/чтения ограничено все же..
Что за изврат ?
А не проще использовать функцию millis() ?
А так,проще переводить часы-минуты-секунды сразу в одно число и запоминать во флеш ..вот только количество раз записи/чтения ограничено все же..
Я не спорю, но с millis() -что то не очень получается. И не совсем понял ".вот только количество раз записи/чтения ограничено все же.."
Вы наверное не совсем поняли -почему через гимор. Ардуина будет выключатся переодически. И нужно будет считать интервал прошедшего времени с последнего выключения.
Gagarin74, переведите часы в минуты и сравнивайте. 18 ч 30 мин = 18*60 + 30 мин = 1110 мин.
У EEPROM все же есть ограничение на количество записи.
Для ардуины можно использовать резервный источник питания
Если использовать часы ,то просто переводим в секунды и пишем в EEPROM ,потом разницу вычесть легче в секундах,которые,поделив на 60 можно получить уже в минутах :)
Если часы не будут использоватся по прямому назначению,то можно их просто обнулять при событии и получим уже сразу что хотим
У EEPROM все же есть ограничение на количество записи.
Для ардуины можно использовать резервный источник питания
Если использовать часы ,то просто переводим в секунды и пишем в EEPROM ,потом разницу вычесть легче в секундах,которые,поделив на 60 можно получить уже в минутах :)
Если часы не будут использоватся по прямому назначению,то можно их просто обнулять при событии и получим уже сразу что хотим
Про EEPROM -можно по подробней -сколько конкретно циклов????!!!!!!
Ардуино подключается к автомобильному прикуривателю. По этому про бесперебойник речи не идет.Машина может быть выключена на день на неделю итд итп
Gagarin74, переведите часы в минуты и сравнивайте. 18 ч 30 мин = 18*60 + 30 мин = 1110 мин.
БЛИН а вот за это 5 БАЛЛОВ!!!!!! Вот я мудильник!!!!!!!!!!
Судя по даташитам 100 000 - по идее должно хватить :)
Судя по даташитам 100 000 - по идее должно хватить :)
Не так много :( А на SD карту -долго ?
На год должно хватить,если будет включено круглосуточно и запись будет каждые 5 минут.
Кстати ,на том часовом модуле,что на ебей имеется микросхема памяти -можно и её использовать,но надо смотреть сколько у её циклов записи/чтения
Можно и на СД карту. Ведь данные пишутся со значительным интервалом времени, поэтому скорость записи не важна.
На год должно хватить,если будет включено круглосуточно и запись будет каждые 5 минут.
Кстати ,на том часовом модуле,что на ебей имеется микросхема памяти -можно и её использовать,но надо смотреть сколько у её циклов записи/чтения
СПАСИБО за помощь!!!!!!!!!!
Хы , в даташите написано 1 млн циклов :) - на 10 лет должно хватить...
http://arduino.ru/forum/programmirovanie/kak-sokhranit-znachenie-pered-sbrosom
Из даташита:
Сейчас запустил этот тест по уничтожению ячейки ради интереса, как встанет отпишусь, но уже перевалило за 200000 перезаписей.
#include <EEPROM.h> void setup() { Serial.begin(9600); pinMode(13, OUTPUT); unsigned long Fucks = 0; byte FuckIn = 0, FuckOut = 0; Serial.println("START"); while (FuckIn == FuckOut) { if (FuckIn == 0) FuckIn = 255; else FuckIn = 0; EEPROM.write(301, FuckIn); FuckOut = EEPROM.read(301); ++Fucks; if ((Fucks % 1000) == 0) { Serial.println(Fucks); digitalWrite(13,(!digitalRead(13))); } } Serial.println("ERROR"); Serial.println("ERROR"); Serial.println("ERROR"); Serial.println(Fucks); } void loop() {}Итак результат. Первый сбой произошел на 6321455 цикле перезаписи! Очень не плохо! Последующие после 12477, 1129, 2891, 6257. Можно считать, что ячейка сносилась.
В принципе если данные не так важны, то можно смело писать/стирать и не париться.
Еще можно организовать дублирование данных и проверку, то есть копировать каждый байт например 3 раза и записывать в 3 ячейки ЕЕПРОМ, а при чтении сравнивать эти копии и если 1 из 3 байт не равен оставшимся двум, то за верное значение принять то что в этих двух байтах. Вероятность того, что две ячейки дадут сбой одновременно и (или), при котором байты одинакого покоцаются стремится к нулю.
Тогда для задачи поставленной выше ЕЕПРОМ хватит на ~10 лет.
http://arduino.ru/forum/programmirovanie/kak-sokhranit-znachenie-pered-sbrosom
Из даташита:
Сейчас запустил этот тест по уничтожению ячейки ради интереса, как встанет отпишусь, но уже перевалило за 200000 перезаписей.
#include <EEPROM.h> void setup() { Serial.begin(9600); pinMode(13, OUTPUT); unsigned long Fucks = 0; byte FuckIn = 0, FuckOut = 0; Serial.println("START"); while (FuckIn == FuckOut) { if (FuckIn == 0) FuckIn = 255; else FuckIn = 0; EEPROM.write(301, FuckIn); FuckOut = EEPROM.read(301); ++Fucks; if ((Fucks % 1000) == 0) { Serial.println(Fucks); digitalWrite(13,(!digitalRead(13))); } } Serial.println("ERROR"); Serial.println("ERROR"); Serial.println("ERROR"); Serial.println(Fucks); } void loop() {}Итак результат. Первый сбой произошел на 6321455 цикле перезаписи! Очень не плохо! Последующие после 12477, 1129, 2891, 6257. Можно считать, что ячейка сносилась.
В принципе если данные не так важны, то можно смело писать/стирать и не париться.
Еще можно организовать дублирование данных и проверку, то есть копировать каждый байт например 3 раза и записывать в 3 ячейки ЕЕПРОМ, а при чтении сравнивать эти копии и если 1 из 3 байт не равен оставшимся двум, то за верное значение принять то что в этих двух байтах. Вероятность того, что две ячейки дадут сбой одновременно и (или), при котором байты одинакого покоцаются стремится к нулю.
Тогда для задачи поставленной выше ЕЕПРОМ хватит на ~10 лет.
СПАСИБО!!!!!!!!! ТО что ДОКТОР ПРОПИСАЛ!!!!!!!