Многомер "Солянка"
Добавлено: Вт окт 07, 2014 19:03:45
Я являюсь автором разработки Многомер "Солянка" . В данной прошивке обнаружена ошибка - не верно ведется график дежурства. Желающих повторить устройство хочу предупредить об этом, а у знатоков спросить где накосячил в расчетах.
День недели рассчитывается в данном устройстве программно, по аналогии взятой в обсуждении с этой ветки форума.
if (month > 2){ month -= 2;}
else{ month += 10; year--; };
day =((date + year + (year>>2) + ((31 * month) / 12)) % 7);
if (day == 0) day = 7;
//---------------------отображаем------------------------------------------------------------
switch (day) {
case 1: sprintf(lcd_string_B0,"Monday(1) ");break;
case 2: sprintf(lcd_string_B0,"Tuesday(2) ");break;
case 3: sprintf(lcd_string_B0,"Wednesday(3)");break;
case 4: sprintf(lcd_string_B0,"Thursday(4) ");break;
case 5: sprintf(lcd_string_B0,"Friday(5) ");break;
case 6: sprintf(lcd_string_B0,"Saturday(6) ");break;
case 7: sprintf(lcd_string_B0,"Sunday(7) ");break;
default:sprintf(lcd_string_B0,"ReedDayERROR");break; }
работает без нареканий. По этому же принципу я решил вести расчет кто сегодня дежурит, с той лишь разницей, что дежурящих человек в нашей семье всего трое. Поэтому в конце рассчетов брал ОСТАТОК 3
if (month > 2){ month -= 2;}
else{ month += 10; year--; };
duty =((date + year + (year>>2) + ((31 * month) / 12)) % 3);
if (duty == 0) duty = 3;
//---------------------отображаем------------------------------------------------------------
switch (duty) {
case 1: sprintf(lcd_string_B2," Lena ");break;
case 2: sprintf(lcd_string_B2," Artem ");break;
case 3: sprintf(lcd_string_B2," Nikita ");break;
default:sprintf(lcd_string_B2," Sultan ");break;} // Ошибка! Дежурит наш песик Султан
На практике получилось что при переходе на новый месяц отдежуривший человек снова назначен дежурным! Хотя день недели исправно "перелистывается". В математике не силен, подскажите как исправить ситуацию?
http://radiokot.ru/konkursCatDay2014/39/
День недели рассчитывается в данном устройстве программно, по аналогии взятой в обсуждении с этой ветки форума.
if (month > 2){ month -= 2;}
else{ month += 10; year--; };
day =((date + year + (year>>2) + ((31 * month) / 12)) % 7);
if (day == 0) day = 7;
//---------------------отображаем------------------------------------------------------------
switch (day) {
case 1: sprintf(lcd_string_B0,"Monday(1) ");break;
case 2: sprintf(lcd_string_B0,"Tuesday(2) ");break;
case 3: sprintf(lcd_string_B0,"Wednesday(3)");break;
case 4: sprintf(lcd_string_B0,"Thursday(4) ");break;
case 5: sprintf(lcd_string_B0,"Friday(5) ");break;
case 6: sprintf(lcd_string_B0,"Saturday(6) ");break;
case 7: sprintf(lcd_string_B0,"Sunday(7) ");break;
default:sprintf(lcd_string_B0,"ReedDayERROR");break; }
работает без нареканий. По этому же принципу я решил вести расчет кто сегодня дежурит, с той лишь разницей, что дежурящих человек в нашей семье всего трое. Поэтому в конце рассчетов брал ОСТАТОК 3
if (month > 2){ month -= 2;}
else{ month += 10; year--; };
duty =((date + year + (year>>2) + ((31 * month) / 12)) % 3);
if (duty == 0) duty = 3;
//---------------------отображаем------------------------------------------------------------
switch (duty) {
case 1: sprintf(lcd_string_B2," Lena ");break;
case 2: sprintf(lcd_string_B2," Artem ");break;
case 3: sprintf(lcd_string_B2," Nikita ");break;
default:sprintf(lcd_string_B2," Sultan ");break;} // Ошибка! Дежурит наш песик Султан
На практике получилось что при переходе на новый месяц отдежуривший человек снова назначен дежурным! Хотя день недели исправно "перелистывается". В математике не силен, подскажите как исправить ситуацию?
http://radiokot.ru/konkursCatDay2014/39/
