Здравствуйте. Делаю часы, столкнулся с проблемой. Суть:имеется источник времени ds3231, он дает опорное время которое нельзя изменять в ходе программы.Для того чтобы отображать время с модуля и редактировать его ввел переменную.Время на индикаторе=время модуля+коэффициент настройки.Рассмотрим ситуацию,когда время в модуля 00.00 , нужно поставить время 00.30 (значение коэффициента 30 минут). Когда проходит 30 минут время в модуле 00.30, отображаемое время 01.00.Спустя еще 30 минут время в модуле 01.00(т.е он прибавляет 1 к часу), отображаемое время 02.30(должно быть 01.30). Идея:Каждый раз когда время на индикаторе прибавляется второй раз(при смене часа на модуле) вычитать час. Вопрос:как так лучше сделать?
проблема непонятна. Прибавляйте свои 30 минут ко времени модуля, а не ко времени на индикаторе - и все будет правильно. Или я не понял. что вы такое спрашиваете - обьясните, как при прибалении 30 минут к 01:00 у вас получается 02:30 ЗЫ, а вообще, время в модуле можно менять и из программы, выставите один раз правильное время и не мучайтесь
А в чем смысл? Вам нужно иметь время на час меньше, чем у модуля? Часовой пояс? Разве в библиотеке этого нет?
Vonka155 - выложите кусок кода, как вы прибавление время. Очень хочу посмотреть, как у вас получается что 01:00 + 00:30 = 02:30 Вместо возни с отниманием часа - лучше найдите и исправте ошибку в коде.
Если время на модуле часов равно 00.00 а на индикаторе 00.30 , спустя пол часа время на модуле будет 00.30 время на индикаторе 00.00!.Введем условие когда минуты==0 (Час=час+1)-выполнить 1 раз. Чтоб когда проходил час на минутах от 0 до 59 прибавлялся 1 час. Проблема:Час прибавляется в начале часа исходя из условия выше и еще раз через пол часа когда время на модуле 01.00 (прошел час, значит прибавили час). Вроде понятно все написал.
если разница 30 минут, то когда на модуле 00:00 - на индикаторе 00:30 когда на модуле 00:15 - на индикаторе 00:45 00:30 - 01:00 00:45 - 01:15 01:00 - 01:30 Вот так получается у всех нормальных людей, которые умеют считать. никакой лишний час не образцуется и ничего отнимать не надо. У вас просто код неверный. выкладывайте - посмотрим
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;}
как я и думал. в коде бредятина. Казалось бы. что может быть проще? - прибавляем к часам поправку часов, к минутам - поправку минут, если в итоге минуты получились больше 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++;}
Если не вводить условия +1 час если минуты ==0, то в конце каждого часа минуты будут обнуляться без прибавления часа, а час будет прибавляться только тогда когда час изменится в модуле часов.
А ds3231 posix время умеет? Что проще скорректировать время в секундах и конвертнуть в человеческий формат. Головняка ноль.