В буднии дни с 10:00 до 18:00 управляющие устройство выключенно в выходные и праздничные работает круглосучно
Календарь Atmega16 WinAVR
- Сообщения: 82
- Зарегистрирован: Ср авг 19, 2009 09:34:50
Как можно организовать такую идею
В буднии дни с 10:00 до 18:00 управляющие устройство выключенно в выходные и праздничные работает круглосучно
В буднии дни с 10:00 до 18:00 управляющие устройство выключенно в выходные и праздничные работает круглосучно
- Реклама
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
- Сообщения: 82
- Зарегистрирован: Ср авг 19, 2009 09:34:50
- Сообщения: 7
- Зарегистрирован: Пн мар 30, 2009 19:59:50
- Реклама
- Сообщения: 82
- Зарегистрирован: Ср авг 19, 2009 09:34:50
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
- Сообщения: 82
- Зарегистрирован: Ср авг 19, 2009 09:34:50
Вариант без ds1307 (отдельная микросхема - это хорошо, а вот альтернатива для по быстрому):
вводите в программу счетчик дней недели (1 - 7) - при запуске задаете день недели.
вводите в программу счетчик дней в году (от 1 до 365) - при запуске задаете текущий день в году.
вводите в программу счетчик годов
(значения от 0 до 3), чтобы в високосных годах после 28-го февраля счетчик дней вернулся один раз на один день назад - при запуске задаете число года после последнего високосного.
И далее, по таким-то дням недели работаем\не работаем .
Для праздников отдельно масивчик по таким-то дням в году работаем\не работаем. (Ага, ручками считаем на калькуляторе)
*Eсли был сброс питания, и параметры не устанавливали - никакими нагрузками не управлять, - предосторожность вродe как само собой разумеющееся.
------
Другие варианты реализации - очевидны.
P.S.: Счетчик годов можно сделать так: от 0 до 4.
0 - это високкостный до 28, 1 это после 28-го - так вроде проще 28-е посчитать два раза. Ну а счетчик дней недели как считал вперед, так и считает
вводите в программу счетчик дней недели (1 - 7) - при запуске задаете день недели.
вводите в программу счетчик дней в году (от 1 до 365) - при запуске задаете текущий день в году.
вводите в программу счетчик годов
И далее, по таким-то дням недели работаем\не работаем .
Для праздников отдельно масивчик по таким-то дням в году работаем\не работаем. (Ага, ручками считаем на калькуляторе)
*Eсли был сброс питания, и параметры не устанавливали - никакими нагрузками не управлять, - предосторожность вродe как само собой разумеющееся.
------
Другие варианты реализации - очевидны.
P.S.: Счетчик годов можно сделать так: от 0 до 4.
0 - это високкостный до 28, 1 это после 28-го - так вроде проще 28-е посчитать два раза. Ну а счетчик дней недели как считал вперед, так и считает
Скелет колобка состоит из черепа.
- Сообщения: 82
- Зарегистрирован: Ср авг 19, 2009 09:34:50
Я все таки остановился на использовании DS1307 есть свои плюсы...
Нашол алгоритм для расчета дня недели по дате
http://uk.wikipedia.org/wiki/Алгоритм_ ... дня_тижня
Сварганил код
Результат почему то получается на 1 день больше
В чем может быть ошибка
Нашол алгоритм для расчета дня недели по дате
http://uk.wikipedia.org/wiki/Алгоритм_ ... дня_тижня
Сварганил код
Код: Выделить всё
char weekday(unsigned char day, unsigned char month, unsigned char year)
{
int a = (14 - month) / 12;
int y = year - a;
int m = month + 12 * a - 2;
return (7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
}
В чем может быть ошибка
таки вычитайте единицу из результата. А у меня все получается... только воскресенье - 0(америка).
geniusbsd, спасибо за код.
Проверял в Excel`е.
Работает.
Проверял в Excel`е.
Работает.


