помогите новичку ШИМ -led
- Войдите на сайт для отправки комментариев
Пт, 19/11/2021 - 13:15
Добрый!
сам не справился прошу вашей помощи!
есть необходимость собрать контроллер для управления 6ю светодиодами (уменьшать яркость)
управление через синий зуб с телефона.
програмулину на телефоне собрал (там ползунки меняется значение 0-255)
и так на каждом из 6 каналов.
но вот как заставить ардуну менять значения не на одном на разных пинах? я не осилил...
понимаю что надо для каждого цвета кроме 0-255 отправить еще что то, но в мониторе порта все это отправляется второй строкой и значения не меняются.
подскажите плиз как правильно сделать?
если хотите научится сами - давайте схему и код (код вставлять в форум ПРАВИЛЬНО)
если хотите просто получить готовое - в раздел Ищу исполнителя, за небольшую плату соберут
я хочу сам разобраться- готовых решений полно! я сам хочу понять!
не думаю что схема особо важна
постараюсь описать чтоб не рисовать...
Arduino nano (328)
пины для управления шим (0-5в): 3,5,6,9,10,11
светодиоды запитаны через драйверы.
естественно подключен блютус.
код я на данном этапе использовал из стандартных и пытался как мог его подогнать под себя- но увы...
тут только 1 пин (10) монитор порта читает все ползунки как 0-255.
и соответственно меняется только один порт от любых движений!
А что передаёте на ардуино ?
не думаю что схема особо важна
не думаю, что твои проблемы особо важны
ну для меня этот вопрос очень не простой.... так как я делал приложение так же по урокам - и тыкался в темноте.
предположу что моя программа отправляет: Send1ByteNumber - "Декодирует заданное число String в целое число и записывает его как один байт в выходной поток."
по крайней мере я в мониторе порта вижу значения положения ползунка.
и на 10 пине получаю 5в.
если я выбираю: Send2ByteNumber -"Декодирует заданное число String в целое число и записывает его как два байта в выходной поток."
то в мониторе порта я вижу положение ползунка и вторую строку ="0" и соответственно ничего не меняется на 10 пине! так как "0"
не думаю что схема особо важна
Ну, на нет и суда нет. Разбирайтесь сами.
Спасибо. Я тут новенький в этой теме... и только еще делаю первые шаги.
А вот в теме нахамить я уже далеко не ребенок. Однако мне не хочется демонстрировать тут этот навык!
Возможно для вас я и сделаю исключение. Но не сейчас...
Надеюсь все же дождаться умных и добрых людей! К сожалению персон с вашей аватарки хватает в любом обществе.
Колхозным способом так: с инвентора шлете например 'A' и сразу же байт-значение ШИМ ("яркость"). На ардуине в переменную читаете символ и следом сразу байт "яркость". Потом анализируете - символ равен 'A'? Если да, то на выводе 3 ставите значение яркости. Если 'B', то на выводе 5 и т.д.
Иногда это будет работать.
Вы уверены что принимаете данные именно от блютуз ???
да. так как я двигаю ползунок на телефоне - вижу значение- и это значение вижу в мониторе порта.
Колхозным способом так: с инвентора шлете например 'A' и сразу же байт-значение ШИМ ("яркость"). На ардуине в переменную читаете символ и следом сразу байт "яркость". Потом анализируете - символ равен 'A'? Если да, то на выводе 3 ставите значение яркости. Если 'B', то на выводе 5 и т.д.
Иногда это будет работать.
Правильно ли я понимаю что должен послать на каждый "ПИН" 2 сообщения - условно это кодовое имя цвета и второе сообщение это 0-255.
Думаю я это осилю... - колхоз
А если не колхоз?
управление цветом ползунками это так сказать только начало - надо будет еще несколько функций... но для начала мне бы научиться просто менять яркость на каждом канале
Колхозным способом так: с инвентора шлете например 'A' и сразу же байт-значение ШИМ ("яркость"). На ардуине в переменную читаете символ и следом сразу байт "яркость". Потом анализируете - символ равен 'A'? Если да, то на выводе 3 ставите значение яркости. Если 'B', то на выводе 5 и т.д.
Иногда это будет работать.
Правильно ли я понимаю что должен послать на каждый "ПИН" 2 сообщения - условно это кодовое имя цвета и второе сообщение это 0-255.
Думаю я это осилю... - колхоз
А если не колхоз?
управление цветом ползунками это так сказать только начало - надо будет еще несколько функций... но для начала мне бы научиться просто менять яркость на каждом канале
ну а если не колхоз берём какой-нибудь протокол радиоуправления, IBUS, SBUS, PPM к примеру )))
Коллеги!
Первое: Я настоятельно прошу прекратить обсуждение без схемы и кода. Мы сами пишем правила не для того, чтобы новички их игнорили!
Второе: Детские вопросы - в Песочнице, мы это тоже сами установили и снова поощряем засирание темы "Программирование"?
Колхозным способом так: с инвентора шлете например 'A' и сразу же байт-значение ШИМ ("яркость"). На ардуине в переменную читаете символ и следом сразу байт "яркость". Потом анализируете - символ равен 'A'? Если да, то на выводе 3 ставите значение яркости. Если 'B', то на выводе 5 и т.д.
Иногда это будет работать.
Правильно ли я понимаю что должен послать на каждый "ПИН" 2 сообщения - условно это кодовое имя цвета и второе сообщение это 0-255.
Думаю я это осилю... - колхоз
А если не колхоз?
управление цветом ползунками это так сказать только начало - надо будет еще несколько функций... но для начала мне бы научиться просто менять яркость на каждом канале
ну а если не колхоз берём какой-нибудь протокол радиоуправления, IBUS, SBUS, PPM к примеру )))
намек понял....мне в колхоз....
не подскажите как правильно сказать пину "10" что если в порт пришло "65" (указал в приложении отравить текст "A") а следом "230" что соответствует положению ползунка для цвета 1
а вот пину "9" что если в порт пришло "66" (указал в приложении отравить текст "B") а следом "200" что соответствует положению ползунка для цвета 2?
Коллеги!
Первое: Я настоятельно прошу прекратить обсуждение без схемы и кода. Мы сами пишем правила не для того, чтобы новички их игнорили!
Второе: Детские вопросы - в Песочнице, мы это тоже сами установили и снова поощряем засирание темы "Программирование"?
Арошу прощения что нарушил правила.
Но для данного вопроса схеме не нужна! Тут нет кучи датчиков от которых что то зависит и правильность подключения и прочего. Нет дисплея...
Поэтому я нарушил правило чертить схему...
Ну а про песочницу каюсь- не знал- искал в сет нужную мне инфу- наткнулся на тему похожую- увидел раздел форума... тут и создал свою тему! Если это принципиально и есть тех возможность перенести в правильны раздел форума. Буду только рад.
Не все мы переходим улицу в указанных местах!!!
tiger63rus, поищите здесь на форуме или в интернете вообще что-нибудь про "парсинг значений поступающих из ком-порта", "парсинг команд ...". Один байт Вы посылаете и принимаете. Теперь нужно научиться отсылать, принимать и разбирать несколько значений за раз. Примеров много, логично что пересказывать их никому не охота. (На примеры идущие с Arduino IDE тоже стоит посмотреть)
tiger63rus, поищите здесь на форуме или в интернете вообще что-нибудь про "парсинг значений поступающих из ком-порта", "парсинг команд ...". Один байт Вы посылаете и принимаете. Теперь нужно научиться отсылать, принимать и разбирать несколько значений за раз. Примеров много, логично что пересказывать их никому не охота. (На примеры идущие с Arduino IDE тоже стоит посмотреть)
спасибо. буду искать- но задам еще один вопрос: я отправляю с телефона по блютусу "А" а в порт приходит "65"
как заставить в порт приходить буквы? ведь если будет в диапазоне яркости 0-255 значение "65" но у другого канала (скажем у "D") все будет работать криво...
намек понял....мне в колхоз....
Если вы в последствии собираетесь отправлять по serial команды не только для светодиодов, то самодельный вариант (а это тоже протокол обмена) может сильно усложниться и стать запутанным.
'A' - это и есть DEC 65. См. ASCII Table.
это я понял! вопрос в другом.
буковки как в порт послать? не цыфирки.... раз уж я уровня песочницы...
шлите цифрами 65 66 67, только как вы поймете это уровень яркости 65 или канал 65
Я бы слал 01 02 03 04 - 10 для каналов и 00, 11, 12, 13 ...255 яркость
это я понял! вопрос в другом.
буковки как в порт послать? не цыфирки.... раз уж я уровня песочницы...
Буковки - это графические символы, предназначенные для отображения на бумаге или на экране специально для визуального восприятия человеком. В компьютере (микроконтроллере) никаких буковок нет, есть только байты, т.е. цифры, которыми эти буквы кодируются. Соответственно в порт посылаются не сами буквы, а их байт-коды, что и наблюдается в мониторе порта. Можно а) преобразовывать эти коды в буквы (накуа. если их все равно обрабатывает МК, который глаз не имеет) или б) работать напрямую со значениями байтов
это я понял! вопрос в другом.
буковки как в порт послать? не цыфирки.... раз уж я уровня песочницы...
Буковки - это графические символы, предназначенные для отображения на бумаге или на экране специально для визуального восприятия человеком. В компьютере (микроконтроллере) никаких буковок нет, есть только байты, т.е. цифры, которыми эти буквы кодируются. Соответственно в порт посылаются не сами буквы, а их байт-коды, что и наблюдается в мониторе порта. Можно а) преобразовывать эти коды в буквы (накуа. если их все равно обрабатывает МК, который глаз не имеет) или б) работать напрямую со значениями байтов
Хорошо. может я не понимаю чего.
я написал условие: если прилетает "а" то мы меняем значение пина 10
если прилетает "b" значение пина 9 и тд... и вот как мне сказать ардуине что я послал "а" - если я его посылаю а прилетает его цифровой аналог!
'A' экивалентно 65. В условии можно писать хоть то, хоть это.
Я настоятельно прошу прекратить ...
Глас вопиющего. Тут любят тереть шары, а потом материться. что всем форумом три дня трахались, а оказалось, что ТС с ресета читает.
Ну так языки то чешутся... Аж удержаться невозможно.(
Хорошо. может я не понимаю чего.
я написал условие: если прилетает "а" то мы меняем значение пина 10
если прилетает "b" значение пина 9 и тд... и вот как мне сказать ардуине что я послал "а" - если я его посылаю а прилетает его цифровой аналог!
если прилетает 65 то мы меняем значение пина 10, если прилетает 66 значение пина 9 и тд...
и вот как мне сказать ардуине что я послал "а" - если я его посылаю а прилетает его цифровой аналог!
Вариант - посылайте все текстом, тогда буквы - определяют номера пинов, а цифры после букв составляют строку - число величину яркости. Соответственно буквы являются разделителями "пакетов" в этом самодельном "протоколе".
буковки как в порт послать? не цыфирки.... раз уж я уровня песочницы...
Компьютер никак не отличает "буковки" от "циферок", для него это абсолютно одно и то же.
А чтобы человек мог в удобной ему форме понимать, что выдает компьютер, придумали разные типы данных.
Прочтите же, наконец, учебник!
и вот как мне сказать ардуине что я послал "а" - если я его посылаю а прилетает его цифровой аналог!
Вариант - посылайте все текстом, тогда буквы - определяют номера пинов, а цифры после букв составляют строку - число величину яркости. Соответственно буквы являются разделителями "пакетов" в этом самодельном "протоколе".
вот в этом месте видимо у меня и проблема... я не могу заставить послать текст.
так как готовый скетч который я вроде как переделал уже меняет все нужные значения если их вводить с клавиатуры в порт. по блютусу так не пролетает!
SendText(text)
Converts the given text to bytes and writes them to the output stream.
Свич написан так, что работать будет криво. Читайте про break внимательней.
SendText(text) это где? в приложении? так оно и стоит... и переводит букф в цыфр.
а в чем кривизна? я опять же делаю по тому что нахожу... сильный пробел у меня в программировании... но я не сдаюсь и хочу заполнить этот пробел.
Какая в итоге строка прилетает из блютуса?
две строки
65
255
если ползунок в край
Казалось бы - все, что нужно, на этом сайте есть, нужно только зайти и почитать ))
http://arduino.ru/Reference/SwitchCase
[qoute]
Ключевое слово break является командой выхода из оператора case и обычно используется в конце каждого case. Без оператора break оператор switch будет продолжать вычислять следующие выражения, пока не достигнет break или конец оператора switch.
[/quote]
две строки
65
255
если ползунок в край
Ну так и пиши в кейсе вместо 'a' 65
Казалось бы - все, что нужно, на этом сайте есть, нужно только зайти и почитать ))
http://arduino.ru/Reference/SwitchCase
[qoute]
Ключевое слово break является командой выхода из оператора case и обычно используется в конце каждого case. Без оператора break оператор switch будет продолжать вычислять следующие выражения, пока не достигнет break или конец оператора switch.
[/qute]
я и не спорю.... но поиск выводит по запросу "уроки ардуино....." много всякий важных людей- с крутыми каналами уроками всего и вся.... и как то верится что та все правильно! урок жеж.... а там вон оно как...
две строки
65
255
если ползунок в край
ParseInt разбирает строку символов "123", а не байт со значением 123. Вам нужно хорошо понять отличие между символом и числом.
две строки
65
255
если ползунок в край
Ну так и пиши в кейсе вместо 'a' 65
глупо конечно... и смешно... но не выходит... и еще вопрос. а если значение ползунка будет =65! ардуина это как воспримет? как ключ "65"
две строки
65
255
если ползунок в край
если не сложно ткните носом где почитать... я уже столько всего начитался-голова пухнет- месяц собираю этот светильник...
Почитать любой учебник по языку Си.
Но сейчас лучше просто заменить parseInt() на второй read()
две строки
65
255
если ползунок в край
Ну так и пиши в кейсе вместо 'a' 65
а зачем? 'A' удобнее жеж
А и а - большая разница для компа !!!
...или Send1ByteNumber на SendText. Может и прокатит. Я инвентора не знаю - позволяет ли он такие фокусы с конвертацией типов.
А и а - большая разница для компа !!!
Командир прав 'a' <> 'A'. Аски-код другой. Свич не словит.
Автор темы, вот вам пример от меня. Обратите внимание как числами можно строить протокол передачи данных. Сам уже не помню как работает :-)
Обратите внимание также на необходимость присутствия символа окончания строки в своём приложении к каждой команде типа "А".
и еще вопрос. а если значение ползунка будет =65! ардуина это как воспримет? как ключ "65"
Первая строка - ключ, вторая строка - значение. В таком порядке и разбирать. А ардуина воспримет ровно так, как ты ей пропишешь
А и а - большая разница для компа !!!
так у 'A' как раз 65 код, я буковку на клаве кодом набирал )))
я и не спорю.... но поиск выводит по запросу "уроки ардуино....." много всякий важных людей- с крутыми каналами уроками всего и вся.... и как то верится что та все правильно! урок жеж.... а там вон оно как...
Так Вы неправильную строку запроса вводите, поэтому и получаете всякую чушь.
Искать нужно не "уроки по Ардуино", а "учебник по Си/Си++".