График работы через массив

Добрый день.
Подскажите как реализовать график работы устройства (например, 1/3) через массив. С функцией переключения графика по нужде (например, на 2/2 или 5/2).

Вроде просто, но не могу разобраться.
Создал массив 2 мерный.

week_day[3][7] = {
{1,2,3,4,5,6,7},   //порядковые номера дней недели.
{5,6,7,1,2,3,4},  // текущий день.
{1,0,0,0,1,0,0},  // график 1/3.
};

Не могу запилить цикл с корректным обновлением графика работы так чтобы со следующей недели стало

{0,1,0,0,0,1,0},

2 строки массива

d = time.weekday;
  for (i = 0, n = 1; i < 7, n < 8; i++, n++) {
    week_day[0][i] = n;
    week_day[1][i] = d;
    if (d == 7)d = 1; else d++;
  }

С последней строкой массива затык

for (i = 0; i < 7; i+=4) {
if (i < 7) week_day[0][i] = 1;
else week_day[0][i-7] = 1;
}

А массив нужен из принципиальных соображений?

Вы не могли бы

  1. Внятно объяснить задачу: что Вы хотите сделать. Не “например 1/3” а по-русски?
  2. Привести полный код с пояснениями что какие-то его куски по-Вашему должны делать и для чего они написаны?

А то Ваша

у меня тоже затык мозга вызывает. Написан какой-то бред, зачем, почему, что сказать-то этим хотели? Всё ХЗ!

А как можно по другому? Я думал, что через массив удобнее всего переключать режимы

Можно. Самый простой способ завести 3 переменных типа uint16_t и 1 типа bool
Bool для хранения текущего состояния, один инт для количества рабочих дней, второй для количества “выходных”. Третий - счетчик
UPD если я правильно понял сумбурное описание проблемы

Код громоздкий :smile:
Не хотел его сюда пихать.
Задача у меня тривиальная, нагружать публику масштабами идеи наверно лишнее.
Есть устройство, которое должно работать по графику 1/3. В рабочие дни - так, в выходные - по-другому. В общем. С функцией изменения графика (на будущее).

Я догадываюсь…

Пугающая перспектива. Лучше не стоит :slight_smile:

Не, если не лишнее, то :smile:

int weekDay[7];
int now_day[7];
//int new_day[7];
int new_day[3][7];

byte i;
byte n;
byte x;
int d;
byte m

void fan_mode() {
}

void pid_heater() { 
}

void setup() {
 
}

void loop() {
  work_mode();
  DateTime now = rtc.getTime();

  switch (Mode) {
    case 0: //авто
      {

        if (workday) {...};
        if (weekend) {...};
        ...       
        break;
      }

    case 1: // рабочие дни
      {
        if (workday) {...};
        break;
      }
    case 2: // выходные
      {
        if (weekend) {...};
        break;
      }
    case 3: // отпуск
     {
      ....
      break;
     }  
  }  
}

void work_mode() {
  DateTime now = rtc.getTime();
  d = now.day;
  for (i = 0, n = 1; i < 7, n < 8; i++, n++) {
    new_day[0][i] = n;
    new_day[1][i] = d;
    if (d == 7)d = 1; else d++;
  }

  if (work_schedule == 1) {                              // График 1/3
    for (x = 0; x < 11; x ++) {
      weekDay[x] = 0;      
    }
    for (x = 0; x < 11; x += 4) {
       
      }
  }
}

Зря… Сейчас направление выдадут ))

Да-да-да :laughing:
Поэтому мялся

Надо сделать маленький код, демонстрирующий Вашу проблему. Чтобы можно было посмотреть и понять что же там у Вас за беда.

Так, как Вы её описали - не понятно ни хрена и ни редьки!

И текст пишите по-человечески. Я вот не понимаю, что означает

Устройство должно работать в рабочие дни в одном режиме, в выходные - в другом. Переключение режимов в loopе с помощью switch.
0 (по умолчанию) - авто режим по установленному графику.
1 - переключение на работу как в рабочий день
2 - как в выходной
3 - отпуск.

P.S. Чуть сократил код

Ну, и дальше? Продолжайте! Проблема-то у Вас в чём?

Объясните проблему словами. Сделайте маленький код, который её демонстрирует (всё, что не касается проблемы выбросьте), выложите его и кто-нибудь обязательно подскажет.

Ну, собственно она и изложена в 1 сообщении.

Вот за эту идею спасибо. Попробуем так.

P.S.

Сделано

Понятно. Значит, внятно излагать не будете. Ну, тогда удачи Вам решить её самостоятельно!

Я и здесь пояснил

И тут

Как еще объяснить? И код залил.
Если есть конкретные вопросы - спрашивайте.
Хотя выше участник все понял. Даже до кода

Удачи!

что же вы Евгений Петрович , поближе надо быть к рабочему классу . 1/3 значит “1 через 3” , то есть 1 день рабочий, 3 дня - выходной ,ну или наоборот , 1 день выходной и 3 рабочих , т.е. например рабочий = пн , выходные = вт,ср,чт . рабочий пт , выходные = сб,пн,вт
ТСу надо реализовать такую схему работы некого устройства. а так же менять эту схему “налету”

Ого, :grinning:
А я про себя плохо думал. Значит обрисовал задачу в целом внятно.
Да, Евгений Петрович?

Вот такой я тупой и непонятливый :slight_smile:

Кстати, в чём проблема ТСа я тоже не понимаю

Для меня бессмысленный набор слов. А от огрызка кода

последние остатки волос дыбом встают.

Догадаться что он пытался сделать я не могу, а что сделал … ну бред же голимый! Внутри цикла по i < 7 зачем-то ещё проверка if (i < 7). Зачем? На случай, если компилятор неправильно цикл скомпилирует? Или как?

Т.е. это просто бред. Понять чего хотели невозможно, … ну, пусть сам разбирается, если объяснять не умеет и/или не хочет. Я уже пожелал ему удачи.

2 лайка