Стек или массив значений
- Войдите на сайт для отправки комментариев
Пт, 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там, где "не работает" и посмотрел - что же там реально происходит...