Как заставить функцию не считать сумму если нет изменений?

Zero-Botanik
Zero-Botanik аватар
Offline
Зарегистрирован: 02.11.2019

Привет всем.

Считаю импульсы в прерываниях, умножаю.
Сумму постоянно вывожу на экран (вывода нет  в коде).

const uint8_t impPin = PE5;
volatile uint8_t imp = 0;
uint8_t coef;

void setup() {
  pinMode(impPin, INPUT_PULLUP);
  attachInterrupt(1, countPulse, FALLING);
}

void loop() {
  calculateSum();
}

void countPulse() {
  ++imp;
}

uint16_t calculateSum() {
  sum = imp * coef;
  return sum;
}

Вопрос: хочу чтобы цикл loop ничего не делал, если нет изменений.

В данном случае он постоянно вычисляет сумму. 
А зачем если ничего не изменилось.
Нужно проверять изменились ли импульсы.
В прерывании это делать нехорошо.
А в самом цикле проверять, количество операций только увеличивать, еще больше времени тратить.

Я придумал проблему, которой нет?
Пусть молотит?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а то!

Zero-Botanik
Zero-Botanik аватар
Offline
Зарегистрирован: 02.11.2019

Спасибо )

sadman41
Offline
Зарегистрирован: 19.10.2016


...
void countPulse() {
  ++imp;
  catched = true
}

uint16_t calculateSum() {
  if (!catched) return;
  catched = false;
  sum = imp * coef;
  return sum;
}
...

 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:



...
void countPulse() {
  ++imp;
  catched = true
}

uint16_t calculateSum() {
  if (!catched) return;
  catched = false;
  sum = imp * coef;
  return sum;
}
...

это в теории правильно, а для конкретно его случая инкремент на единицу, надо ли - вопрос, как мне кажется там всего одна машинная команда, нет???

sadman41
Offline
Зарегистрирован: 19.10.2016

"Сумму постоянно вывожу на экран (вывода нет  в коде)."

Начнет выводить - спасибо скажет за флажок.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

"Сумму постоянно вывожу на экран (вывода нет  в коде)."

Начнет выводить - спасибо скажет за флажок.

это да!!!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А coef почему не задан?))

Zero-Botanik
Zero-Botanik аватар
Offline
Зарегистрирован: 02.11.2019

sadman41 пишет:



...
void countPulse() {
  ++imp;
  catched = true
}

uint16_t calculateSum() {
  if (!catched) return;
  catched = false;
  sum = imp * coef;
  return sum;
}
...

нормально )

 

Zero-Botanik
Zero-Botanik аватар
Offline
Зарегистрирован: 02.11.2019

sadman41 пишет:

"Сумму постоянно вывожу на экран (вывода нет  в коде)."

Начнет выводить - спасибо скажет за флажок.

 

Вывожу через семисегментники со сдвигом, там-то я проверяю.

Удобно, что если сумма не поменялась - цифры так и горят, те что были. Можно еще раз не выводить специально. Но с этим флажком можно один раз проверять, а не два.

Точно спасибо :)