Motor Shield v3 подключение TSOP
- Войдите на сайт для отправки комментариев
Чт, 24/01/2013 - 12:21
Помогите разобраться пожалуйсто.Купил Motor Shield v3 подключил к Ардуино Uno залил приложенный внизу скетч мониторинг порта выводит все действия, но мотор не запускается.Почему?
// Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
#include <AFMotor.h>
#include <IRremote.h>
int RECV_PIN = 14;
IRrecv irrecv(RECV_PIN);
decode_results results;
AF_DCMotor motor(1);
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");
irrecv.enableIRIn(); // Start the receiver
// turn on motor
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
if (results.value == 0xFFDA25){
uint8_t i;
Serial.print("tick");
motor.run(FORWARD);
for (i=0; i<255; i++) {
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
motor.setSpeed(i);
delay(10);
}
Serial.print("tock");
motor.run(BACKWARD);
for (i=0; i<255; i++) {
motor.setSpeed(i);
delay(10);
}
for (i=255; i!=0; i--) {
motor.setSpeed(i);
delay(10);
}
Serial.print("tech");
motor.run(RELEASE);
delay(1000);}
irrecv.resume(); // Receive the next value
}
}
Причин может быть много. И почему вы решили что дело к коде, выбрав этот раздел форума...
0. Что за шилд? Описание на него есть? Они разные бывают.
1. Вы внешнее питание к шилду подключили?
2. Куда подключили?
3. Что за мотор?
4. Куда мотор подключили?
Так же посмотрите как правильно всталять код в сообщение.
написал же Motor Shield v3
подключил движек от какой то радиоуправляемой игрушки к контактам M1.Он работает в тестовом режими скетч которого идет с библиотекой http://www.ladyada.net/make/mshield/download.html на данный шилд.Питание шилда идет от платы ардуино которая запитана блокм питания 5 V
написал же Motor Shield v3
подключил движек от какой то радиоуправляемой игрушки к контактам M1.Он работает в тестовом режими скетч которого идет с библиотекой http://www.ladyada.net/make/mshield/download.html на данный шилд.Питание шилда идет от платы ардуино которая запитана блокм питания 5 V
Arduino Motor Shield V3
Motor Shield v3
А то что у вас на картинке это вообще Motor Shield v2 так что если спрашивают, то не просто так.
Перемычка в каком RWR Sel в каком положении стоит? в Ext или Ard?
в правом
тестовый режим работает отлично
Значит не работает ИК-приемник или пульт.
по поводу шилда у меня 3 версия,картинку не ту выложил просто
конечно
ик работает на терминале выводятся все значения полученные с пульта,а так же отоброжается процец начало разгона и торможения
Так, давайте по порядку - как и куда подключаете ИК приемник и каким пультом пользуетесь?
UPD: вот опять вопрос позже чем ответ.
Проверьте так работает?
ик сначало подключил ко второму пину потом уже нерекинул на 14 (аналоговый 0), пульт от проигрывателя mystery MDV-729U.tsop 2238 снять с проигрывателя самсунг подключен к питанию средней ногой 5v, правая нога gnd платы шилда левая соответственно сигнал на 14 пине
Если работает, то проверьте работает ли так
обычный тестовый режим вот наблюдаю разгон и замедление
И первый и второй примеры работают?
я так понимаю разница состоит во включении ик?в этот раз не пошло!
вот убрал включение ик и работает
AF_DCMotor motor(4); у меня мотор на первомAF_DCMotor motor(1);
В общем вы были правы, дело именно в программной части, дело в несовместимости библиотек, так как у вас УНО они обе используют TIMER1. Так как обе библиотеки используют 16-битный таймер, а у Уны он один, то просто сменить в одной из библиотек номер таймера думаю не получится, поэтому вам нужно либо отказаться от использования от одной из библиотек, либо найти/переписать библиотеку под 8-битный таймер.
хм не лучшая перспектива.а в принципе наверно можно напряму обращаться к пинам которые управляют шилдам?я нуб в програмирование и чаще жму ctrl/c/v ))
большое спасибо
хм не лучшая перспектива.а в принципе наверно можно напряму обращаться к пинам которые управляют шилдам?я нуб в програмирование и чаще жму ctrl/c/v ))
Направление двигателей задается через сдвиговый регистр, а скорость ШИМом (по-моему 9 и 10 вывод), но если вы будете искользовать функцию analogWrite(), то двигатели будут пищать на неполных оборотах, поэтому лучше таймер пожертвовать на управление двигателями. Я бы на вашем месте написал код для демодуляции и дешифровки ИК-сигнала, использовав внешнее прерывание и функцию micros(). Но решать вам, что для вас приорететнее или проще реализуемо.
При использовании таймера1 пользоваться analogWrite() на этих пинах уже нельзя.
Посмотрел исходники. Для М1 М2 используется TIMER2, для М3 и М4 - TIMER0 (Для случая УНО и подобных, на МЕГЕ - другие) На сколько мне помнится, IRremote использует TIMER2. Так что можно попробовать пользоваться только М3 и М4 и инициализировать пульт после моторов. Ну или заремарить TIMER2 в библиотеке (и все равно забить на М1 и М2)
Да ,точно, на 9 и 10 выводах воспользоваться функцией analogWrite() не получится, после того как проинициализируете IRremote. Так что лучше еще один аргумент что бы отказаться от библиотеки IRremote.
Да, точно. Посмотрел исходник IRremote - используется TIMER2 и весьма непросто ее переписать на другой таймер. Так что только 2 мотора или один шаговик.
Действительно, TIMER2
хотя всегда думал, что первый.
Как все сложно.На M(3) заработало.А шаговый только на эти же клемы посадить можно?
А в принцепи можно как то выключать библиотеку на время а потом включать или я чушь несу?
Да, шаговик тоже только на М3 и М4.
Попеременно таймер можно использовать, только как это поможет?
допустим понадобится использовать шаговик не упровляемый пультом
отключать именно таймер надо или все же библиотеку?
Нет, всю библиотеку не нужно. Библиотека не захватывает таймер, пока Вы не объявляете объект типа мотор или шаговик, которому этот таймер нужен. Так что нужно удалить объект IRremote, потом объявить мотор. И наоборот. Может можно и не удалять, но, боюсь, это будет неправильно.
Так что библиотеки и таймеры не надо отключать, надо "дестроить" объекты, их использующие.
Действительно, TIMER2
хотя всегда думал, что первый.
У нас еще и библиотеки разные, у меня жестко timer2. У меня такая:
то есть при необходимости отключить програмным путем датчик?
irrecv.enableIRIn(); // Start the receiver
irrecv.disabledIRIn();\\это отключит ик?
disabledIRIn() - такой функции нет (я не нашел).
enableIRIn() - как раз захватывает таймер. Да, включит.
а как тогда его отключить ?
Да, собственно, никак... Объявляете AF_DCMotor myMotor(1);
и все! Таймер перехвачен. Приемник перестает работать. Точнее, не перестает, но не принимает, потому что настройки таймера уже другие.
Вот что я нашел в либе IRremote
а значит она может работать и с 16-битным таймером.
В общем делаете так - находите файл arduino\libraries\IRremote\IRremoteInt.h, открываете его (например с помощью WordPad), находите строки:
и делаете так:
После данных манипуляций перезапускаете ArduinoIDE и пробуете, теперь IRremote должна использовать TIMER1, а AFMotor таймеры TIMER0 и TIMER2.
не нашел
Скачайте вот эту либу. Только переименуйте папку Arduino-IRremote-master в IRremote.
она уже измененная по таймеру?
Нет, в ней есть те строки, которые вы не нашли в своей.
мне свою библиотеку заменить этой?
Конечно.
совместил пару программ
Скачайте вот эту либу. Только переименуйте папку Arduino-IRremote-master в IRremote.
Прошу прощения, скачал по ссылке. Указанных строк тоже не нахожу...
За все эти долгие годы придумано, как подружить IRRemote и Tone?
Эти строки находятся в файле boarddefs.h