Приветствую, коллеги.
По просьбе уважаемого читателя
I@COM - "
вы не могли бы растолковать на пальцах и примерах, как рисуются и выводятся графики и что для этого надо (голова закипает)" - излагаю...
На самом деле, я тоже долго ее (голову) "кипятил", прежде чем...
Итак.
1. Измеренные (полные) значения в формате "000.0" или "000" сохраняются в файлах на флешке.
2. Исторические значения - массивы за последние 25 часов и временная шкала - хранятся в обновляемом на флешке файле "history.dat" (обновляется раз в час) в усеченном формате - массивы типа
unsigned char, поскольку:
- на графиках все равно этих десятых долей не видно будет (1 пиксел - величина дискретная
),
- на одном графике изображать в одном масштабе давление на семь с лишним сотен и температуру на минус несколько десятков - никаких экранов не хватит
- да и память, вообще-то, экономить надо.
А посему (
кстати - все есть в комментариях как раз при объявлении этих массивов в главном модуле программы):
unsigned char bars_P[25] - массив разницы давлений между 700 мм.рт.ст. и текущими ежечасными давлениями - величина не более 100;
unsigned char bars_T0[25] и
unsigned char bars_T1[25] - температуры (внутр. и наружная), со смещением на +100 градусов, чтобы всегда была положительная величина, даже при -90 градусах будет +10;
unsigned char bars_H[25] - ну и влажность - целая 0...100%
unsigned char clock_scale[7] - а это шкала времени.
И в этом случае получается, что все эти усеченно-смещенные величины "укладываются на один и тот же график, имеющий по вертикали всего
80 единиц - температуру
-40...+40 градусов (у нас еще не было ниже и выше, хотя что будет в будущем... кто знает, кто знает), давление
710...790мм.рт.ст. (вполне достаточный диапазон, даже в самолетах ниже 710 не должно опускаться, иначе - некомфортно будет пассажирам) и влажность
20...100%
Естественно, имея по вертикали на дисплее 240 пикселов глупо было бы их не использовать, поэтому при отображении координаты всех точек (величины значений из массивов) умножаются на 2. Таким образом, графики занимают 160 пикселов по вертикали.
Раз в час при обновлении значений, поле, охватываемое сеткой графика, а также строка временнОй шкалы внизу стираются (заливаются черным цветом), заново рисуется сетка.
После этого все значения в массивах параметров сдвигаются влево на 1 позицию, в последние элементы с индексом [24] записываются новые, только что измеренные значения.
Также производится перерасчет - прибавляется "1" к значениям шкалы времени, естественно, с проверкой перехода через 24-часовой рубеж.
И вуаля - отображаются смещенные графики и новая шкала времени.
Маленькая хитрость для контроля - если между текущим временем (в значении часов) и последним членом массива clock_scale[6] разница более 1 часа - значит в файлы ничего не писалось - скорее всего, не было питания. Поэтому автоматически делается сдвиг всех исторических массивов на количество пропущенных часов, при этом в массивы параметров записываются нижние предельные величины, отображаемые на графике.
Поэтому на графиках будут видны провалы, соответствующие отсутствующим данным.
Эту же процедуру, похоже, надо сделать и для файлов полных значений - писать туда либо нули, либо минимальные значения измеряемых параметров.
Дополнительно: сейчас отображение часов и календаря (белый цвет) смещено вверх, ближе к графику, примерно на 14 пикселов и весь низ, до названия текущего дня недели занимают две горизонтальные шкалы скорости ветра: текущая скорость, измеряемая 1 раз в секунду, и усредненная за 64 секунды -
ведь у программиста и километр = 1024 метра, и минута = 64 секунды
Сетка шкалы - пока примерная, логарифмическая 0,5...50 м/с. Не калибровал - так, на глаз.
До записи в файл, как и до калибровки, тоже еще руки не дошли, но планирую усреднять еще за 64 минуты = 1 час, и записывать в файл эту среднюю величину, и максимум / минимум секундных замеров.
Вот, примерно,
"в таком плане, в таком разрезе, в таком масштабе", как говорил великий Аркадий Райкин.