Что произойдет со значением счетчика, если не ввести оператор (если предыдущее состояние! = текущее состояние)

Я ссылаюсь на код с этой страницы: http://www.toddholoubek.com/classes/pcomp/?page_id=58 :

int ledPin = 13; // выберите вывод для светодиода
int switchPin =2; // выберите входной вывод (для кнопки)
int val = 0; // переменная для считывания состояния вывода
int counter = 0;
int currentState = 0;
int previousState = 0;

void setup() {
  pinMode(ledPin, OUTPUT); // объявить СВЕТОДИОД как выходной
  pinMode(switchPin, INPUT); // объявить кнопку как вход
  Serial.begin(9600);
}

void loop() {
  val = digitalRead(switchPin); // считывать входное значение
  if (val == HIGH) { // проверьте, является ли входной сигнал ВЫСОКИМ (кнопка отпущена)
    digitalWrite(ledPin, HIGH); // включить светодиод
    currentState = 1;
  }
  else {
    digitalWrite(ledPin, LOW); // выключить светодиод
    currentState = 0;
  }
  if(currentState != previousState) {
    if(currentState == 1) {
      counter = counter + 1;
      Serial.println(counter);
    }
  }
  previousState = currentState;
  delay(250);
}

У меня нет устройства Arduino, поэтому в настоящее время я не могу проверить результат, но мне интересно узнать, пропустил ли я эту строку:

if(currentState != previousState)

, используя командную строку

if(currentState == 1) {
counter = counter + 1;

только и допустим, я использую волоконно-оптический датчик FS-V21 для подсчета количества продуктов длиной 1 м каждый и на конвейерной ленте со скоростью 0,1 м / с, поэтому статистика будет верна для t = 1/0,1 = 10секунд для каждого продукта.

Увеличится ли значение счетчика только на одну единицу для каждого продукта (произойдет только на границе перехода) или увеличится на неопределенный срок в течение 10 секунд?

, 👍1


2 ответа


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

1

Из - за линии

delay(250);

ближе к концу функции loop() она будет отсчитываться один раз каждые четверть секунды все время, пока "состояние" равно 1.

Это означает, что за 10-секундный период он будет насчитывать 40 объектов.

,

1

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

Линия, которую вы хотите пропустить, очень важна, она позволяет скетчу определять только края, а не уровни.

,