roboforum.ru

Технический форум по робототехнике.
Текущее время: 06 апр 2025, 08:45

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: проблема с энкодэром
СообщениеДобавлено: 11 апр 2013, 11:47 
Не в сети

Зарегистрирован: 11 апр 2013, 11:26
Сообщения: 4
Приветствую всех.
помогите разобраться, почему энкодэр который подключён к пину 2 ардуино, при проходе через прорезь инкриминирует больше 10 раз? второй работает нормально. местами их тоже менял.
Код:
long encoderL;
long encoderR;
void setup() {
  Serial.begin(9600);
  attachInterrupt(0, attachLeft, CHANGE);
  attachInterrupt(1, attachRight, CHANGE);
}
void loop ()
{
  Test();
}
void attachLeft()
{
  encoderL ++;
}
void attachRight()
{
  encoderR ++;
}
//*************************************
void Test(){
Serial.print(encoderL);
Serial.print("      ");
Serial.println(encoderR);
}


Вложения:
DSCF3839.JPG
DSCF3839.JPG [ 3.65 МиБ | Просмотров: 2168 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 11 апр 2013, 12:34 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
друг дружку не засвечивают? попробуй расположить немного под другим углом или добавь в программу обработку дребезга контактов

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 11 апр 2013, 12:53 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
дребезг....

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 11 апр 2013, 13:47 
Не в сети

Зарегистрирован: 11 апр 2013, 11:26
Сообщения: 4
нет, не зазвечивает. пробывал добавлять задержку
void attachLeft()
{
encoderL ++;
delay(50);
}
Interrupt 1 срабатывает чётко. А как обработать дребезг в интеррупте?

Вычитал "Внутри функции обработки прерывания не работает delay(),"

Добавлено спустя 43 минуты 15 секунд:
если так(с флагами) -то тоже самое
Код:
long encoderL, encoderR;
byte encFlagL, encFlagR;
void setup() {
  Serial.begin(9600);
  attachInterrupt(0, attachLeft, RISING);
  attachInterrupt(1, attachRight, RISING);
}
void loop ()
{
  if (encFlagL==1){
    delay(100);
    encoderL ++;
    encFlagL=0;
  }
  if (encFlagR==1){
    encoderR ++;
    encFlagR=0;
  }
  Test();
}
void attachLeft()
{
  encFlagL=1;
}
void attachRight()
{
  encFlagR=1;
}
//*************************************
void Test(){
  Serial.print(encoderL);
  Serial.print("      ");
  Serial.println(encoderR);
}



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 11 апр 2013, 15:34 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
У тебя же квадратурный энкодер? Тогда ты его неправильно опрашиваешь. А если не квадратурный, то всегда будет дребезг и не избавишься ты от него.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 11 апр 2013, 15:58 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
у него 2 обычных рядышком.
но у одного почему-то отсутствует дребезг )))

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 11 апр 2013, 16:04 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
а, в смысле пост читать надо что ли? ок, сейчас.

Добавлено спустя 4 минуты 52 секунды:
http://arduino.cc/forum/index.php?PHPSE ... 057.0.html ???

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 13 апр 2013, 01:08 
Не в сети

Зарегистрирован: 11 апр 2013, 11:26
Сообщения: 4
to dccharacter.
спаибо за ссылку но там про leonardo, а у меня duemilanove(и arduino 1,0,1).

Вот такие знкодеры- http://www.ebay.co.uk/itm/360568248868?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649
Отключал по очереди int0 и int1, но дребезг только на int0 (pin2).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проблема с энкодэром
СообщениеДобавлено: 23 апр 2013, 13:28 
Не в сети

Зарегистрирован: 11 апр 2013, 11:26
Сообщения: 4
Если кому пригодиться, то получилось вот так--
Код:
long encoderL=0;
long encoderR=0;
volatile int encFlagL=0;
volatile int encFlagR=0;
void setup() {
  Serial.begin(9600);
  attachInterrupt(0, attachLeft, FALLING);
  attachInterrupt(1, attachRight, FALLING);
}
void loop ()
{
  noInterrupts();
  if (encFlagL){
    encoderL ++;
    encFlagL=0;
  }
  if (encFlagR){
    encoderR ++;
    encFlagR=0;
  }
  // delay(10);
  interrupts();
  Test();
}
void attachLeft()
{
  encFlagL=1;
}
void attachRight()
{
  encFlagR=1;
}
//*************************************
void Test(){
  Serial.print(encoderL);
  Serial.print("      ");
  Serial.println(encoderR);
}




Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO