Что произойдет со значением счетчика, если не ввести оператор (если предыдущее состояние! = текущее состояние)
Я ссылаюсь на код с этой страницы: 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 секунд?
@chuackt, 👍1
2 ответа
Лучший ответ:
Из - за линии
delay(250);
ближе к концу функции loop()
она будет отсчитываться один раз каждые четверть секунды все время, пока "состояние" равно 1.
Это означает, что за 10-секундный период он будет насчитывать 40 объектов.
Нет, он будет увеличиваться до тех пор, пока существует продукт и с той частотой, с которой выполняется ваш цикл. Таким образом, когда свет прерывается, он будет считать несколько объектов в течение секунды.
Линия, которую вы хотите пропустить, очень важна, она позволяет скетчу определять только края, а не уровни.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату