Программа для ИК пульта
- Войдите на сайт для отправки комментариев
Втр, 14/08/2018 - 20:14
Здравствуйте. Передо мной встала не очень стандартная задача - нужно сделать ИК пульт для фотоаппарата на ардуино. Сложность для меня в том, чтобы выставить частоту заполнения (несущую частоту) в 38.4 КГц. Представляю, что это можно сделать с помощью ШИМ, но не понимаю как именно. Так вот, программа должна включать ИК светодиод, моргающий с такой частотой на определенные промежутки времени. Вопрос: как это реализовать? Может быть делать такой проект на ардуино нецелесообразно, но других вариантов для меня сейчас нет, так что сильно не ругайтесь.
Здравствуйте. Передо мной встала не очень стандартная задача - нужно сделать ИК пульт для фотоаппарата на ардуино. Сложность для меня в том, чтобы выставить частоту заполнения (несущую частоту) в 38.4 КГц. Представляю, что это можно сделать с помощью ШИМ, но не понимаю как именно. Так вот, программа должна включать ИК светодиод, моргающий с такой частотой на определенные промежутки времени. Вопрос: как это реализовать?
Пробовал набрать в гугле "ик-пульт на ардуино" или что-то близкое? и получить тысячи готовых решений твоей сверхоригинальной нестандартной задачи?
вы бы более подробно и внятно описали свою задачу в разделе "Ищу исполнителя".
там хоть за денежку кто то, может быть, возмётся.
не забудьте указать контактные данные.
в этом разделе для вас будет только флуд или стёб.
Замечу, я не прошу написать программу, это я сделаю самостоятельно. Я лишь прошу подсказать, как можно выставить такую частоту 38.4КГц.
Вот здесь есть обязснения, примеры и скетч калькулятора частоты - http://arduino.ru/forum/programmirovanie/etyudy-dlya-nachinayushchikh-blink-i-bez-delay-i-bez-millis
Ну если я пишу на форум, значит пробовал и не нашел. Там одни ИК модули с пультами и программы с библиотекой IRremote. Я попробовал с tone но не могу выключить светодиод, то есть он моргает постоянно с частотой 38400Гц. Пробовал noTone на другой пин - не помогает.
Вот код на спуск затвора. Что тут не так?
чего вам пришла идея подавть noTone() на другой пин?? - чтобы выключить, надо подавать на тот же.
Кроме того, что это за дробные делеи у вас в скетче? Делеи могут быть только целыми, как и длительность сигнала Tone(третий параметр в скобках)
Кроме использования нецелых чисел и разных пинов, разве tone() приостанавливает выполнение программы??? У вас сразу после tone() следует noTone().
Значит я не так понял описание команда tone. Написано, что noTone прекращает подачу сигнала на пин. А почему дилеи дробные, показано на картинке. Не знаю, как по другому сделать.
А почему дилеи дробные, показано на картинке. Не знаю, как по другому сделать.
Tone не умеет работать с дробными длительностями, так что эта функция для ваших целей не подойдет. Вам придется писать генератор 38.4 КГц самому - посмотрите ссылку, которую выше давал ЕвгенийП
Я и по этой схеме пробовал. Та же проблема. Горит постоянно. Частоту я настроить смог, но видимо дробные дилеи всё портят.
delay() не могут быть дробными, только целые числа в миллисекундах. Если нужно разрешение меньше миллисекунды, для этого есть delayMicroseconds() в микроосекундах.
delay() не подойдет, но подойдет delayMicroseconds() и вызывать tone() без указания длительности, а глушить его noTone(), опять же используя для указания задержки delayMicroseconds(). Для длинных пауз (длиннее 16 мс) попробовать воспользоваться комбинацией из delay() и delayMicroseconds().
похоже, что вы не поняли статьи Евгения по ссылке. Зачем вы в loop() включаете и выключаете пин 9? - Пин 9 у вас управляется таймером, сконфигурированным в setup и меняет значения с частотой 38 КГц. А вы в него digitalWrite тычете...
Чтобы прекратить генерацию сигнала таймером, нужно переключить его режим.
Отключить генерацию - TCCR1A = 0x00;
включить обратно - снова TCCR1A = 0x40;
Для того, чтобы задавать задержки, некратные миллисекундам - есть функция delaymicroseconds()
А почему дилеи дробные, показано на картинке. Не знаю, как по другому сделать.
Tone не умеет работать с дробными длительностями, так что эта функция для ваших целей не подойдет. Вам придется писать генератор 38.4 КГц самому - посмотрите ссылку, которую выше давал ЕвгенийП
и ещё: если ТС с tone() не справляется, этично ли предлагать ему "TCCR1A &= ~0xC0" ?
Спасибо всем, кто помог! Проблема решена, камера реагирует. На всякий случай выкладываю код, может кому-нибудь понадобится. Подходит для всех аппаратов марки Nikon, имеющих ИК порты. Код только на спуск затвора (с фокусировкой).