Фильтр мусора в скетче
- Войдите на сайт для отправки комментариев
Чт, 28/01/2016 - 09:36
Доброго всем дня. Вот написал скетч для управления двумя моторами с помощью ик-пульта. Работает всё нормально, но бывает глючит. Не правильно реагирует на кнопки или, бывает, вообще не реагирует. Причём в мониторе порта видно, что сигнал принят нормально. Мне попадалась где-то такая команда, как "фильтр мусора". По своему скудоумию я её себе не скопировал, теперь найти не могу. Вот вопрос теперь. Как выглядит это команда? Куда её лучше вставлять в этом скетче? Как вообще она работает? Нужна ли она в данном скетче? Сам скетч не слишком кривой для первого раза? Заранее спасибо.
#include <IRremote.h> int motor_1 = 4; // определяем порт для 1-го мотора int motor_2 = 5; // определяем порт для 2-го мотора int motor_3 = 6; // определяем порт для 1-го мотора назад int motor_4 = 7; // определяем порт для 2-го мотора назад int RECV_PIN = 11; // назначаем 11-ый вывод для подключения фотоприемника IRrecv irrecv(RECV_PIN); decode_results results; void setup() { pinMode(motor_1, OUTPUT); //определяем выводы на моторы как "выходы" pinMode(motor_2, OUTPUT); //определяем выводы на моторы как "выходы" pinMode(motor_3, OUTPUT); //определяем выводы на моторы как "выходы" pinMode(motor_4, OUTPUT); //определяем выводы на моторы как "выходы" Serial.begin(9600); // устанавливает скорость обмена данными с компьютером irrecv.enableIRIn(); // функция начала приема } void loop() { if (irrecv.decode(&results)) { // если сигнал принят Serial.println(results.value); // выводим его на экран компьютера if (results.value == 16718055) // если принятый код равен одному из запомненных нами (кнопка 2) { digitalWrite(motor_1,HIGH); // то включаем первый мотор digitalWrite(motor_2,HIGH); // и включаем второй мотор } if (results.value == 16726215) // если принятый код равен второму из запомненных нами (кнопка 5) { digitalWrite(motor_1,LOW); // то выключаем первый мотор digitalWrite(motor_2,LOW); // то выключаем первый мотор digitalWrite(motor_3,LOW); // то выключаем первый мотор назад digitalWrite(motor_4,LOW); // то выключаем первый мотор назад } if (results.value == 16716015) // если принятый код равен одному из запомненных нами (кнопка 4) { digitalWrite(motor_1,HIGH); // то включаем первый мотор digitalWrite(motor_2,LOW); // и выключаем второй мотор digitalWrite(motor_3,LOW); // то выключаем первый мотор назад digitalWrite(motor_4,LOW); // то выключаем первый мотор назад } if (results.value == 16734885) // если принятый код равен одному из запомненных нами (кнопка 6) { digitalWrite(motor_1,LOW); // то выключаем первый мотор digitalWrite(motor_2,HIGH); // и включаем второй мотор digitalWrite(motor_3,LOW); // то выключаем первый мотор назад digitalWrite(motor_4,LOW); // то выключаем первый мотор назад } if (results.value == 16730805) // если принятый код равен одному из запомненных нами (кнопка 8) { digitalWrite(motor_3,HIGH); // то включаем первый мотор назад digitalWrite(motor_4,HIGH); // и включаем второй мотор назад } irrecv.resume(); // ждем прием следующего сигнала } }
Увы, команды "фильтр мусора" не существует (((, хотя неплохо бы было... Скетч Ваш хорош, прост и понятен. Я бы ещё между 53-й и 54-й строкой небольшой delay() добавил бы.
так добавь сам. у тебя все значения одного порядка. простой фильтр от 16000000 до 17000000 грубо. если число в этом диапазоне то остальной код
Так вот вопрос, как такая команда выглядит? И куда в скетче её ставить? А на счёт delay(), везде пишут что она - зло. Что "учимся обходится без delay". Или delay в конце цикла даст ардуине с мыслями собраться?
после 20 строки
Ага, спасибо большое. Сейчас попробую.
Или delay в конце цикла даст ардуине с мыслями собраться?
Да, именно это я имел в виду.
Не, не получилось почему-то. Лучше оставлю, как есть, как бы хуже не было.
что значит не получилось? не работает как надо или вообще не работает?
код должен быть таким
С delay вроде стабильней стал работать. Погоняю - посмотрю. Большое спасибо.
jeka_tm вроде делал так, сейчас ещё попробую, может чего не доглядел.
Да, спасибо. Теперь работает.
ну вот. рано паниковать стал
на счёт delay(), везде пишут что она - зло.
Не, это "любовь зла", а delay() - он белый и пушистый.
Да дело в том, что на роботе у меня Arduino Nano стоит, а в ней загрузчика нету. Приходится через Uno скетчи заливать. С постоянным перетыканием проводов. И по запарке периодически "Вгрузить" с "Вгузить через программатор" путаю. Приходится ещё и IDE проверять, если не работает, правильно ли всё выставленно.
в нано? ты уверен что нано? путаешь чтото
Да дело в том, что на роботе у меня Arduino Nano стоит, а в ней загрузчика нету.
А куда он делся? Ну, прошейте, если нет. Прямо в IDE скажите "Записать загрузчик".
Arduino Nano v.3 FT232RL. Загрузчика не было сразу или слетает при подключении кабеля, а может дело в винде 7про*32. Через Uno загрузчик записал, но один хрен скетч через USB не льётся. При подключении Nano к USB, сразу определяется как СОМ8 без всяких бубнов (Uno - СОМ7). Долго уродовался, плюнул, пишу через ISP.
наивный. у тебя подделка ftdi. тут на форуме была инфа как победить. поищи
Неделю пробовал. Откатывал дрова на ftdi, смотрел pid - 6001, не нули. Плюнул на это дело и пишу через Uno.
тогда может брак или непропай
Вполне.