2 ZAZ-965. Вы давно не пишете в тетрадях в косую линейку, А при чтении не называете буквы в слове. Вот так и здесь. И чем дальше будете писать такие сокращение, тем быстрее будете писать код и больше разбираться в нем. А тексты продвинутых Си-шников они даже мной не читаются, хотя работают. И самое противное если хочешь развиваться, то к этому надо стремиться. ПС: А почему на эту конструкцию не прореагировал? btm1 = btm1 <<1| digitalRead(btm1_pin); if((btm1 &3)==2){ Вот это и есть странная конструкция.
Такая запись: Код (C++): digitalWrite(Led1_pin, Led1 =0);// это включает digitalWrite(Led1_pin, Led1 =1);// это выключает не фишка, а ацкий адъ. Ну нафига тут вообще переменная, если состояние пина указывается явно? На то и переменные, чтобы в них предварительно помещался результат какого то действия, а каков результат не понятно до выполнения. И еще, писать HIGH и LOW не дЕбилизм. Если продолжить эту мысль, то писать digitalWrite тоже дебилизм, только PORTB |= 1<<5 и тд.
Вот поэтому учитесь, а не учите. 1 и 0 могут иметь разный смысл в зависимости от использования. Для состояния пина это HIGH и LOW. Для логики это true и false. Чтобы не запутаться надо не экономить нажатия кнопок, а писать как можно подробнее. Как тут уже говорили - пишется код один раз, а читается десятки. Ваше рацпредложение не только бесполезно , но и вредно. И не только это.
Я и учусь и учу. А вот принимать или отказываться это дело каждого. Код не бульварная газета. Ему не надо быть понятным всем. В обычных скечах народ тупит не по детски. Что на них оринтироваться. Предлагаю ориентироваться на себя. Код должен быть понятен пишушему. Но если у него затык, то его проблема что не прочтут этот код другие.
Когда у вас будет больше сотни программ, да пройдет время полгода и более, будете смотреть на свои каляки маляки и тупить что это и как это. Код должен быть понятным всем, тогда будет понятен и себе.
Действительно, это моя ошибка, скорее опечатка, я этот код именно для форума написал, в итоге запутал все. Сейчас попробую еще раз описать свою задачу. Спойлер: код Код (C++): if(digitalRead(pin)==HIGHT)// digitalWrite(lamp, HIGHT);//включили ламу и она светит пока на pin есть digitalWrite(led, HIGHT);//диод мигнул при включении delay(500); //я понимаю, что делай стопорит весь МК, но для моего скетча это не критично digitalWrite(led, LOW); // else{ // иначе лампа не светит, то есть на pin у меня идет сигнал LOW digitalWrite(lamp, LOW);} По сути мне нужно мигнуть диодом, при включении лампочки, этих лампочек у меня несколько, а мигать я хочу одним диодом, сигнализируя только включение лампочек. С языками программирования я только начинаю знакомиться, поэтому пока не использую сложные конструкции. Как я представляю себе процесс на "русском языке". С включением лампочек все понятно, есть сигнал светит, нет сигнала не светит. С одиночным импульсом сложнее, в голове я себе представляю такую конструкцию: Код (C++): if(digitalRead(pin)==HIGHT)// digitalWrite(lamp, HIGHT);//включили ламу и она светит пока на pin есть //Сюда я вставляю некую функцию которая может описана в setup или вначале всего кода. И она мигает мне светодиодом. Соответственно мне нужно описать цикл Код (C++): digitalWrite(led, HIGHT); delay(500); digitalWrite(led, LOW); и просто вставлять его в нужных мне местах, какой то переменной что ли. От знающих людей, я хотел бы получить совет, через какого оператора это реализовать, быть может еще небольшой пример, который будет понятен новичкам. Возможно мои представления о написании кода, далеки от истины и реализация должна быть совсем иная.
Задачу я свою решил, но пришлось идти в "обход". Реализовал через переменную, которая привязана вообще к другой кнопке, которая перед этим нажимается и отпускается. 2rkit Ваш пример я внимательно изучил, но все равно получается, что я остаюсь в цикле при удержании "HIGH" на "pin" и как решить задачу при которой "кнопка нажата, один диод светит, а второй один раз мигает" я так и не могу понять. Вот кусок скетча с моим решением: Спойлер: code Код (C++): int val=0; void loop() { if(digitalRead(knopka)==HIGH)//если кнопка нажата ... { if (millis() -previousMillis >500) { previousMillis = millis(); val++; } } else if(val>=5) { digitalWrite(box, 1); delay(100); digitalWrite(box, 0); } if(digitalRead(pin)==HIGH)// digitalWrite(lamp, HIGH);//включили ламу и она светит пока на pin есть "1" else{ // иначе лампа не светит, то есть на pin у меня идет сигнал LOW digitalWrite(lamp, LOW);} if(digitalRead(pin)==HIGH && val>=5)// digitalWrite(led, HIGH);//диод мигнул при включении delay(100); //я понимаю, что делай стопорит весь МК, но в моем случае десятая доля секунды значение не имеет. digitalWrite(led, LOW); // val = 0; //Обнуляем переменную, что бы диод больше не мигал. } Меня этот вариант устраивает на 99%, но хочу понять как это делать правильно.