большой обратный отсчет

Тема в разделе "Arduino & Shields", создана пользователем mf211, 17 авг 2017.

  1. mf211

    mf211 Нуб

    Доброго времени суток всем! Задумался об одном проекте (достаточно давно на самом деле) но не хватило мыслей для решения реализации.

    Имеется:
    Ардуино: уно(совместимый), нано(совместимый); модули: символьный экран : 16*2 и 20*4, часы реального времени DS1302 (и куча ненужной в данном проекте рассыпухи из комплекта с просторов али).

    Что нужно:
    вводишь дату и время (или только дату - время прописать в умолчания) некоторого события в будущем, текущее время и дата берется из ds1302 и на экране выводится значения часов дней и недель сколько до этог особытия осталось.

    реализуемо?
     
  2. rkit

    rkit Гуру

    Реализуемо
     
  3. mf211

    mf211 Нуб

    скажите пожалуйста как забрать разницу между текущими значениями(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 ....... дни добавляем в значение общего счетчика.

    мысли верные?
     
    Последнее редактирование: 17 авг 2017
  4. qwone

    qwone Гик

    Написать программу которая даст вам эту разницу
     
  5. rkit

    rkit Гуру

    Взять да посчитать. Математика в микроконтроллере такая же, как и в школе.
     
  6. mcureenab

    mcureenab Гуру

    Igor68 нравится это.
  7. Arkad_snz

    Arkad_snz Гик

    Следует точно (математически) определиться, что вы называете "месяц" (в смысле результата).
    Если, например, сколько раз между 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);
    }
    Тапками, если накосячил, не кидайтесь - больше года не писал - нюх потерял.
    Это так - для демонстрации, как постановка задачи перетекает в код.
    Рекурсия получается, ну, и да, хрен с ней она железная - пусть корячится.
     
    Последнее редактирование: 17 авг 2017
  8. mcureenab

    mcureenab Гуру

    Ему часы дни и недели нужно посчитать.

    Можно по календарю найти число секунд между двумя датами и перевести их в часы дни и недели.

    Но может быть другой подход.
    Отдельно посчитать количесиво целых дней и недель и отдельно посчитать количество часов в не целых днях.
     
  9. Arkad_snz

    Arkad_snz Гик

    Ну, так и что?
    difftime дает кол-во оставшихся секунд
    Если час=3600сек, то /3600
    Если день=24 часа, то часы/24, и т.д., но с учетом полных/неполных
    Впрочем в задаче ничего не сказано про неполные часы, дни...
     
    mf211 нравится это.
  10. mf211

    mf211 Нуб

    Спасибо всем заметившим и ответившим на мой пост. задача на самом деле полностью выглядит вот так: допустим сегодня уезжаю на работу (вахта). возвращаюсь через месяц или 2. железка должна показывать количество оставшихся часов до возвращения. (часы проще пересчитывать в недели (24*7 часов) и месяцы(24*((условие какой месяц) дней))) да и из INT не выбиваюсь.

    далее маппингом можно узнать процентное соотношение сколько прошло.

    а за мыслю с неполным часом\днем\неделей спасибо - не задумался.
     
  11. Airbus

    Airbus Радиохулиган Модератор

    А я уж подумал что бомбу с часовым механизмом делаете
     
  12. mf211

    mf211 Нуб

    я конечно не отношу себя к подобным индивидам, но часовой механизм на ардуино к взрывному устройству это моветон=) гораздо проще механический часовой механизм или устройство работающее через интернет или радиоканал.
    но в свете последних событий в мире о подобных вещах лучше не задумываться. и пи?*ить тех кто пытается ;) если таковые будут обнаружены

    а по поводу вами сказанного: там вобще никаких вычислений не надо. (условие И) если текущее дата и время == дата и время таймера то pin HIGH
     
  13. mcureenab

    mcureenab Гуру

    Это не всегда так.
     
  14. Arkad_snz

    Arkad_snz Гик

    Когда не так, то и считать не так.
    На Марсе считать по-своему - там сутки не 24 часа.
     
  15. Igor68

    Igor68 Гуру

    Самое простое и правильное решение опираясь на представление даты и времени в формате LONG... "ЭРА UNIX" - по этому принципу. Отсчёт начинается с 1 января 1970 года. Но это только для текущей даты и времени. А разницу можно получать используя те же функции, но без смещения для 1970 года. Это как раз и в примере. Лучшего все равно не найдёте, а только наживёте геморрой!
     
    arkadyf нравится это.