Как добавить предыдущее значение к текущему значению датчика
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, и сохранить его в переменной.
Спасибо!
@Giddsec, 👍0
Обсуждение2 ответа
Лучший ответ:
Кстати, вы можете сделать изменчивые
переменные глобальными, поместив их выше 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,3 всякий раз, когда требуется результат?
советы += 1; // каждый раз ведро подсказывает.
и
Serial.println(0.3 * tips); // каждый раз, когда вы хотите получить результат
Просто чтобы добавить контекст к этому ответу: арифметика с плавающей запятой может быть на порядки медленнее, чем целочисленная арифметика на устройствах без FPU (например, многие Arduinos)., @Edgar Bonet
- Как увеличить скорость записи на SD-карту в Ардуино
- Онлайн-проблема подключения Arduino к базе данных MySQL
- Файловая система внешней флэш-памяти
- Суммировать значения, сохранить их и распечатать последнее значение
- ESP32 сохранение данных на SD-карту в формате .csv не форматируется правильно
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
- Где находится файл журнала Arduino IDE? Не Serial Monitor
- Файл журнала Arduino непосредственно в файл
привет, нет, это должно быть так, если он станет 0.6 от 0.3, следующий совет будет 0.9 и так далее., @Giddsec
Может быть, это только я, но я понятия не имею, что вы подразумеваете под "чаевыми". Не то чтобы это имело значение, я думаю, что у вас все равно есть эффективный ответ на ваш вопрос., @timemage