Первым делом я бегло пробежался по первым 5-7 страницам форума в нужном разделе и оставил там полезный комент относительно Notepad++ для тех же новичков
я видел. Комент типично новичковый - наивный и немного смешной. Если чо - подсветка синтаксиса есть практически в любом редакторе кода, а не только в Нотепаде. Вы Удивитесь - но она даже в Ардуино ИДЕ есть
Notepad++ подсвечивает линией блоки которые которые включены в знак {}. Это чуть более наглядно. И опять ж мы смотрим на ситуацию с разных колоколен) Мне как новичку кажется, что новичкам это полезно будет)
Если, пока кейс B1HOLD не успел перейти в B1TO нажать B2HOLD, то логика уходит в другой кейс, а это рушит мое ТЗ. Т.е. мне нужен еще и таймер на задержку перехода между кейсам получается. Завтра буду думать.
Похоже все же придется снимать показания со светодиодов и делать логику еще и с ними
Если, пока кейс B1HOLD не успел перейти в B1TO нажать B2HOLD, то логика уходит в другой кейс, а это рушит мое ТЗ. Т.е. мне нужен еще и таймер на задержку перехода между кейсам получается. Завтра буду думать.
Похоже все же придется снимать показания со светодиодов и делать логику еще и с ними
Вооот, это верное направление. И делается это просто - вместо проверки нажатости второй кнопки делать проверку состояния светодиода.
if (!digitalRead(btn1) && !digitalRead(led2))
flags = B1HOLD;
else if (!digitalRead(btn2) && !digitalRead(led1))
flags = B2HOLD;
Так реакция на кнопку будет только при условии, что противоположный светодиод не горит.
А вообще вы действительно неправильно работаете с кнопками. Вам нужно отлавливать момент нажатия, а вы вместо этого выдаете постоянный сигнал "Нажато" ))
ЗЫ: 300 мс для антидребезга - это безумно много, обычно делается не более 50 мс
Если, пока кейс B1HOLD не успел перейти в B1TO нажать B2HOLD, то логика уходит в другой кейс, а это рушит мое ТЗ. Т.е. мне нужен еще и таймер на задержку перехода между кейсам получается. Завтра буду думать.
Похоже все же придется снимать показания со светодиодов и делать логику еще и с ними
Вооот, это верное направление. И делается это просто - вместо проверки нажатости второй кнопки делать проверку состояния светодиода.
if (!digitalRead(btn1) && !digitalRead(led2))
flags = B1HOLD;
else if (!digitalRead(btn2) && !digitalRead(led1))
flags = B2HOLD;
Так реакция на кнопку будет только при условии, что противоположный светодиод не горит.
А вообще вы действительно неправильно работаете с кнопками. Вам нужно отлавливать момент нажатия, а вы вместо этого выдаете постоянный сигнал "Нажато" ))
ЗЫ: 300 мс для антидребезга - это безумно много, обычно делается не более 50 мс
Благодарю, за наводку. А как отлавливать? ДиджиталРид разве не это делает?
У меня кнопки от старых ПК и 50 было мало. Опытным путем к 300 пришёл
И если я в будущем светодиоды захочу поменять на led модули, не будет проблем с "ловлей сигнала"?
Благодарю, за наводку. А как отлавливать? ДиджиталРид разве не это делает?
Нет, он постоянно выдает состояние кнопки "нажата", а вам нужно отлавливать сам момент нажатия, реагировать на него, а потом забывать про этот пин, пока кнопка не будет отпущена. Проще всего взять любую кнопочную библиотеку, которая это умеет. Если же обязательно дойти своим умом, то алгоритм примерно такой. Для кнопки заводится флаг, и при проверке состояния пина кнопки проверяется и флаг. Если кнопка нажата, а флаг не поднят (false), то поднять его и выполнить действия, которые нужны по клику кнопки, если же флаг уже поднят, то ничего не делать, пока кнопка не будет отпущена. Как только кнопка отпускается, флаг сбрасывается, кнопка снова готова к работе.
На пине, к которому подключен модуль, будет либо HIGH, либо LOW, соответственно - либо включен, либо выключен. А чем конкретно управляет пин несущественно
На пине, к которому подключен модуль, будет либо HIGH, либо LOW, соответственно - либо включен, либо выключен. А чем конкретно управляет пин несущественно
Т.е. после вывода на страйп нужно будет ещё принудительно ногу переводить в какое-то состояние вместо того, чтобы один байт в памяти изменить? Ну типа круто, чо. PHP-style.
V258, дорогой, я понимаю что ТС нихера не догоняет, но вы то?
Посмотрите внимательно на строчки, приведенные Садманом в #42. Эти строчки при верном применении полностью исключают тот "недочет", о котором пишет ТС.
Из этого вывод - он опять что-нибудь не так поправил в коде. Не надо ему советовать читать состояние светодиодов, для правильной работы кода это не нужно.
V258, дорогой, я понимаю что ТС нихера не догоняет, но вы то?
Посмотрите внимательно на строчки, приведенные Садманом в #42. Эти строчки при верном применении полностью исключают тот "недочет", о котором пишет ТС.
Из этого вывод - он опять что-нибудь не так поправил в коде. Не надо ему советовать читать состояние светодиодов, для правильной работы кода это не нужно.
ТС этот код использовал? Вот то то ж ))
А так да, вариантов может быть много
Смысловое: в первой строке - если система не находится в каком-либо состоянии кроме безделья, то анализируется состояние входа и состояние системы изменяется при обнаружении его активности. Во второй строке система уже не будет находится в состоянии безделья, если было зафиксировано нажатие кнопки #1. И наоборот.
Вроде как я применил те же приёмы и ТС. Это должно было ему быть понятно.
Смысловое: в первой строке - если система не находится в каком-либо состоянии кроме безделья, то анализируется состояние входа. Во второй строке система уже не будет находится в состоянии безделья, если было зафиксировано нажатие кнопки #1. И наоборот.
Вроде как я применил те же приёмы и ТС. Это должно было ему быть понятно.
Так, я что то запутался. У меня стоит резистор на плате. Я читал, что если ставить его, то нужно инвертировать значения через !.
Но так же я сделал подтяжку програмно, что видимо сделало мой резистор бессмысленно выставленных. И это меня запутало и инвертировало моё понимание логики.
Получается моя логика из сообщения выше была бы справедлива для pinmode input и резистора на плате. Верно?
просто ночью почему то проигнорировал то сообщение.... каюсь. Сейчас доберусь до дома и сяду пробовать.
а еще раньше вы проигнорировали сообщение #26, где написано ровно то же самое. Такое упорное нежелание принимать подсказки не на пустом месте. Думаю, причина в том что вы не понимаете базовых конструкций. таких как флаги, состояния. логические выражения... поэтому совершенно очевидные советы проходят мимо вас.
У вас есть очень вредное на данном этапе заблуждение, что вы разбираетесь в коде... в то время как это сильно преувеличено :)
Смысловое: в первой строке - если система не находится в каком-либо состоянии кроме безделья, то анализируется состояние входа. Во второй строке система уже не будет находится в состоянии безделья, если было зафиксировано нажатие кнопки #1. И наоборот.
Вроде как я применил те же приёмы и ТС. Это должно было ему быть понятно.
Так, я что то запутался. У меня стоит резистор на плате. Я читал, что если ставить его, то нужно инвертировать значения через !.
Но так же я сделал подтяжку програмно, что видимо сделало мой резистор бессмысленно выставленных. И это меня запутало и инвертировало моё понимание логики.
Получается моя логика из сообщения выше была бы справедлива для pinmode input и резистора на плате. Верно?
Да, при программной подтяжке резистор не нужен. И да, состояние Пина кнопки будет инвертировано, LOW - нажата, HIGH - отпущена
v258, сорри вторично, но ветка просто переполнена вашими сообщениями ни к месту. Старайтесь все-таки вникать в дискуссию
рассуждения ТС о подтяжке не имеют РОВНО НИКАКОГО ОТНОШЕНИЯ к логике, описанной Садманом. ТС надо указать на это, а не пускаться с ним в дискуссию о резисторах...
v258, сорри вторично, но ветка просто переполнена вашими сообщениями ни к месту. Старайтесь все-таки вникать в дискуссию
рассуждения ТС о подтяжке не имеют РОВНО НИКАКОГО ОТНОШЕНИЯ к логике, описанной Садманом. ТС надо указать на это, а не пускаться с ним в дискуссию о резисторах...
Ладно, мне на работу пора...
Имеет - он реально не понимает ни про подтяжку, ни про логику работы с кнопками. Что вы ему пытаетесь объяснить, если он не понимает даже, зачем в коде восклицательные знаки стоят?
v258, сорри вторично, но ветка просто переполнена вашими сообщениями ни к месту. Старайтесь все-таки вникать в дискуссию
рассуждения ТС о подтяжке не имеют РОВНО НИКАКОГО ОТНОШЕНИЯ к логике, описанной Садманом. ТС надо указать на это, а не пускаться с ним в дискуссию о резисторах...
Ладно, мне на работу пора...
Имеет - он реально не понимает ни про подтяжку, ни про логику работы с кнопками. Что вы ему пытаетесь объяснить, если он не понимает даже, зачем в коде восклицательные знаки стоят?
От части вы правы. Выше я написал почему так получилось.
В общем за ночь были расставлены точки над и, исправлены недочеты в моей голове и моем коде и сейчас все запустилось именно так, как я это видел на стадии задумки. Всем низкий поклон. Очень благодарен за конструктивную критику. Думаю мы еще увидимся с вами на просторах этого форума.
т.е. после нажатия кнопки взводится таймер, затем кейс со светодиодом его проверят, а flag=0 сбрасывает?
Нелогично?
И ничего там не взводится. Гайверофорум засерает всем мозги.
Запоминается момент времени.
Первым делом я бегло пробежался по первым 5-7 страницам форума в нужном разделе и оставил там полезный комент относительно Notepad++ для тех же новичков
я видел. Комент типично новичковый - наивный и немного смешной. Если чо - подсветка синтаксиса есть практически в любом редакторе кода, а не только в Нотепаде. Вы Удивитесь - но она даже в Ардуино ИДЕ есть
Notepad++ подсвечивает линией блоки которые которые включены в знак {}. Это чуть более наглядно. И опять ж мы смотрим на ситуацию с разных колоколен) Мне как новичку кажется, что новичкам это полезно будет)
я не оспариваю логичность)
Просто для меня это было не совсем очевидно т.к. не имею должного опыта =( А так это логичнее и гораздо проще
Если я объявлю #define DEBOUNCE 300, а затем в лупе
я же смогу так антидребезг организовать?
Если я объявлю #define DEBOUNCE 300, а затем в лупе
я же смогу так антидребезг организовать?
btn1 у вас равен 11. в чем смысл выражения ! btn1 ?
да и остальные части выражения не больно осмысленные
Если я объявлю #define DEBOUNCE 300, а затем в лупе
я же смогу так антидребезг организовать?
btn1 у вас равен 11. в чем смысл выражения ! btn1 ?
кнопка подтянута через резистор. И если я правильно понял это состояние "нажата"
Если я объявлю #define DEBOUNCE 300, а затем в лупе
я же смогу так антидребезг организовать?
btn1 у вас равен 11. в чем смысл выражения ! btn1 ?
да и остальные части выражения не больно осмысленные
Если кнопка нажата, флаг активен и таймер больше 300 то мы.... сбрасываем таймер
пора спать идти. Почти 4 ночи =(
за сим разрешите откланяться. Всем спасибо, продолжу уже завтра.
И как говорил сократ "В споре рождается истина..." =)
если я правильно понял это состояние "нажата"
состояние нажата - это ! digitalRead(btn1); А btn1 - это номер пина. Почувствуйте разницу...
Идите спать индид
нашел первый недочет
Если, пока кейс B1HOLD не успел перейти в B1TO нажать B2HOLD, то логика уходит в другой кейс, а это рушит мое ТЗ. Т.е. мне нужен еще и таймер на задержку перехода между кейсам получается. Завтра буду думать.
Похоже все же придется снимать показания со светодиодов и делать логику еще и с ними
нашел первый недочет
Если, пока кейс B1HOLD не успел перейти в B1TO нажать B2HOLD, то логика уходит в другой кейс, а это рушит мое ТЗ. Т.е. мне нужен еще и таймер на задержку перехода между кейсам получается. Завтра буду думать.
Похоже все же придется снимать показания со светодиодов и делать логику еще и с ними
Вооот, это верное направление. И делается это просто - вместо проверки нажатости второй кнопки делать проверку состояния светодиода.
Так реакция на кнопку будет только при условии, что противоположный светодиод не горит.
А вообще вы действительно неправильно работаете с кнопками. Вам нужно отлавливать момент нажатия, а вы вместо этого выдаете постоянный сигнал "Нажато" ))
ЗЫ: 300 мс для антидребезга - это безумно много, обычно делается не более 50 мс
нашел первый недочет
Если, пока кейс B1HOLD не успел перейти в B1TO нажать B2HOLD, то логика уходит в другой кейс, а это рушит мое ТЗ. Т.е. мне нужен еще и таймер на задержку перехода между кейсам получается. Завтра буду думать.
Похоже все же придется снимать показания со светодиодов и делать логику еще и с ними
Вооот, это верное направление. И делается это просто - вместо проверки нажатости второй кнопки делать проверку состояния светодиода.
Так реакция на кнопку будет только при условии, что противоположный светодиод не горит.
А вообще вы действительно неправильно работаете с кнопками. Вам нужно отлавливать момент нажатия, а вы вместо этого выдаете постоянный сигнал "Нажато" ))
ЗЫ: 300 мс для антидребезга - это безумно много, обычно делается не более 50 мс
Благодарю, за наводку. А как отлавливать? ДиджиталРид разве не это делает?
У меня кнопки от старых ПК и 50 было мало. Опытным путем к 300 пришёл
И если я в будущем светодиоды захочу поменять на led модули, не будет проблем с "ловлей сигнала"?
Оптимизация кода для меня еще не скоро откроется)
тут нет никакой оптимации, это всего лишь логическое выражение
оно сокращено в 1 строку = оптимизированно
Отнюдь.
Оно и не сокращено и не оптимизировано.
Для оптимизации - необходим критерий.
А сокращенное - содержало бы меньше операций, например, так:
if (!(flags || digitalRead(btn1))) flags = B1HOLD;
Вроде уже показал, как сделать - все без толку. Для чего писал...
Благодарю, за наводку. А как отлавливать? ДиджиталРид разве не это делает?
Нет, он постоянно выдает состояние кнопки "нажата", а вам нужно отлавливать сам момент нажатия, реагировать на него, а потом забывать про этот пин, пока кнопка не будет отпущена. Проще всего взять любую кнопочную библиотеку, которая это умеет. Если же обязательно дойти своим умом, то алгоритм примерно такой. Для кнопки заводится флаг, и при проверке состояния пина кнопки проверяется и флаг. Если кнопка нажата, а флаг не поднят (false), то поднять его и выполнить действия, которые нужны по клику кнопки, если же флаг уже поднят, то ничего не делать, пока кнопка не будет отпущена. Как только кнопка отпускается, флаг сбрасывается, кнопка снова готова к работе.
И если я в будущем светодиоды захочу поменять на led модули, не будет проблем с "ловлей сигнала"?
Без разницы, проверяется не сам светодиод, а состояние пина, к которому он подключен
LED-модуль может оказаться сборкой на 595 или пиксельным светодиодом. Там ничего на пине не будет.
На пине, к которому подключен модуль, будет либо HIGH, либо LOW, соответственно - либо включен, либо выключен. А чем конкретно управляет пин несущественно
Если сделать как описал Садман, не нужно будет проверять состояния диодов.
Тс, выкладывайте последний получившийся код, вы опять чего-то не поняли
Т.е. после вывода на страйп нужно будет ещё принудительно ногу переводить в какое-то состояние вместо того, чтобы один байт в памяти изменить? Ну типа круто, чо. PHP-style.
V258, дорогой, я понимаю что ТС нихера не догоняет, но вы то?
Посмотрите внимательно на строчки, приведенные Садманом в #42. Эти строчки при верном применении полностью исключают тот "недочет", о котором пишет ТС.
Из этого вывод - он опять что-нибудь не так поправил в коде. Не надо ему советовать читать состояние светодиодов, для правильной работы кода это не нужно.
Вот когда дойдет до страйпов, тогда и будет разговор
Посмотрите внимательно на строчки, приведенные Садманом в #42. Эти строчки при верном применении полностью исключают тот "недочет", о котором пишет ТС.
Из этого вывод - он опять что-нибудь не так поправил в коде. Не надо ему советовать читать состояние светодиодов, для правильной работы кода это не нужно.
ТС этот код использовал? Вот то то ж ))
А так да, вариантов может быть много
ТС этот код использовал? Вот то то ж ))
А так да, вариантов может быть много
так надо настаивать чтоб использовал, а не начинать советовать ему длинный кривой вариант с чтением светодиодов
Человеку не нужен готовый код, он хочет понимать, что делает. До понимания того кода он, видимо, еще не дорос. А пояснять Садман не стал ))
Человек просто ночью почему то проигнорировал то сообщение.... каюсь. Сейчас доберусь до дома и сяду пробовать.
if (!flags && !digitalRead(btn1)) flags = B1HOLD;
if (!flags && !digitalRead(btn2)) flags = B2HOLD;
Видимо спящий мозг напугало слово придавит)
Я верно понимаю: если флаг поднят и на пине btn1 HIGH, то менять флаг на b1hold?
if (!flags && !digitalRead(btn1)) flags = B1HOLD;
if (!flags && !digitalRead(btn2)) flags = B2HOLD;
Видимо спящий мозг напугало слово придавит)
Я верно понимаю: если флаг поднят и на пине btn1 HIGH, то менять флаг на b1hold?
В точности до наоборот - если флаг опущен, т.е. равен нулю, и на пину кнопки LOW, т.е. нажата, то менять флаг...
Это буквальное толкование.
Смысловое: в первой строке - если система не находится в каком-либо состоянии кроме безделья, то анализируется состояние входа и состояние системы изменяется при обнаружении его активности. Во второй строке система уже не будет находится в состоянии безделья, если было зафиксировано нажатие кнопки #1. И наоборот.
Вроде как я применил те же приёмы и ТС. Это должно было ему быть понятно.
Смысловое: в первой строке - если система не находится в каком-либо состоянии кроме безделья, то анализируется состояние входа. Во второй строке система уже не будет находится в состоянии безделья, если было зафиксировано нажатие кнопки #1. И наоборот.
Вроде как я применил те же приёмы и ТС. Это должно было ему быть понятно.
Так, я что то запутался. У меня стоит резистор на плате. Я читал, что если ставить его, то нужно инвертировать значения через !.
Но так же я сделал подтяжку програмно, что видимо сделало мой резистор бессмысленно выставленных. И это меня запутало и инвертировало моё понимание логики.
Получается моя логика из сообщения выше была бы справедлива для pinmode input и резистора на плате. Верно?
а еще раньше вы проигнорировали сообщение #26, где написано ровно то же самое. Такое упорное нежелание принимать подсказки не на пустом месте. Думаю, причина в том что вы не понимаете базовых конструкций. таких как флаги, состояния. логические выражения... поэтому совершенно очевидные советы проходят мимо вас.
У вас есть очень вредное на данном этапе заблуждение, что вы разбираетесь в коде... в то время как это сильно преувеличено :)
Смысловое: в первой строке - если система не находится в каком-либо состоянии кроме безделья, то анализируется состояние входа. Во второй строке система уже не будет находится в состоянии безделья, если было зафиксировано нажатие кнопки #1. И наоборот.
Вроде как я применил те же приёмы и ТС. Это должно было ему быть понятно.
Так, я что то запутался. У меня стоит резистор на плате. Я читал, что если ставить его, то нужно инвертировать значения через !.
Но так же я сделал подтяжку програмно, что видимо сделало мой резистор бессмысленно выставленных. И это меня запутало и инвертировало моё понимание логики.
Получается моя логика из сообщения выше была бы справедлива для pinmode input и резистора на плате. Верно?
Да, при программной подтяжке резистор не нужен. И да, состояние Пина кнопки будет инвертировано, LOW - нажата, HIGH - отпущена
это здесь вообще не при чем
v258, сорри вторично, но ветка просто переполнена вашими сообщениями ни к месту. Старайтесь все-таки вникать в дискуссию
рассуждения ТС о подтяжке не имеют РОВНО НИКАКОГО ОТНОШЕНИЯ к логике, описанной Садманом. ТС надо указать на это, а не пускаться с ним в дискуссию о резисторах...
Ладно, мне на работу пора...
v258, сорри вторично, но ветка просто переполнена вашими сообщениями ни к месту. Старайтесь все-таки вникать в дискуссию
рассуждения ТС о подтяжке не имеют РОВНО НИКАКОГО ОТНОШЕНИЯ к логике, описанной Садманом. ТС надо указать на это, а не пускаться с ним в дискуссию о резисторах...
Ладно, мне на работу пора...
Имеет - он реально не понимает ни про подтяжку, ни про логику работы с кнопками. Что вы ему пытаетесь объяснить, если он не понимает даже, зачем в коде восклицательные знаки стоят?
ну ОК, прощу простить за резкость.
Соглашусь, что про подтяжку ему тоже надо обьяснять.
Ему вообще почти каждую запятую в этом коде еще только предстоит понять... Наш ТС сейчас в самом неудачном месте кривой Крюгера - на левом пике :)
v258, сорри вторично, но ветка просто переполнена вашими сообщениями ни к месту. Старайтесь все-таки вникать в дискуссию
рассуждения ТС о подтяжке не имеют РОВНО НИКАКОГО ОТНОШЕНИЯ к логике, описанной Садманом. ТС надо указать на это, а не пускаться с ним в дискуссию о резисторах...
Ладно, мне на работу пора...
От части вы правы. Выше я написал почему так получилось.
В общем за ночь были расставлены точки над и, исправлены недочеты в моей голове и моем коде и сейчас все запустилось именно так, как я это видел на стадии задумки. Всем низкий поклон. Очень благодарен за конструктивную критику. Думаю мы еще увидимся с вами на просторах этого форума.
ну ОК, прощу простить за резкость.
Соглашусь, что про подтяжку ему тоже надо обьяснять.
Ему вообще почти каждую запятую в этом еще только предстоит понять... Наш ТС сейчас в самом неудачном месте кривой Крюгера - на левом пике :)
о нееет) оттуда я свалился когда пошел дальше урока "нажали кнопку загорелся светодиод" xD
Про понимание запятых конечно очень утрированно, но действительно мне предстоит еще много чему научиться и много чего понять.
Ямы страдания я с Windows уже 10 лет испытываю)
Ямы страдания я с Windows уже 10 лет испытываю)
"Да забей!" (с)
Достаю из коробочки модуль mp3 плеера и запасаюсь кофе xD