Доброго времени суток всем! Задумался об одном проекте (достаточно давно на самом деле) но не хватило мыслей для решения реализации. Имеется: Ардуино: уно(совместимый), нано(совместимый); модули: символьный экран : 16*2 и 20*4, часы реального времени DS1302 (и куча ненужной в данном проекте рассыпухи из комплекта с просторов али). Что нужно: вводишь дату и время (или только дату - время прописать в умолчания) некоторого события в будущем, текущее время и дата берется из ds1302 и на экране выводится значения часов дней и недель сколько до этог особытия осталось. реализуемо?
скажите пожалуйста как забрать разницу между текущими значениями(C) и датой события будущего(F) (при условии что оно должно быть в интервале 1...3 месяца и так же необходимо учитывать то что в месяце может быть от 28 до 31 дня) Переменные и постоянные: F - будущее, С - текущее g - год, m -месяц, d - день, h - час, mm - минуты или это получается примерно подобное: вычитаем из Fg год Cg - условие если ==0, то пропускаем, + вычитаем из Fm Cm если !=0, смотрим какие номера использовались (1 - 31, 2 - 28, если результат Fg/4 == натуральное число =2 - 29 ), если 3 -31 ....... дни добавляем в значение общего счетчика. мысли верные?
Следует точно (математически) определиться, что вы называете "месяц" (в смысле результата). Если, например, сколько раз между C и F встретится 1-е число месяца, то придется перебирать весь срок подневно, и считать эти 1-е числа. Если (условно) месяцем считать 30 дней, то просто делением... Как месяц определите, так и считайте. Я студентов всегда так и учу - при программировании не изобретайте новых формул - что в задаче прописано, то и программируйте. Пример: Вычислить (написать функцию) n! (факториал) По определению: n! = n*(n-1)! (если n>1) и n!=1 (если n=1) Так и пишем: Код (C++): int fak(int n) { if (n==1) return(1); else return (n*fak(n-1); } Тапками, если накосячил, не кидайтесь - больше года не писал - нюх потерял. Это так - для демонстрации, как постановка задачи перетекает в код. Рекурсия получается, ну, и да, хрен с ней она железная - пусть корячится.
Ему часы дни и недели нужно посчитать. Можно по календарю найти число секунд между двумя датами и перевести их в часы дни и недели. Но может быть другой подход. Отдельно посчитать количесиво целых дней и недель и отдельно посчитать количество часов в не целых днях.
Ну, так и что? difftime дает кол-во оставшихся секунд Если час=3600сек, то /3600 Если день=24 часа, то часы/24, и т.д., но с учетом полных/неполных Впрочем в задаче ничего не сказано про неполные часы, дни...
Спасибо всем заметившим и ответившим на мой пост. задача на самом деле полностью выглядит вот так: допустим сегодня уезжаю на работу (вахта). возвращаюсь через месяц или 2. железка должна показывать количество оставшихся часов до возвращения. (часы проще пересчитывать в недели (24*7 часов) и месяцы(24*((условие какой месяц) дней))) да и из INT не выбиваюсь. далее маппингом можно узнать процентное соотношение сколько прошло. а за мыслю с неполным часом\днем\неделей спасибо - не задумался.
я конечно не отношу себя к подобным индивидам, но часовой механизм на ардуино к взрывному устройству это моветон=) гораздо проще механический часовой механизм или устройство работающее через интернет или радиоканал. но в свете последних событий в мире о подобных вещах лучше не задумываться. и пи?*ить тех кто пытается если таковые будут обнаружены а по поводу вами сказанного: там вобще никаких вычислений не надо. (условие И) если текущее дата и время == дата и время таймера то pin HIGH
Самое простое и правильное решение опираясь на представление даты и времени в формате LONG... "ЭРА UNIX" - по этому принципу. Отсчёт начинается с 1 января 1970 года. Но это только для текущей даты и времени. А разницу можно получать используя те же функции, но без смещения для 1970 года. Это как раз и в примере. Лучшего все равно не найдёте, а только наживёте геморрой!