Конфликт библиотек
- Войдите на сайт для отправки комментариев
Ср, 13/09/2017 - 00:47
Доброго времени суток уважаемые знатоки.
В освоении ардуино , я зеленый новичек, поэтому прошу отнестись к моим попыткам освоить ардуинку ,снисходительно и не закидывать помидорами сразу. Пытаюсь соединить два кода,но уперся в стенку, помогите расшевилить кирпичики.
И так вот начало кода
#include <AFMotor.h> #include <Servo.h> #include <SoftwareSerial.h> #include <DFPlayer_Mini_Mp3.h> SoftwareSerial BTSerial(15,16); SoftwareSerial mySerial(14,2);
Конфликт между AFMotor.h и DFPlayer_Mini_Mp3.h, пока нет инициализации двигателей все работает, но кск только движки прописаны плеер перестает реагировать на команды блютуза. Пожалуйста подскажите куда смотреть и копать.Как я понимаю загвоздка в Serial.
Зарание благодарю.
Dfplayer прекрасно работает на аппаратном Serial (пины 0 и 1), поэтому SoftwareSerial.h можно выкинуть. Но при загрузке скетча возможно понадобится вытаскивать плеер или отсоединять от него пины 0 и 1.
Заработало?
Спасибо за ответ.
Проблемма не втом что Df плеер не работает, а в том что все вместе не работает.
Вот с этим кодом DF плеер молчит и не реагирует
Сильно не ругайте за код ,как смог.
С удовольствием поучусь как надо , если поможите.
Заранее благодарю.
В освоении ардуино , я зеленый новичек,
.....
Хрена-се!
В освоении ардуино , я зеленый новичек,
.....
Хрена-се!
Сам в шоке , но хотелось бы подробней.
хотелось бы подробней.
Подробнее вот здесь коллега другому наовичку ответил.
Предлагаете диодиками помигать ?
Вы извините конечно меня, Но эт больше похоже на -разбирайся сам. Чем собственно я и пытаюсь заниматься в меру своих возможностей, а здесь прошу помочь мне в этом ( не сделать за меня, а помочь понять что мне нужно сделать) .
Спасибо.
Софтовый порт может работать только с одним соединением одномоментно. Прочитайте описание софтового порта. Там есть команда активации - деактивации конкретного соединения. Перед общением надо активировать, после деактивировать. Тогда можно мнгого софт портов использовать, но только одно соединение может быть активно.
Вот этими командами я начинаю запрашиваю порт плеера а потом закрывю его( ну мне так кажется что я это делаю), если это не так , подскажите как будет правельно.
Спасибо.
Да. Всё правильно. Но вот зачем end? В святцах https://www.arduino.cc/en/Reference/SoftwareSerial нет такой команды.
Ну я вот нашол, но опять таки может чейто не так понял https://www.arduino.cc/en/Serial/End
Хотя я так понимаю к SoftwareSerial это не относится. Тогда вопрос как закрыть соединение ? И нужно ли это делать?
Ведь вопрос в том , что оно даже не открывается при инициализации двигателей
Закрывать не нужно. Больше того. Если вы не принимаете байты то и listen лишнее. Она нужна для приема. Если залезть в библиотеку MP3 то видно, что выши команды используют только send. Попробуйте оставить только команды. Listen потребуется, если надо будет принять статус плеера.
Если у Вас без строк 08-11 как Вы написали действительно всё работает, то и конфликт скорее всего нужно искать не в двух сериалах, а между SoftwareSerial и AFMotor, а дальше там ещё и Servo есть... Я так навскидку не скажу, используют они общие ресурсы или нет. Но судя по Вашим проблемам используют. Какие - надо код смотреть.
Спасибо за отзывчивость .
Без LISTEN плеер не работает.
Предлагаете диодиками помигать ?
Нет, не предлагаю, просто охреневаю слегка.
Если у Вас без строк 08-11 как Вы написали действительно всё работает, то и конфликт скорее всего нужно искать не в двух сериалах, а между SoftwareSerial и AFMotor, а дальше там ещё и Servo есть... Я так навскидку не скажу, используют они общие ресурсы или нет. Но судя по Вашим проблемам используют. Какие - надо код смотреть.
Я не правельно озвучил мысль , именно SofwareSerial и имел в виду.
Но блютуз работает именно на SoftwareSerial и у него конфликтов нет, а как токо добавляется еще 1 то вот тут и проблема.
К сожалению я совсем не силен в програмировании,6 поэтому мне сложно понять куда лезть.
Спасибо.
Предлагаете диодиками помигать ?
Нет, не предлагаю, просто охреневаю слегка.
Ну я рад что вызвал у вас такие ( надеюсь положительные) эмоции.
Набираюсь ума разума ,как могу
В github AF_DCMotor эти пины прописаны, да ещё timer2 используется. У вас какие прописаны в библиотеке?
Спасибо за отзывчивость .
Без LISTEN плеер не работает.
Упс ошибся извините, без listen работает.
такие же.
Осцилограф есть? Посмотреть сигналы на ногах ТХ софтсериалов. Если нет, то одно, если есть, но искажённые, то другое.
Я так понимаю смотреть нужно на TX плеера в варианте когда он не работает ? Постараюсь глянуть
Осцилограф есть? Посмотреть сигналы на ногах ТХ софтсериалов. Если нет, то одно, если есть, но искажённые, то другое.
Попытался посмотреть ,получилось следующие, Вариант когда плеер работает(отвечает) : На плате ардуино RX- подключенный к блютузу , есть постоянный пакет импульс.TX-тишина; RX-подключенный к плееру, тишина, TX- есть сигнал при команде включить плеер; Вариант когда плеер молчит(не отвечает) : С блютузом все так же; RX- подключенный к плееру,тишина, TX- при подаче команды есть ели различимые всполохи сигнала( подробно рассмотреть у меня не получилось)
А попробовать перенести софтсериал на другие ноги?
Пробовал, сечас так и есть перенес и блютуз и плеер, раньше блютуз сидел на RX,TX ардуинки. поведение идентично.
Сейчас опозорюсь совсем ,но знания важнее.
И так если у меня тут всю малину портит AFMotor ( хотя очень хотца разобратбся в чем тут дело)то почему бы не поработать со сдвиговым регистром на прямую,без библиотеки.Попытался, вроде понял как работает, но опят таки с библиотекой Shifty595, что меня опять таки не устраивает, а вот запустить чисто ручками почему то не получается. Если кому не сложно киньте ссылку где можно почитать ,посмотреть. Потому как то что я находил у меня не идет.
Ну и последний вариант -это дрыгать ножками плеера и ардуинки( он это предусматривает)
http://arduino.ru/Tutorial/registr_74HC595
Так должен загореться один светодиод, правельно ?
ПравИльно.
Доберусь до регистра попробую еще разок, но кажется мне ,что я это уже пробовал и было у меня глухо.Будем надеяться ,что я ошибаюсь.
...почему бы не поработать со сдвиговым регистром на прямую,без библиотеки.Попытался, вроде понял как работает, но опят таки с библиотекой Shifty595, что меня опять таки не устраивает, а вот запустить чисто ручками почему то не получается. Если кому не сложно киньте ссылку где можно почитать ,посмотреть. Потому как то что я находил у меня не идет.
Самый оптимальный вариант работы с 595 регистром - аппартный SPI (почему-то об этом почти не пишут). Максимально просто и на максимально достижимой скорости. Единственный недостаток - только на фиксированных (выделенных для SPI) ногах. Читать, соответственно, об SPI.
И еще одно замечание: SoftwareSerial - это, скорее, затычка для отладки, когда нужно работать с портом и одновременно вести отладку в консоли. После завершения отладки от SoftwareSerial лучше вообще отказаться. А если в Вашем проекте рисутствует необходимость сразу в двух SoftwareSerial, нужно переходить на платформу помощнее, где присутствуют не менее 3-х аппаратных последовательных портов, например, MEGA 2560.
Спасибо всем за отзывчивостьи за помощь. О Mege я уже задумывался, изначально это было просто баловство( порулить машинкой по блютузу), но как говарят- апетит приходит во время еды.В итоге переделал скетч под себя, вот и стлкнулся с данной проблеммой , и в процессе узнал много нового, что уже есть плюс.
Попробую поиграться с регистром , отпишусь решилась ли проблемма . Но сам вопрос все же остается открытым (интересно же как можно вырулить из данной ситуации).В процессе копания я учусь.
Большое всем спасибо!
http://arduino.ru/Tutorial/registr_74HC595
Спасибо за ссылочку, полезно почитать....Но примеры приведенные там у меня почемуто не работают, а хотелось бы наглядности для понимания.
Спасибо.
Методом перебора подобрал другие пины, с ними все заработало.Подскажите пожалуйста почему?
Спасибо.
Методом перебора подобрал другие пины, с ними все заработало.Подскажите пожалуйста почему?
По одной из двух причин (или по обеим сразу):
1. Физически Вы подключитли к одним пинам, а в скетче - к другим.
2. Те пины, что фигурируют в нерабочем варианте, уже используются для каких-то других целей.
Ну и нельзя забывать про то, что аппаратура иногда бывает неисправна.
Приношу извинения! Дело оказалось в IDE , дело в том, что я заливал через планшет. Видимо он периодически дает сбои +аозможно что то совпало так ,как монтаж был навесной без пайки. Дома собрал собрал на макетки с пайкой +залил через комп, все работает.
В скетче с которым я изначально мучился ,убрал библиотеку AFMotor , и стал работать напрямую с регистром - все заработало.
Единственное с чем пока не разобрался ,это то , что при запуске на выходах регистра появляется кратковременно HIGH, но где то тут я эту тему видел ,найти только надо.
Доведу до ума выложу .
Спасибо всем.
Доброго времени суток. Вообщем получился у меня вот такой кодик -
Буду презнателен если поможите причесать или покрайне мере ткнуть где надо подумать или исправить. Но есть и еще 1проблемка с сервой -дергается зараза (плавает длительность импульсов) и что с этим делать совсем не пойму ,может посоветуете.
Спасибо.
Вот, первое. что бросилось в глаза сразу:
1. Вся байда в строках 80-109 заменяется на вот такую конструкцию
согласитесь одна строка вместо 29 – это куда как приятнее и читать и сопровождать.
2. В строка 47-112 ВСЕ “if’ы” проверяются каждый раз, независимо, ни от чего. Например, если vcmd равна ‘F’, отработает строка 48, но затем все “if’ы” в строках 50-112 будут аккуратно проверяться. Зачем? Если она уже равна ‘F’ не может же она быть равна чему-нибудь ещё. Здесь нужно либо поставить слово else перед каждым if в строках 50-112, либо использовать конструкцию switch.
4. В строке 35 у Вас вызывается функция, которая объявлена гораздо ниже (в строке 216). Это работает в некоторых версиях IDE, а в некоторых нет. Если не хотите неприятных сюрпризов при смене версий, привыкайте писать правильно – любая сузность должна быть объявлена ДО использования.
3. Переменная vcmd используется только в функции loop. Ну, и зачем Вы её объявили глобальной? Строку 18 нужно удалить, а строку 44 переписать как
4. Переменная pulseWidth используется только в функции servoPulse. Ну, и зачем Вы её объявили глобальной? Строку 17 нужно удалить, а строку 120 переписать как
5. Переменные, объявленные в строках 14 и 16 нигде не используется. Эти строки следует удалить;
6. Переменные, объявленные в строках 6-12 и 15 на самом деле являются не переменными, а константами, надо добавить слово const в описание. Кроме того, тип int для них явно избыточен, надо сократить до байта.
Спасибо .
Не могли бы вы подробне объяснить ,для начало вот это :
4. В строке 35 у Вас вызывается функция, которая объявлена гораздо ниже (в строке 216). Это работает в некоторых версиях IDE, а в некоторых нет. Если не хотите неприятных сюрпризов при смене версий, привыкайте писать правильно – любая сузность должна быть объявлена ДО использования.
Другие функции тоже объявлены ниже, или я что то упускаю? И как ее правельно нужно обявить до того.
Да и другие тоже. Надо перенести их наверх - выше той вфункции, в которой они используются. Если нет такого желания или возможности, то тогда надо сверху сделать предобъявление (собственно IDE (некоторые версии) именно это за Вас и делает, иначе бы не работало.
К моему п.6 дополнение: кроме слова const, там ещё лучше и static добавить. Тогда эти переменные скорее всего вообще не будут занимать никакую память.
Попробовал сваять б но видимо что то не так понимаю и делаюю
Выдает ошибку компиляции
ino:76:8: error : stray ' \' in program
ino: in function "void lop()':
ino:76:47:error : exected ' ) 'before 'u2013'
ino:76:68: error : expected ' ) ' before " ; " token
Я писал текст в Word и он наверняка заменил одинарные кавычки на типографские апострофы. Убедитесь, что в '0' - честные одинарные кавычки, а не что-нибудь "вумное".
А чего на поставили else в строка 76 и 78?
А в строках 6 - 15 добавьте static в самое начало.
Заменить const на static ?
Заменил но ошибка осталась хотя на строчку меньше
Заменить const на static ?
Нет. просто добавить static. И не только туда, где const, а в во все строки.
Про ошибку, (если она та же) дело в апострофах. Поставьте нормальные или копипастите сюда текущий код.
(vcmd – '0')); если смотреть на 0 то он ,как бы, не активен (не подсвечивается) в отличии от 'q'
не совсем понял где еще нужно вставить static
А все вроде нашел, дело было не в кавычках а в - .
Теперь компилируется.
И, если не трудно, объясните ,как предобъявить функцию - тоже не совсем понял
Ага, ну он н етолько апострофы, но и минус заменил на типографский дефис. Word - он такой Word. Я поставил нормальный минус и всё стало компилироваться
else if (isdigit(vcmd)) vspeed (25 * (vcmd - '0'));
А все вроде нашел, дело было не в кавычках а в - .
И в том, и в другом. Посмотрите на кавычки в Вашем утреннем посте - они разные - левая и правая.
Да , вижу. Спасибо
Эти изменения скажутся на дергании сервы или это отдельный вопрос ?