Энкодер из мышки.
- Войдите на сайт для отправки комментариев
Чт, 23/06/2016 - 22:07
Пытаюсь считать кол-во прерываний. Вот время одного препятствия происходит множество ложных срабатываний.
А как заставить программу увеличить переменную на 1 и ОЖИДАТЬ,пока не уберу препятствие?
Код:
#include <SoftwareSerial.h>
int pin = 3;
unsigned int encoder = 0;//начальное значение шагов энкодера
int X;
void setup()
{
pinMode(pin, INPUT);
attachInterrupt(1,Probeg,CHANGE);
Serial.begin(9600);
}
void loop()
{
}
void Probeg() //пробег
{
X=digitalRead(pin);
if (X == LOW){
encoder = encoder+1;
Serial.println(encoder);
Serial.println("LOW");
}
else if (X == HIGH) {
encoder = encoder+1;
Serial.println(encoder);
Serial.println("HIGH");
}
else
{
Serial.println("ERROR");
}
}
Куча значений вывелось во время одного и того же препятствия. Может это аппаратный вопрос?
Приведённый код можно сократить, убрав ненужные условия:
#include <SoftwareSerial.h> int pin = 3; unsigned int encoder = 0;//начальное значение шагов энкодера int X; void setup() { pinMode(pin, INPUT); attachInterrupt(1,Probeg,CHANGE); Serial.begin(9600); } void loop() { } void Probeg() //пробег { X=digitalRead(pin); encoder++; Serial.println(encoder); Serial.println(X == HIGH ? "High" : "Low"); }Теперь, если с этим разобрались - какие именно проблемы? Вам надо, чтобы прерывание срабатывало по изменению фронта? Чтобы срабатывало однократно? Чтобы вообще не срабатывало? Что значит "пока не уберу препятствие"? Постарайтесь донести свою мысль в более понятной форме, пожалуйста.
Куча значений вывелось во время одного и того же препятствия. Может это аппаратный вопрос?
Нет, куча значений вывелось во время многократного срабатывания прерывания по изменению фронта. Почему фронт менялся так часто? Так это уже аппаратный вопрос ;)
Спасибо! Изменения с High на Low происходили многократно только во время препятствия. Потом отключил пин от Ардуинки,и COM порт стал выдавать значения постоянно,без остановки. Я думаю,что фототранзистор от комп. мышки слишком чувствительный и стоит поискать ему замену.
+ иногда выводятся 2 раза подряд Low или High(а бывает,что и по 10 раз подряд!)
Если есть варианты,посоветуйте пожалуйста,какой приемник подходит для этой задачи.
слишком чувствительный и стоит поискать ему замену.
зачем же сразу к хирургу, сначала к терапевту сходите. подтяжку резистора к ноге пин включите записав туда 1 между 10 и 11 строками. или внешнее подтягивающее можно 4,7K куды хотите +- но правьте тогда прерывания по спаду или возрастанию.