Алгоритм зависимости переменной от времени суток. Как сделать матрицу времени

Тема в разделе "Arduino & Shields", создана пользователем ArcticBear, 3 дек 2015.

  1. ArcticBear

    ArcticBear Нерд

    Приветствую!

    Мужики, ну голова ... вскипает. Как реализовать образно говоря матрицу времени, в которой в разное время у переменной Х разное значение, согласно таблице?

    Например
    в 01:00 х=23
    в 01:30 х=23,5
    в 05:00 х=20 и так на протяжении суток ... с шагом в пол часа ...

    подкиньте идею как это грамотно реализовать? хотя бы костяк идеи ...
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    шаг счисления времени - полчаса?
    Создаешь одномерную матрицу размерностью float, где 1-й элемент
    m[0]=t0 (значение температуры для 00:00),
    m10]=t1 (значение температуры для 00:30) и т.д.

    Тогда получаем автоматом:
    для времени 01:00 - это m[2]=23,
    для времени 01:30 - это m[3]=23.5,
    для времени 05:00 - это m[10]=20.
     
    ArcticBear нравится это.
  3. DrProg

    DrProg Вечный нерд

    Одну общую переменную Х, куда каждые полчаса записывать значение из соответствующего элемента массива.
     
    ИгорьК нравится это.
  4. ArcticBear

    ArcticBear Нерд

    Сижу думаю как грамотно преобразовать время в номер ячейки в массиве?
    например 01:12 мне должно выдать 3 номер йчейки
    02:22 5 ячейку ...
    сижу думаю ... если кто то быстрее додумается, буду рад помощи

    спасибо за советы выше.
    p.s. hh & mm это две переменные int
     
  5. DrProg

    DrProg Вечный нерд

    swith case
     
    ИгорьК нравится это.
  6. ArcticBear

    ArcticBear Нерд

    Как то не красиво

    Предлагается так
    hh*60+mm и потом делим 30 получаем число, которое округлив в большую сторону = номер ячейки.
    как такой вариант?
     
    Tomasina нравится это.
  7. Tomasina

    Tomasina Сушитель лампочек Модератор

    округлять как раз не надо, по умолчанию дробная часть отбрасывается и получается именно то что надо:
    Код (C++):
    #define PERIOD 30
    #define ITEMS 48
    float m[ITEMS] = {23.0, 23.2, ...}

    setup{}

    loop
    {
      byte tt = (byte)(((hh * 60 + mm) / PERIOD);
      float x = m[tt];
    }
    int это много, достаточно byte, ведь каждая из них не превышает 255.
     
    ArcticBear нравится это.
  8. ArcticBear

    ArcticBear Нерд

    Например
    1*60=60, 60+12=72
    72\30=2.4 ...
    1 час 12 минут это 3я ячейка

    а что получится без округления?2 или 3? или тут фокус что массив начинается с 0?
     
  9. Tomasina

    Tomasina Сушитель лампочек Модератор

    конечно, первый индекс массива нулевой.
     
  10. Sindbad

    Sindbad Гик

    Зачем массив? Нужный результат получаем по формуле:

    int hh,mm,k
    float x
    ...........
    k=mm/30
    x=24-hh + k*0.5
     
  11. Tomasina

    Tomasina Сушитель лампочек Модератор

    если распределение температур равномерно линейное то можно и без массива.
     
  12. ArcticBear

    ArcticBear Нерд

    Массив для того, чтобы переменная Х имела в сутках 48 произвольных float значений.
    Всем огромное спасибо за помощь.
     
  13. Sindbad

    Sindbad Гик

    Хм. Термин температура типикастер не использовал. По-моему речь о времени и только о времени.
     
  14. Sindbad

    Sindbad Гик

    Вот именно это предложенная формула и обеспечивает.
    целочисленное деление минут на тридцать дает всегда либо 0, либо 1. Умножаем результат на 0,5 и прибавляем инвертированное количество часов.
     
  15. ArcticBear

    ArcticBear Нерд

    Извините, но я не понял Вашего предложения. Если можно напишите более развернуто ... Или с примером.

    Задача как я говорил выше задавать контроллеру 48 разных значений температуры в сутки, и далее управлять нагревателем.
     
  16. Sindbad

    Sindbad Гик

    Ага. Это я не понял сути задачи. По первому сообщению получалось что нужно находить х как функцию от времени.