Круговое переключение режимов

artur769
Offline
Зарегистрирован: 04.11.2018

я не знаю кто такие неофиты и даже ванкую не знаю что такое

нет у меня противности что то почитать - я почитаю

если вы посмотрите наверх то увидите что я начал изучать материал от алекса гайвера и еще из основных источников (arduino.cc) 

я из за этого проекта и познакомился со всеми этими ардуино и с++ и скетчами и воидами

оказалось интересно, буду продолжать

я буду читать и дальше и уже выше об этом заявлял

ну ребята ну помогите пожалуйста наведите что поменять подскажите как переделать

взялся сам помочь в конкурсе макет пдд

мы уже в срок не успели именно из за этого

теперь вне конкурса несем

но хоть так принести уже пора

я сам на себя много взял понял уже но я и работаю еще на работе как бы и не всегда получается углубиться

не давлю на жалость но серьезно в этот раз помогите пожалуйста как поставить стандартный текущий по секундам режим чтобы он мог переключаться

вот выключается же аварийный режим (this_mode = 11)? а че тот нет?

что изменить?

 

DIYMan пишет:

artur769 пишет:

что касается вашего любопытства о восклицательных зыс модах - опять же, я уже что последнее в голову приходило, пытался их так отключить при работе стандартного режима - не получилось

Знаешь почему не получилось? Потому что отсутствует знание основ.Лучшим вариантом для решения этой небольшой проблемы - будет начать чтение основ С++. Но, как показывает опыт, неофиты почему-то очень негативно относятся к таким советам.

artur769
Offline
Зарегистрирован: 04.11.2018

я и хотел так вот прописать чтобы отключало

а вы думаете если правильно прописать то поможет отключить этот таймер? то есть стандартный режим

DIYMan пишет:

artur769 пишет:

а вот вы бы помогли может? пожалуйста

что не так?

Строчка this_mode != 11;  - это просто сравнение, причём - в никуда. Если ты хотел как-то изменить значение переменной, то оператор сравнения "!=" тут не подходит. Нужен оператор присваивания, проще говоря "=". Поскольку у тебя переменная this_mode принимает ограниченное кол-во известных режимов, то лучшим вариантом сбросить её так, чтобы она заведомо не соответствовала никакому из режимов - введение специального значения, заведомо неравного никакому из режимов. На примере:

#define UNKNOWN_MODE 255
byte this_mode = 1; // известный режим


....


this_mode = UNKNOWN_MODE; // сбросили на неизвестный режим

 

artur769
Offline
Зарегистрирован: 04.11.2018

и еще это ведь в общем вы написали а как в конкретном режиме? 

например 

if (this_mode == 9) {

.......

}
if (this_mode == 10) {
this_mode (9ый я же сюда не напишу, хотя я его хочу отключить?) = uknown_mode;
........
}

artur769 пишет:

я и хотел так вот прописать чтобы отключало

а вы думаете если правильно прописать то поможет отключить этот таймер? то есть стандартный режим

DIYMan пишет:

artur769 пишет:

а вот вы бы помогли может? пожалуйста

что не так?

Строчка this_mode != 11;  - это просто сравнение, причём - в никуда. Если ты хотел как-то изменить значение переменной, то оператор сравнения "!=" тут не подходит. Нужен оператор присваивания, проще говоря "=". Поскольку у тебя переменная this_mode принимает ограниченное кол-во известных режимов, то лучшим вариантом сбросить её так, чтобы она заведомо не соответствовала никакому из режимов - введение специального значения, заведомо неравного никакому из режимов. На примере:

#define UNKNOWN_MODE 255
byte this_mode = 1; // известный режим


....


this_mode = UNKNOWN_MODE; // сбросили на неизвестный режим

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

artur769 пишет:

почитаю всё обязательно, спасибо

сейчас только надо последнее действие доделать

так не бывает.

Вы знаете песню "Наутилуса" "Прогулки по воде"? Там святой апостол Андрей просит Спасителя научить его ходить по воде аки по суху. Христос ему пытается объяснить - "пойди, повиси на распятии, и тогда будешь ходить как я", а тот ему, ну, "я, конечно, повишу там, но пока ты меня научи как ходить-то". Тот ему - "сначала повиси", Андрей снова - "да повишу, но ты пока научи". И так по кругу. 

Понимаете, чтобы ходить по воде программировать, нужно сначала повисеть на распятии изучить основы, а потом ходить делать проекты и учиться особо не надо - само получится.

Но именно в таком порядке! Наоборот - не работает!

artur769
Offline
Зарегистрирован: 04.11.2018

b707 пишет:

artur769 пишет:

показал этот, потому что он работает сам по себе, если его "не трогать"

Алекс, это строчки - бредятина. Если число равно 11, и так понятно. что оно не равно одному, двум, трем...

Что касается кода - напищите четко и подробно, что именно в нем неверно работает.

хм... значит код

четко и подробно

то, что я показал, само по себе работает прекрасно - по секундам переключаются все режимы и так по пругу до бесконечности (ну, до 50 дней как следует из теории)

НО

если что-нибудь нажать, например, нажать кнопку OK (вход в ручной режим), или # (аварийный режим), или 1 (при включенном OK, то есть при ручном режиме), и все другие кнопки РАБОТАЮТ САМИ ПО СЕБЕ, ТО ЕСТЬ КАК Я ХОЧУ, НО ПРИ ЭТОМ РАБОТАЕТ ДАЛЬШЕ СТАНДАРТНЫЙ РЕЖИМ, ТО ЕСТЬ КАК Я НЕ ХОЧУ

буквально он уходит на "второй" план и тихо и слабо помигивает светодиодами в нужной последовательности по времени millis... а в это время ярко горят светодиоды нужного режима

что у меня получалось когда-то еще в начале, когда еще не кучу вариантов перепробовал, так это выход из других режимов, то есть как бы их отключение, а затем, когда приходит время переключения STANDART режима в следующее положение нужные светодиоды включались и продолжался стандарт режим, понимаете? то есть при выходе из всех других режимов была "темнота" до времени переключения положений в стандартном режиме, а значит он никуда и не уходит

что получалось еще: у меня максимум получалось его выключить (визуально это выглядело как будто окончательно), но при этом я его обратно не мог уже включить, а так же сбросить таймер, а именно sek = 0

задача простая (наверное): нужно, чтобы стандартный режим не конфликтовал с остальными и, когда включаешь другой какой-нибудь режим, стандартный не мешал

artur769
Offline
Зарегистрирован: 04.11.2018

знаю я эту песню 

"объясни мне сейчас, пожалей дурака, а распятье оставь на потом.."

"онемел Спаситель и топнул в сердцах по водной глади ногой: "Ты и верно дурак!" - И Андрей в слезах побрел с пискарями домой.."

но вот я допер до многих моментов, многое изучил, я за эти месяца и всякие напряжения и сопротивления и пины и платы и папы-мамы многое чего изучил 

но сейчас, говорю же, не код же прошу написать за меня - наведите, подскажите, че не так то?

ну край уже по времени - я старался=( и стараюсь

ЕвгенийП пишет:

artur769 пишет:

почитаю всё обязательно, спасибо

сейчас только надо последнее действие доделать

так не бывает.

Вы знаете песню "Наутилуса" "Прогулки по воде"? Там святой апостол Андрей просит Спасителя научить его ходить по воде аки по суху. Христос ему пытается объяснить - "пойди, повиси на распятии, и тогда будешь ходить как я", а тот ему, ну, "я, конечно, повишу там, но пока ты меня научи как ходить-то". Тот ему - "сначала повиси", Андрей снова - "да повишу, но ты пока научи". И так по кругу. 

Понимаете, чтобы ходить по воде программировать, нужно сначала повисеть на распятии изучить основы, а потом ходить делать проекты и учиться особо не надо - само получится.

Но именно в таком порядке! Наоборот - не работает!

artur769
Offline
Зарегистрирован: 04.11.2018

я переоценил свои возможности, я многое на себя взял, я был слишком самонадеянным, каюсь

при этом никто этого у меня не отнимет, что я столько всего узнал для гумманитария за этот месяц..

вот только никак эта при чем главная вещь не становится в очередь=(

ЕвгенийП пишет:

artur769 пишет:

почитаю всё обязательно, спасибо

сейчас только надо последнее действие доделать

так не бывает.

Вы знаете песню "Наутилуса" "Прогулки по воде"? Там святой апостол Андрей просит Спасителя научить его ходить по воде аки по суху. Христос ему пытается объяснить - "пойди, повиси на распятии, и тогда будешь ходить как я", а тот ему, ну, "я, конечно, повишу там, но пока ты меня научи как ходить-то". Тот ему - "сначала повиси", Андрей снова - "да повишу, но ты пока научи". И так по кругу. 

Понимаете, чтобы ходить по воде программировать, нужно сначала повисеть на распятии изучить основы, а потом ходить делать проекты и учиться особо не надо - само получится.

Но именно в таком порядке! Наоборот - не работает!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

artur769 пишет:

я не знаю кто такие неофиты и даже ванкую не знаю что такое

Еще одно полезное замечание (хотя, не уверен, что Вы сочтете его полезным):

Если Вы будете писать на Си/Си++ так, как пишете по-русски, Вы никогда не сможете откомпилировать ни одной программы.

Отучайтесь от этой дурной привычки и начинайте (вот прямо сейчас!) писать в соответствии с нормами языка.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

artur769 пишет:

я переоценил свои возможности, я многое на себя взял, я был слишком самонадеянным, каюсь

при этом никто этого у меня не отнимет, что я столько всего узнал для гумманитария за этот месяц..

Вообще-то современные программисты это и есть гуманитарии чистой воды. Просто обычно в народе гуманитарий приравнивается к балбесу, что по факту не верно.

bwn
Offline
Зарегистрирован: 25.08.2014

Артур, есть старый анекдот: "Чем этого лечить, проще нового сделать". Вот с вашим кодом, именно так. Кошмарный набор звуков, в который вы уперлись и считаете за симфонию. Хотите самый простой и не очень затратный по времени совет? Сразу дам, а пользоваться, нет, решайте сами. Сейчас берете рулон туалетной бумаги и подробно расписываете сверху вниз все варианты в которых может находиться ваш светофор, озаглавливаете их A,B,C........ Потом, расписываете условия, при которых и как эти варианты могут изменяться. Аналогичный алгоритм делаете для ваших кнопок. Когда будет перед глазами, эту херню можно попытаться сложить в одну кучу. Это имеет какое-то отношение к конченным автоматам, но признаюсь потихоньку, я их тоже не знаю. Евгений там начал объяснять, но только застращал, Мурами, Миллями.)))
Пока алгоритм не родится, дальше говорить не о чем.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Круто!!!

Начинающему замахнуться на программу в 700 строк!!!
Ай да Гайвер, ай да заводила )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

берете рулон туалетной бумаги и подробно расписываете сверху вниз все варианты в которых может находиться ваш светофор, озаглавливаете их A,B,C........ Потом, расписываете условия, при которых и как эти варианты могут изменяться. Аналогичный алгоритм делаете для ваших кнопок. Когда будет перед глазами, эту херню можно попытаться сложить в одну кучу. 

Дая я ж книжку дал и даже страницу указал, где всё это расписывается как раз для светофора. Но "надо сначала дожать, а почитаем потом" :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ЕвгенийП пишет:

 "надо сначала дожать, а почитаем потом" :)

если умеем.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

Просто обычно в народе гуманитарий приравнивается к балбесу, что по факту не верно.

Вторая часть утверждения нуждается в доказательстве.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Дая я ж книжку дал и даже страницу указал, где всё это расписывается как раз для светофора. Но "надо сначала дожать, а почитаем потом" :)

Я иногда, на себя примеряю. Вы, действительно, выучили это давно и делаете на автомате. Но ментор под боком, на начальном этапе, очень полезен. Вспоминаю, как не столь давно, долго сидел и медитировал на блинка без делея, типа, баран на новые ворота. Попалась статья Лешака и вдруг, чудо, все само сложилось.
Писать ни за кого не буду, настолько доброта не распространяется. Код он вставить сумел, сам достаточно много начертал, попал в цейтнот, поверим, бывает. Даже если студиоз, проспавший на лекции, усвоить материал ему придется, напишет все сам с корректирующими пинками. Это ИМХО.

artur769
Offline
Зарегистрирован: 04.11.2018

Кто-нибудь может сказать, почему продолжает работать-то основной режим одновременно с другими? Понимаю, что со временем связано.. А другие режимы, связанные со временем "закрываются"...

Читаю со страницы 8 ту книжку, только пока что максимум о чем мне книжка эта говорит, так это о массивах и алгоритмах, а мне нужно решить вопрос с непрерывающейся работой. Или меня не читали, или не поняли, что с системой "горения" перекрёстков проблем нет, или что-то другое предлагают... Не знаю пока

Вот того Лешака тоже начал читать

b707
Offline
Зарегистрирован: 26.05.2017

artur769 пишет:
Кто-нибудь может сказать, почему продолжает работать-то основной режим одновременно с другими?

вы там что-то странное пишете - что он работает спониженной яркостью? - я не понима, как это возможно - но мне почему-то кажется. что это ключ к решению проблемы.

как любят говорить в детективах - "найдем. почему там понижкенная яркость - найдем и того, кому это выгодно" :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

artur769 пишет:
а мне нужно решить вопрос с непрерывающейся работой.
Да, нет, Вам нужно решить вопрос с организацией (архитектурой) Вашей программы. Если Вы его решите, то Вы напишете 100 строк, а не 700, которые будут отлично работать. А Вы пытаетесь отладить изначально кривую по архитектуре программу.

artur769
Offline
Зарегистрирован: 04.11.2018

b707 пишет:

artur769 пишет:
Кто-нибудь может сказать, почему продолжает работать-то основной режим одновременно с другими?

вы там что-то странное пишете - что он работает спониженной яркостью? - я не понима, как это возможно - но мне почему-то кажется. что это ключ к решению проблемы.

как любят говорить в детективах - "найдем. почему там понижкенная яркость - найдем и того, кому это выгодно" :)

поставлено так, что при запуске системы включается стандартный режим, и он горит хорошо и ярко

а да, с пониженной якростью, дергано, то есть мигая, как будто что-то его и хочет само выключить, но не может - это когда что-то другое включаешь

 

изначально работает стандартный режим

если выбрать что угодно другое, например, аварийный режим или вход в ручной - все это осуществляется, но при этом на фоне остается стандартный, и чтобы не включал я, стандартный работает себе под шумок и мешает выполнению других режимов, опять же, например, аварийный режим затормаживается (мигают желтые сигналы с интервалом - 1 секунда), и даже режим this_mode = 12, который принудительно ставит все используемые pin'ы в LOW, не может отключить стандартный

 

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

artur769 пишет:
а мне нужно решить вопрос с непрерывающейся работой.
Да, нет, Вам нужно решить вопрос с организацией (архитектурой) Вашей программы. Если Вы его решите, то Вы напишете 100 строк, а не 700, которые будут отлично работать. А Вы пытаетесь отладить изначально кривую по архитектуре программу.

вы все-таки ведете к варианту массивов, говоря об изменении архитектуры? так я вижу то, что написано в книге с 8 страницы - или я ошибаюсь? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я веду к построению автомата. Массив - это инструмент, а не архитектура.

artur769
Offline
Зарегистрирован: 04.11.2018

ЕвгенийП пишет:

Я веду к построению автомата. Массив - это инструмент, а не архитектура.

дайте пожалуйста определение автомата относительно ардуино? что вы имеете в виду?

просто по мне то кривое, что вот сейчас здесь никому не нарвится, и есть автомат, при чем такой сильный, что не выключается - сам же все переключает...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

artur769 пишет:

ЕвгенийП пишет:

Я веду к построению автомата. Массив - это инструмент, а не архитектура.

дайте пожалуйста определение автомата относительно ардуино? что вы имеете в виду?

Для начала: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82

artur769
Offline
Зарегистрирован: 04.11.2018

andriano пишет:

artur769 пишет:

ЕвгенийП пишет:

Я веду к построению автомата. Массив - это инструмент, а не архитектура.

дайте пожалуйста определение автомата относительно ардуино? что вы имеете в виду?

Для начала: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82

я подумал, что это специфический термин автора;)

спасибо, стало легче!=) идем дальше

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

artur769 пишет:

просто по мне то кривое, что вот сейчас здесь никому не нарвится, и есть автомат, при чем такой сильный, что не выключается - сам же все переключает...

Программирование образами? Этто что-то новое...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

artur769 пишет:

просто по мне то кривое, что вот сейчас здесь никому не нарвится, и есть автомат, при чем такой сильный, что не выключается - сам же все переключает...

Для того, Вам и дали книгу. Только надо сначала читать и разбираться, а потом программировать. А Вы всё норовите наоборот.

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Для того, Вам и дали книгу. Только надо сначала читать и разбираться, а потом программировать. А Вы всё норовите наоборот.

Ну,да. Слоган, "мы пойдем другим путем", вдалбливали в головы нам. Нынче, все желают своим, единственно верным. Да не будет путь их тернист.

a5021
Offline
Зарегистрирован: 07.07.2013

DIYMan пишет:
Строчка this_mode != 11;  - это просто сравнение, причём - в никуда.

Небольшой офтопик: очень странная конструкция, причем, реакция компилятора на нее странная не менее. В краткой форме записи компилятор выдает предупреждение, а если записать в развернутом виде, т.е. this_mode = this_mode ! 11, ошибку. В том, что ошибку, странности никакой, а то, что предупреждение -- странно.

b707
Offline
Зарегистрирован: 26.05.2017

a5021 пишет:

DIYMan пишет:
Строчка this_mode != 11;  - это просто сравнение, причём - в никуда.

Небольшой офтопик: очень странная конструкция, причем, реакция компилятора на нее странная не менее. В краткой форме записи компилятор выдает предупреждение, а если записать в развернутом виде, т.е. this_mode = this_mode ! 11, ошибку. В том, что ошибку, странности никакой, а то, что предупреждение -- странно.

Вроде все логично

Первый вариант

this_mode != 11;

- вполне легальное сравнение, с одной стороны переменная целого типа, с другой - числовая константа. Единственная странность в этой строчке, что результат сравнения никак не используется - поэтому компилятор выдает варнинг. Но ошибки тут нет.

Второй вариант

this_mode = this_mode ! 11

 - ошибка синтаксиса, оператор "!" - унарный

 

a5021
Offline
Зарегистрирован: 07.07.2013

Тогда другой вопрос: эквивалентны ли выражения var (operator) = const  и var = var (operator) const ? Выходит, не эквивалентны. Всегда думал иначе, от чего и непонятки.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

a5021 пишет:

Тогда другой вопрос: эквивалентны ли выражения var (operator) = const  и var = var (operator) const ? Выходит, не эквивалентны. Всегда думал иначе, от чего и непонятки.

Неэквивалентны т.к. конструкция "(operator) =" ошибочна.

a5021
Offline
Зарегистрирован: 07.07.2013

Почему? a += b; разве ошибочна?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

+ - бинарная операция (в данном контексте), а ! - унарная.