Pull to refresh

Comments 9

В последнем куске кода можно использовать функцию map() вместо этажерки if'ов:
lcd.printByte(map(stat[x][i], minx, minx+intx*8, 7, 0))
Ну и естественно вместо intx станет логичнее считать maxx

«i = i + y» ==> «i += y»

if (stat[1][i] != 0) { //если значение не ноль <== тут явно просится stat[d][i]
if (stat[d][i] < minx)

«minx = 32767» ==> «minx = stat[d][0]»
map() надо будет посмотреть.
stat[1][i] это массив времени, stat[d][i] как раз может быть, и 0, и любым другим числом. Это нужно как раз чтобы не учитывать ячейки где еще нет значения и они равны 0. Изначально строилось три разных графика. По трем показателям(массивам), и только время не может быть равно 0, остальное варьируется.
«minx = 32767» ==> «minx = stat[d][0]»
а если следующее значение больше, а если меньше? в моей версии все значимое гарантированно меньше
Да, не уследил логики со вторым массивом. С другой стороны, если нужна проверка на «реальность» значения, можно и само значение проверять, оно тоже ненулевое.

Если следующее меньше — само станет минимумом, если больше — оно нам не нужно. Можно за один перебор выбрать и минимум, и максимум:
dmin = data[0];
dmax = data[0];
for(i=1; i<size; i++) {
  dmin = min(dmin, data[i]);
  dmax = max(dmax, data[i]);
}
Значение может быть 0, это нормальное поведение. Например температура бывает 0.
а вот min() и max() тоже не видел, это упрощает да =-)
Ну самый тривиальный вариант, если нас интересует только график (не статистика), при получении первого значения записать его в весь массив. Тогда весь график будет «рисовабелен» с первого такта. Если нужны прочерки — там да, вариант со временем или хотя бы массивом bool'ов.

Про функции — рекомендую глянуть www.arduino.cc/en/Reference/HomePage — там всё основное есть.
функции уже посмотрел, удивило что вроде там же смотрел и не увидел =-((

получается можно выкинуть interval() и minimum() и оставить только grafik()
void grafik(int x, int y, int z) {
        lcd.setCursor(0, 1);
        lcd.print("Dav");
        
           int minx = stat[x][0];
           int maxy = stat[x][0];
            for(int i=z; i<=24; i++) {
              minx = min(minx, stat[x][i]);
              maxy = max(maxy, stat[x][i]);
            }
           for (int i=z; i <= 24; i= i + y){
              if (stat[1][i] == 0){
                lcd.print("-");                                   //если значений нет
              } else {
           lcd.printByte(map(stat[x][i], minx, maxy, 7, 0))
        }
         
  }
Да, уже намного проще читать.
Про i += y из моего первого комментария еще напомню.
Sign up to leave a comment.

Articles