Прерывания
- Войдите на сайт для отправки комментариев
Пнд, 08/07/2019 - 21:52
Здравствуйте. У меня есть bluetooth модуль, лента и ардуино. Как сделать прерывания для модуля блютуз
void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i+j) & 255)); } strip.show(); delay(wait); } } uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } void loop() { if (Serial.available()) // проверяем, поступают ли какие-то команды { val = Serial.read(); // переменная val равна полученной команде if (val == 't'){ rainbow(50); } } }
Вот кусок скетча, мне надо чтоб ардуино прерывалось на модуль во время произведения "rainbow"
Я поискал в интернете как пользоваться прерываниями, но на ардуино нано есть только 2 порта для прерываний это 2 и 3. Но модуль подключен к RX и TX
переписать эффект - выкинуть задержку из 8-й строки и прерывание не понадобится
Uno, Nano, Mini, other 328-based
2, 3
Я поискал в интернете как пользоваться прерываниями, но на ардуино нано есть только 2 порта для прерываний это 2 и 3.
Наглая ложь.))))
Мне не совсем это нужно, я знаю что очень грубую ошибку сделал, но я не знал как я еще сделать. Я взял и скопировал этот эффект много раз чтобы он не прерывался. Ну и чтоб его выключить надо либо выключить питание, либо перезагрузить. Я поставил транзистор на перезагрузку и когда подаю сигнал с телефона он должен перезагрузиться. Но я не учел одного то-что ардуино не прерывается на сигнал с телефона пока не закончится этот эффект
Кхммм.... Может я не правильно понял, Но я отправил выше таблицу
Мне не совсем это нужно, я знаю что очень грубую ошибку сделал, но я не знал как я еще сделать. Я взял и скопировал этот эффект много раз чтобы он не прерывался.
ну так теперь, когда вы знаете, что это "грубая ошибка" - возьмите и перепишите. Там всего-то 20 строк.
Если вы не слишком знакомы с прерываниями )а мне почему так кажется) - через прерывание вы будете рещать проблему дольше.
Извините за тупость, прочитал в интернете что и 0,1 тоже могу прерываться. Я не знаю почему в оф. сайте не написали
Я не знаю как сделать так чтоб эффект не прерывался, Только так смог сделать
Я не знаю как сделать так чтоб эффект не прерывался, Только так смог сделать
а с чего вы тогда взяли. что у вас с прерываниями получится?
Еще раз повторюсь - в вашем случае прерывания не нужны. Для работы с блютуз используются прерывания не на пинах, а прерывания по УАРТ - а они и так всегда включены. Проблема в другом - пришедшую по блютуз команду нужно обработать в программе - и тут без переписывания жффекта никак не обойтись.
Честно но я не знаю как пользоваться прерываниями по УАРТ
Можно пример?
Честно но я не знаю как пользоваться прерываниями по УАРТ
повторяю, вы не с того конца заходите. Предположим, вы разобрались с прерываниями по УАРТ и смогли передать по блютуз команду остановить эффект. Но что вы дальше будете делать? У вас в программе даже некуда эту команду вставить - эффект работает, пока не закончится. Вам в любом случае надо добавлять в эффект проверку на команду останова.
Единственный вариант - это переписывать эффект так, чтобы он давал возможность работать и другим частям программы. А дальше уже смотреть - нужны ли прерывания.
Сейчас попробую
Игорь, прерывания микроконтроллера и прерывание хода программы - это разные понятия на данном этапе Вашего погружения в Ардуино. Первое практически ничего Вам не даст для осуществления второго.
И что мне делать
Моя идея поставить ИК приемник и постоянно его опрашивать, поставить условие. и если датчик примит сигнал что прервать эффект
А что бы Вы в обычной жизни сделали, если Вам пришла бы в голову идея заиметь дома паркетные полы? Варианта я вижу четыре: если умеешь, то класть самому, либо учиться как класть самому, или нанять паркетчика, ждать Деда Мороза. Программирование от паркета ничем не отличается.
Моя идея поставить ИК приемник и постоянно его опрашивать, поставить условие. и если датчик примит сигнал что прервать эффект
О, кое-что новенькое... уже ИК приемник. А раньше, помню, был блютус :)
Идея у вас хорошая, но чтобы "постоянно опрашивать приемник" - все равно нужно переписать ваш код, иначе не выйдет.
В прошлый раз после совета переписать эффект вы написали "Сейчас попробую" и пропали на неделю. Ну и как успехи? переписали?
delay заменил на millis xD
и ел витаминки)
delay заменил на millis xD
показывайте код.
Только показывайте код целиком - то, что исполняется "часов 10". а не одну только процедуру.
он 234 строки, зачем весб
И еще вопрос.
Я создал 3 страницы. 1 для циклов(loop, setup); 2 для эффектов; 3 для html странички, раньше все компилировалось хорошо но потом надо все 3 странички соединять
Если у Вас есть Wemos, NodeMCU или подобная хренотень, то я могу вам дать ссылку на гитхаб с прожектом иллюминации, управляемой через вифи. Там все эти "прерывания" уже реализованы.
Хмм давайте
Простите, а где вы эффект-то на миллис переписали? Это где строчки 116-118 ? - там хрень полная написана.
Смысл переписывания кода на миллис в том,, чтобы вместо delay() программа выходила из вашего rainbow и проверяла сигнал на отключение эффекта. А в вашем коде этого и близко нет
Кроме того, по-моему, вы выложили не тот код, на который жалуетесь. Вы на амперке пишете, что вы Радугу зациклили и она у вас 10 часов играет - а тут в коде ничего такого нет, продолжительность эффекта всего порядка 10 секунд
Update - а ну да, точно - обещали 234 строки, а выложили всего 160.
Игорь, или Вы делаете то, что вас просят - или решайте проблему сами.
Знал бы как это сделать, давно б сделал
Помогайте тогда.
я лишнее убрал, там много эфектов которыми я не пользусь, а эффект длится 10ч, я просто обрезал код чтоб вы не говорили что так нельзя..
Вот эффект, помогайте
А что бы Вы в обычной жизни сделали, если Вам пришла бы в голову идея заиметь дома паркетные полы? Варианта я вижу четыре: если умеешь, то класть самому, либо учиться как класть самому, или нанять паркетчика, ждать Деда Мороза. Программирование от паркета ничем не отличается.
Я бы научился ставить паркет, хотя с малым интересом, как с ардуино, мне кажется вы такими же были как я сейчас, я не изучил все тонкости.
В скетче из первого сообщения между 7 и 8 строками вставь:
if
(
Serial
.available()) return;
И будет выходить по приходу данных от BT
Спасибо, но одно но, надо будет подловить момент и отправить сигнал от BT
Спасибо, но одно но, надо будет подловить момент и отправить сигнал от BT
Или я не прав?
Прав что не прав !
Главное "t" не посылать, а то опять стартанет сразу же ...
Прав что не прав !
Главное "t" не посылать, а то опять стартанет сразу же ...
Верно, что ж делать
Верно, что ж делать
Это о чем тоска ? Если про "t", то надо просто очистить буфер ...
Догадаешься как и где ???
Простите, но не догадываюсь, причем тут "t" где вы его взяли
Строка 32
я лишнее убрал, там много эфектов которыми я не пользусь, а эффект длится 10ч, я просто обрезал код чтоб вы не говорили что так нельзя..
ты издеваешься или как? Ты не понимаешь, что если ты собираешься запускать тот код, что на 10 часов - то и исправлять надо ТОТ КОД, а не этот обрывок.
В скетче из первого сообщения между 7 и 8 строками вставь:
if
(
Serial
.available()) return;
И будет выходить по приходу данных от BT
Командир, у него на самом деле код совсем другой, в нем этот кусок, подозреваю, скопирован многократно, поэтому никакие правки по выложенному коду делу не помогут. Кроме того, товарищ в этом "своем коде" просто ни в зуб ногой - он его где в инете нашел, в меру знаний (нулевых) поправил и теперь просит решить проблему, не показывая никому то, что получилось после его правок.
Человек просто морочит всем голову.
Хмм давайте
https://github.com/jasoncoon/esp8266-fastled-webserver
Спасибо, сейчав посмотрю
Спасибо, и эффектов много переделаю под ethernet и всё
переделаю под ethernet и всё
добрый совет - пользуйте как есть. С вашими "знаниями" на Эзернет вы не переделаете, там все далеко не так очевидно. Начать с того, что на "обычной" ардуине памяти в 40 раз меньше и запустить на ней веб-сервер - задача не для новичка.
И упаси вас бог снова зацикливать эффекты для более долгой работы.
Ну веб сайт создал включение лампы создал, ну тогда лучше вообще убрать долгие эффекты, обойдусь без них
Что это за "leds"?
Что это за "leds"?
это у вас надо спросить.
выдернули непонятно откуда 2 строки и спрашиваете...