Как поставить условие на изменение параметра

Тема в разделе "Arduino & Shields", создана пользователем Vonka155, 19 авг 2019.

  1. Vonka155

    Vonka155 Нуб

    Здравствуйте.
    Делаю часы, столкнулся с проблемой.
    Суть:имеется источник времени ds3231, он дает опорное время которое нельзя изменять в ходе программы.Для того чтобы отображать время с модуля и редактировать его ввел переменную.Время на индикаторе=время модуля+коэффициент настройки.Рассмотрим ситуацию,когда время в модуля 00.00 , нужно поставить время 00.30 (значение коэффициента 30 минут). Когда проходит 30 минут время в модуле 00.30, отображаемое время 01.00.Спустя еще 30 минут время в модуле 01.00(т.е он прибавляет 1 к часу), отображаемое время 02.30(должно быть 01.30).
    Идея:Каждый раз когда время на индикаторе прибавляется второй раз(при смене часа на модуле) вычитать час.
    Вопрос:как так лучше сделать?
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Каждое четное число смен часа вычитать час из данных модуля?
    Вроде просто
     
  3. b707

    b707 Гуру

    проблема непонятна. Прибавляйте свои 30 минут ко времени модуля, а не ко времени на индикаторе - и все будет правильно. Или я не понял. что вы такое спрашиваете - обьясните, как при прибалении 30 минут к 01:00 у вас получается 02:30

    ЗЫ, а вообще, время в модуле можно менять и из программы, выставите один раз правильное время и не мучайтесь
     
    arkadyf нравится это.
  4. b707

    b707 Гуру

    откуда там берется лишний час?
     
  5. NikitOS

    NikitOS Король шутов Администратор

    Это к ТС, не ко мне
     
  6. Vonka155

    Vonka155 Нуб

    Это нужно делать каждый час, и можно в виде программы посмотреть как это будет выглядеть?
     
  7. NikitOS

    NikitOS Король шутов Администратор

    А в чем смысл?
    Вам нужно иметь время на час меньше, чем у модуля?
    Часовой пояс? :)

    Разве в библиотеке этого нет?
     
  8. b707

    b707 Гуру

    а) это делать не нужно
    б) на что посмотреть? как 2 числа сложить?
     
    NikitOS нравится это.
  9. b707

    b707 Гуру

    Vonka155 - выложите кусок кода, как вы прибавление время. Очень хочу посмотреть, как у вас получается что
    01:00 + 00:30 = 02:30
    Вместо возни с отниманием часа - лучше найдите и исправте ошибку в коде.
     
    DetSimen нравится это.
  10. Vonka155

    Vonka155 Нуб

    Если время на модуле часов равно 00.00 а на индикаторе 00.30 , спустя пол часа время на модуле будет 00.30 время на индикаторе 00.00!.Введем условие когда минуты==0 (Час=час+1)-выполнить 1 раз.
    Чтоб когда проходил час на минутах от 0 до 59 прибавлялся 1 час.
    Проблема:Час прибавляется в начале часа исходя из условия выше и еще раз через пол часа когда время на модуле 01.00 (прошел час, значит прибавили час).
    Вроде понятно все написал.
     
  11. DetSimen

    DetSimen Guest

    Код свой покажи, а не кружи словесами
     
  12. b707

    b707 Гуру

    если разница 30 минут, то когда на модуле 00:00 - на индикаторе 00:30
    когда на модуле 00:15 - на индикаторе 00:45
    00:30 - 01:00
    00:45 - 01:15
    01:00 - 01:30

    Вот так получается у всех нормальных людей, которые умеют считать. никакой лишний час не образцуется и ничего отнимать не надо.

    У вас просто код неверный. выкладывайте - посмотрим
     
  13. Vonka155

    Vonka155 Нуб

    byte h=(H+A)%24;//h-время на индикаторе, H-время на модуле часов,A-настройка часов
    byte mi=(Min+B)%60;//mi-время на индикаторе, Min-время на модуле часов,B-настройка минут
    if(mi==0&&pribavleniechasa==false){
    A=A+1;
    pribavleniechasa=true;
    }
    if(mi!=0)
    {pribavleniechasa=false;}
     
  14. NikitOS

    NikitOS Король шутов Администратор

    Код вставленный правильно или бан :)
     
  15. b707

    b707 Гуру

    как я и думал. в коде бредятина.
    Казалось бы. что может быть проще? - прибавляем к часам поправку часов, к минутам - поправку минут, если в итоге минуты получились больше 60- из минут вычитаем 60, к часам добавляем единицу. ВСЕ.
    Код ниже. Переход через границу суток осилите сами по аналогии
    Код (C++):
    byte h=(H+A)%24;//h-время на индикаторе, H-время на модуле часов,A-настройка часов
    byte mi=(Min+B);//mi-время на индикаторе, Min-время на модуле часов,B-настройка минут
    if (mi >59) {mi = mi -60; h++;}
     
    NikitOS нравится это.
  16. Vonka155

    Vonka155 Нуб

    Если не вводить условия +1 час если минуты ==0, то в конце каждого часа минуты будут обнуляться без прибавления часа, а час будет прибавляться только тогда когда час изменится в модуле часов.
     
  17. b707

    b707 Гуру

    хватит бред нести. я вам уже решение выложил
     
    DetSimen и NikitOS нравится это.
  18. Vonka155

    Vonka155 Нуб

    Спасибо,осознал.
     
  19. parovoZZ

    parovoZZ Гуру

    А ds3231 posix время умеет? Что проще скорректировать время в секундах и конвертнуть в человеческий формат. Головняка ноль.