Как добавить предыдущее значение к текущему значению датчика

const byte interruptPin = 4;
void ICACHE_RAM_ATTR count();
void setup() {
  Serial.begin(115200);

  // Настройте наш цифровой PIN
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), count, RISING);
}

void loop() {

}

void count() {
  volatile float rainrate = 3;
  volatile float rate;
  volatile float total;

  rate = rainrate * 0.1; 
  Serial.println(rate);

Каждый раз, когда он подсказывает, он возвращает 0.3. Как добавить предыдущее значение(0.3) к новому подсказке, чтобы сделать его 0.6, и сохранить его в переменной.

Спасибо!

, 👍0

Обсуждение

привет, нет, это должно быть так, если он станет 0.6 от 0.3, следующий совет будет 0.9 и так далее., @Giddsec

Может быть, это только я, но я понятия не имею, что вы подразумеваете под "чаевыми". Не то чтобы это имело значение, я думаю, что у вас все равно есть эффективный ответ на ваш вопрос., @timemage


2 ответа


Лучший ответ:

0

Кстати, вы можете сделать изменчивые переменные глобальными, поместив их выше void Setup.

Чтобы поместить общее (новое) значение, используйте:

total += <sensorValue>;

где <sensorValue> - это вызов для получения значения sensorValue (или значения, в котором хранится значение датчика), но я не вижу этого в вашем скетче.

total += 0.3;

это то же самое, что написать:

total = total + 0.3;

Значение справа от знака "="копируется (присваивается) левой части знака"=".

,

Привет, все работает. но я думаю, что с моим кодом что-то не так, потому что он выводит двойное значение. когда я наклоняю геркон своего опрокидывающего ковша, он выдает значение 0.3, 0.6, а затем останавливается, следующий наконечник будет 0.9, 1.20., @Giddsec

Arduino не делает разницы между double или float. Я не совсем понимаю, что вы имеете в виду, когда он останавливается на 0.6. Переменная "total" должна увеличиваться каждый раз, когда она (то, что вы называете) "опрокидывается"., @Michel Keijzers

@Giddsec Я подозреваю, что вы страдаете от "button bounce" - google "arduino debounce" для помощи., @Majenko

Все работает, большое вам спасибо! :), @Giddsec

Добро пожаловать; если это помогло вам, пожалуйста, поддержите ответ, если ответ дал лучший ответ, примите его (используя галочку рядом с вопросом). Успех вашего проекта., @Michel Keijzers


0

Зачем утруждать себя этой арифметикой на каждом чаевом, когда вы можете просто считать чаевые и умножать их на 0,3 всякий раз, когда требуется результат?

советы += 1; // каждый раз ведро подсказывает.

и

Serial.println(0.3 * tips); // каждый раз, когда вы хотите получить результат

,

Просто чтобы добавить контекст к этому ответу: арифметика с плавающей запятой может быть на порядки медленнее, чем целочисленная арифметика на устройствах без FPU (например, многие Arduinos)., @Edgar Bonet