Стек или массив значений
- Войдите на сайт для отправки комментариев
Пт, 31/01/2014 - 00:16
Есть датчик температуры. Как выводить не только его текущие показания, но и те, что были 1, 5, 10 минут назад?
Вот мой код:
float tempSensorA = 0; // Текущая температура с датчика A float tempPrevA1; // Предыдущая температура с датчика A float tempPrevA2; // Пост-предыдущая температура с датчика A float tempPrevA3; // Пост-пост-предыдущая температура с датчика A long refresh = 2; // Интервал обновления текущих показаний, сек long interval1 = 1; // Интервал обновления предыдущих показаний, мин long interval2 = 5; // Интервал обновления пост-предыдущих показаний, мин long interval3 = 10; // Интервал обновления пост-пост-предыдущих показаний, мин long previousMillis1 = 0; long previousMillis2 = 0; long previousMillis3 = 0; void setup() { refresh = refresh * 1000; // переводим секунды в миллисекунды interval1 = interval1 * 60 *1000; // переводим минуты в миллисекунды interval2 = interval2 * 60 *1000; // переводим минуты в миллисекунды interval3 = interval3 * 60 *1000; // переводим минуты в миллисекунды tempPrevA1 = tempSensorA; tempPrevA2 = tempPrevA1; tempPrevA3 = tempPrevA2; } void loop() { unsigned long currentMillis = millis(); // этот блок работает корректно, раз в 2 сек показания обновляются if(currentMillis - previousMillis1 > refresh) { previousMillis1 = currentMillis; sensorTempRead(); // Опрос датчика температуры screenShowData(); // Вывод показаний датчиков } // а этот блок уже не работает if(currentMillis - previousMillis2 > interval1) previousMillis2 = previousMillis1; if(currentMillis - previousMillis3 > interval2) previousMillis3 = previousMillis2; }
Классический массив подразумевает в себе элементы:
tempSensorA[0]
,tempSensorA[1],
tempSensorA[2] ,
tempSensorA[3]...
С остальным - я бы навтыкал отладочный вывод значений
currentMillis previousMillis2 interval1
там, где "не работает" и посмотрел - что же там реально происходит...