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]»
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]»
+2
map() надо будет посмотреть.
stat[1][i] это массив времени, stat[d][i] как раз может быть, и 0, и любым другим числом. Это нужно как раз чтобы не учитывать ячейки где еще нет значения и они равны 0. Изначально строилось три разных графика. По трем показателям(массивам), и только время не может быть равно 0, остальное варьируется.
stat[1][i] это массив времени, stat[d][i] как раз может быть, и 0, и любым другим числом. Это нужно как раз чтобы не учитывать ячейки где еще нет значения и они равны 0. Изначально строилось три разных графика. По трем показателям(массивам), и только время не может быть равно 0, остальное варьируется.
«minx = 32767» ==> «minx = stat[d][0]»а если следующее значение больше, а если меньше? в моей версии все значимое гарантированно меньше
0
Да, не уследил логики со вторым массивом. С другой стороны, если нужна проверка на «реальность» значения, можно и само значение проверять, оно тоже ненулевое.
Если следующее меньше — само станет минимумом, если больше — оно нам не нужно. Можно за один перебор выбрать и минимум, и максимум:
Если следующее меньше — само станет минимумом, если больше — оно нам не нужно. Можно за один перебор выбрать и минимум, и максимум:
dmin = data[0];
dmax = data[0];
for(i=1; i<size; i++) {
dmin = min(dmin, data[i]);
dmax = max(dmax, data[i]);
}
+1
Значение может быть 0, это нормальное поведение. Например температура бывает 0.
а вот min() и max() тоже не видел, это упрощает да =-)
а вот min() и max() тоже не видел, это упрощает да =-)
0
Ну самый тривиальный вариант, если нас интересует только график (не статистика), при получении первого значения записать его в весь массив. Тогда весь график будет «рисовабелен» с первого такта. Если нужны прочерки — там да, вариант со временем или хотя бы массивом bool'ов.
Про функции — рекомендую глянуть www.arduino.cc/en/Reference/HomePage — там всё основное есть.
Про функции — рекомендую глянуть www.arduino.cc/en/Reference/HomePage — там всё основное есть.
0
функции уже посмотрел, удивило что вроде там же смотрел и не увидел =-((
получается можно выкинуть interval() и minimum() и оставить только grafik()
получается можно выкинуть 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))
}
}
0
не туда
0
Sign up to leave a comment.
Строим график на символьном дисплее 1602 Ардуино