Добрый день товарищи помогите разобратья с кодом в чем не верность?
- Войдите на сайт для отправки комментариев
Пнд, 17/06/2019 - 11:58
Moderator : пожалуйста, вставьте код правильно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Суть программы в том что бы были нажаты 3 кнопки не одновременно тогда загориться лампочка. вот так вот просто, а я не пойму что тут не верно. палками не кидайте плиз я только начал познавать.

всё дело в лишних обьявленьях
Можно ткнуть прямов мордой, я их уже и туды и сюды.
Изучите правила, и вставьте код как положено. Тогда можно будет разговаривать.
Можно ткнуть прямов мордой
Пока не вставишь правильно код - нельзя.
Сейчас тебе можно только сказать, что у тебя проблемы в строка №№ ХЗ, ХЗ, ХЗ, ХЗ и вещё в строке №ХЗ.
Вставь нормально код, чтобы были номера строк (только не картинкой, а именно нормально).
byte L1,2,3 и тд объявлен более одного раза, уберите слово byte и будет вам счастье, вам же Дед уже подсказал
уберите слово byte и будет вам ...
многочисленные ошибки компиляции.
ua6em, я предлагаю солидарно придерживаться правил форума. Вы не согласны?
ёёvoid setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); pinMode(12, INPUT); pinMode(11, INPUT); pinMode(9, INPUT); pinMode(2, OUTPUT); pinMode(8, OUTPUT); } void loop() { byte L1; byte L2; byte L3; digitalWrite(2, HIGH); if(digitalRead(12)==0) { byte (L1)=1; } if(digitalRead(11)==0) { byte (L2)=1; } if(digitalRead(9)==0) { byte (L3)=1; } if(L1==1) { digitalWrite(8, HIGH); } if(L1==1&&L2==1&&L3==1) { digitalWrite(13, HIGH); delay(1000); L1==0; L2==0; L3==0; } }извеняюсь.
ёёvoid setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); pinMode(12, INPUT); pinMode(11, INPUT); pinMode(9, INPUT); pinMode(2, OUTPUT); pinMode(8, OUTPUT); } void loop() { byte L1; byte L2; byte L3; digitalWrite(2, HIGH); if(digitalRead(12)==0) { (L1)==1; } if(digitalRead(11)==0) { (L2)==1; } if(digitalRead(9)==0) { (L3)==1; } if(L1==1) { digitalWrite(8, HIGH); } if(L1==1&&L2==1&&L3==1) { digitalWrite(13, HIGH); delay(1000); L1==0; L2==0; L3==0; } }Прочитайте вот здесь "Правила области видимости".
А прочитав, ответьте на вопросы:
1) L1 в строках №№ 12, 18, 32 и 36 - это одна и та же переменная или разные?
2) L2 в строках №№ 13, 22, 32 и 37 - это одна и та же переменная или разные?
3) L3 в строках №№ 14, 26, 32 и 38 - это одна и та же переменная или разные?
Когда у Вас будут ответы на эти вопросы, проблема решится сама собой.
Нормально вставить не получилось? :-)))) Что за ё-мобиль в первой строке? :))))
уберите слово byte и будет вам ...
многочисленные ошибки компиляции.
ua6em, я предлагаю солидарно придерживаться правил форума. Вы не согласны?
согласен!
Благодарю за помощь всех, а почему у меня не запускается конечное if(L1==1&&L2==1&&L3==1)
void setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); pinMode(12, INPUT); pinMode(11, INPUT); pinMode(9, INPUT); pinMode(2, OUTPUT); pinMode(8, OUTPUT); pinMode(10, OUTPUT); pinMode(7, OUTPUT); digitalWrite(12,HIGH); //включение подтягивающего резистора digitalWrite(11,HIGH); //включение подтягивающего резистора digitalWrite(9,HIGH); //включение подтягивающего резистора } void loop() { byte L1=0; byte L2=0; byte L3=0; digitalWrite(2, HIGH); //подача напряжения на резистры if(digitalRead(12)==0) { L1=1; } if(digitalRead(11)==0) { L2=1; } if(digitalRead(9)==0) { L3=1; } if(L1==1) digitalWrite(7, HIGH); if(L2==1) digitalWrite(8, HIGH); if(L3==1) digitalWrite(10, HIGH); if(L1==1&&L2==1&&L3==1) { digitalWrite(13, HIGH); delay(1000); L1=0; L2=0; L3=0; } }Gluck-Truck - надеюсь Вы сами понимаете - но я на всякий случай уточню. Обьявление переменных в строках 16-18 означает. что каждый проход loop() программа будет начинать "с чистого листа", ничего не помня о состоянии перемнных в прошлом цикле.
так что например строчки 39-41 - лишние, L1-L3 и без них всегда будут обнуляться, а не только когда (L1==1&&L2==1&&L3==1)
а почему у меня не запускается конечное if(L1==1&&L2==1&&L3==1)
Что Вы понимаете под словом "не запускается"?
В интерактивной програме когда 3 кнопки нажал, 19 ножка не дает логическую 1. и не загорается диод D1 говорящий что все 3 кнопки были нажаты.
А эти
if(L1==1),if(L2==1),if(L3==1) все три "запускаются" ?Да работает
Поставьте перед строкой №35 печать (в Serial) своих L1, L2 и L3 и посмотрите, чему они равны.
В интерактивной програме когда 3 кнопки нажал, 19 ножка не дает логическую 1
а где там вообще 19 ножка? - в коде такого пина нет, а схема такая мелкая. что не разобрать
Это ножка меги 19. Вроде на картинках с инета такая пин13, но подозрения вызывает раз остальное работает )
19 ножка это Pun13 в саммом начале OUTPUN
Вы сделали то, что я сказал? И что? Все 1-цы печатает? Или как?
19 ножка это Pun13 в саммом начале OUTPUN
вы пишите в одном стиле - если пин в программе обозначен 13 - то нафига сюда какие-то 19 привлекать - чтобы себя и других запутать?
Я не знаю как это сделать разбираюсь.
Serial.print(L1) куда он печатает? =)
В последовательный интерфейс USART.
У Вас только модель, реальной ардуины нет, что ли?
Если только модель, то добавьте туда виртуальный терминал. Это вот так делается:
Потом соедините его с контроллером вот так
Потом в свойствах терминала установите такую же скорость, как у Вас в Serial.begin указана.
Вот туда и будет печатать.
Все условия вида if(L1==1) сработали раз остальные светодиоды зажглись, вроде там действительно 1.
Поподробнее где можно почитать?
#include<SoftwareSerial.h> SoftwareSerial mySerial(3,2); void setup() { mySerial.begin(9600); Serial.begin(9600); pinMode(13, OUTPUT); pinMode(12, INPUT); pinMode(11, INPUT); pinMode(9, INPUT); pinMode(2, OUTPUT); pinMode(8, OUTPUT); pinMode(10, OUTPUT); pinMode(7, OUTPUT); digitalWrite(12,HIGH); //включение подтягивающего резистора digitalWrite(11,HIGH); //включение подтягивающего резистора digitalWrite(9,HIGH); //включение подтягивающего резистора } void loop() { Serial.print("rabotaet"); while(Serial.available()) { } byte L1=0; byte L2=0; byte L3=0; digitalWrite(2, HIGH); if(digitalRead(12)==0) { L1=1; } if(digitalRead(11)==0) { L2=1; } if(digitalRead(9)==0) { L3=1; } if(L1==1) digitalWrite(7, HIGH); Serial.print(L1); Serial.print(L2); Serial.print(L3); if(L1==1&&L2==1&&L3==1) { digitalWrite(13, HIGH); delay(1000); L1=0; L2=0; L3=0; } }замудрили похоже
Или протеус научился дребезжать кнопками.
1. Я Вам как рисовал подключать? Rx -> TX и Tx -> Rx, А Вы как подключили? Наоборот? Делайте как было нарисовано!
2. Причём тут SoftSerial на каких-то левых пинах? Тем более, Вы туда пин 2 всунули, который Вы уже и так в программе используете!!!! Это подключение для обычного аппаратного Serial. Убирайте свой SoftSerial нафиг!
Исправляйте и напечатайте, наконец эти несчастные переменные!
Или протеус научился дребезжать кнопками.
Да, нет, всё проще - я понимаю в чём у него дело (не зря я с ребёнком занимаюсь постоянно :-))), но пусть сначала переменные напечатает :)
Или протеус научился дребезжать кнопками.
Да, нет, всё проще - я понимаю в чём у него дело (не зря я с ребёнком занимаюсь постоянно :-))), но пусть сначала переменные напечатает :)
фигура из трёх пальцев? ;-)
фигура из трёх пальцев? ;-)
Если честно, то не понял.
Но по работе ТС - напечатает переменные, сам что-то поймёт (да и на будущее этот приём освоит), а выложить решение на блюдечке, завтра опять будет "памахите". Я готов тратить своё время, чтобы помочь понять и научиться, но не на предоставление готовых решений. Готовые решения - это в другом разделе.
Я правльно мыслю?
boolean L1 = 0 ; boolean L2 = 0; boolean L3 = 0; byte diod_1 = 8; byte diod_2 = 10; byte diod_3 = 7; byte knopka_1 = 12; byte knopka_2 = 11; byte knopka_3 = 9; byte bigdiod = 13; void setup() { pinMode(bigdiod, OUTPUT); pinMode(knopka_1, INPUT); pinMode(knopka_2, INPUT); pinMode(knopka_3, INPUT); pinMode(2, OUTPUT); pinMode(diod_1, OUTPUT); pinMode(diod_2, OUTPUT); pinMode(diod_3, OUTPUT); digitalWrite(knopka_1,HIGH); //включение подтягивающего резистора digitalWrite(knopka_2,HIGH); //включение подтягивающего резистора digitalWrite(knopka_3,HIGH); //включение подтягивающего резистора } void loop() { Serial.begin(9600); Serial.print("rabotaet"); digitalWrite(2, HIGH); if(digitalRead(knopka_1)==0) { digitalWrite(diod_1,HIGH); L1=1; Serial.println(L1); } if(digitalRead(knopka_2)==0) { digitalWrite(diod_2,HIGH); L2=1; Serial.println(L2); } if(digitalRead(knopka_3)==0) { digitalWrite(diod_3,HIGH); L3=1; Serial.println(L3); } Serial.println(L1); Serial.println(L2); Serial.println(L3); if(L1==1&&L2==1&&L3==1) { digitalWrite(bigdiod, HIGH); delay(1000); L1=0; L2=0; L3=0; digitalWrite(diod_1,LOW); digitalWrite(diod_2,LOW); digitalWrite(diod_3,LOW); } }Может есть подобные решения я бы сообразил, :?
чтобы понять надо сделать то, что сказал ЕвгенийП...
Вы сделали???
Что выводится в сериал строками 41-43?
Может есть подобные решения я бы сообразил, :?
Вы когда-нибудь напечатаете эти три переменные? Или так и будем в прятки играть? Чему они равно в тот момент, когда Вы считаете, что светодиод на 13-ом должен светиться?
не получается либо я не понимаю. почему не печатает виртуальный монитор =((((((((((((((((((((((((((((((
у меня черное окно не запускается а у людей запускается на видюшках
Serial.print("rabotaet"); даже не печатает
Скорость выставлена правильная? Окно показывается? Что в окне?
9600 в терминале и я прописал в программу
Serial.begin(9600);окна нет. не всплывает.
окна нет. не всплывает.
Так оно у Вас закрыто просто. Во время работы кликнете правой кнопкой мышки на терминал и из меню выберите "Virtual terminal" там внизу должно быть. Окно появится.
Только Вы поставьте хоть где-нибудь println - оно ж у Вас всё в одну строку печатается.
Скажите я безнадежен? ;(
Скажите я безнадежен? ;(
Да звиздец, ты тугой.
Подскажите пожалуйста так же правилеьнее только все равно не работает
boolean L1 = 0 ; boolean L2 = 0; boolean L3 = 0; byte diod_1 = 8; byte diod_2 = 10; byte diod_3 = 7; byte knopka_1 = 12; byte knopka_2 = 11; byte knopka_3 = 9; byte bigdiod = 13; void setup() { pinMode(bigdiod, OUTPUT); pinMode(knopka_1, INPUT); pinMode(knopka_2, INPUT); pinMode(knopka_3, INPUT); pinMode(2, OUTPUT); pinMode(diod_1, OUTPUT); pinMode(diod_2, OUTPUT); pinMode(diod_3, OUTPUT); digitalWrite(knopka_1,HIGH); //включение подтягивающего резистора digitalWrite(knopka_2,HIGH); //включение подтягивающего резистора digitalWrite(knopka_3,HIGH); //включение подтягивающего резистора } void loop() { Serial.begin(9600); Serial.print("rabotaet"); digitalWrite(2, HIGH); while (L1==1&&L2==1&&L3==1) { if(digitalRead(knopka_1)==0) { L1=1; Serial.println(L1); if(digitalRead(knopka_2)==0) { L2=1; Serial.println(L2); if(digitalRead(knopka_3)==0) { L3=1; Serial.println(L3); } } } } Serial.println(L1); Serial.println(L2); Serial.println(L3); digitalWrite(13, HIGH); delay(1000); L1=0; L2=0; L3=0; }Скажу, что Вы не умеете пользоваться протеусом или не умеете его настраивать.
Ну, тогда берите живую ардуину и делайте на ней.
Делайте, что хотите, но напечатайте эти переменные. Пока Вы их не напечатаете, Вы ничего не поймёте.
И кстати, делайте это всегда - смотрите на переменные, не работайте вслепую.
Как напечатаете - скажете что там.
Код из #7 работает - D4 загорается при нажатии 3х кнопок. Расходимся :)
Подскажите пожалуйста так же правилеьнее только все равно не работает
Здесь написан бред.
Вернитесь и изначальной программе и напечатайте наконец переменные.
Без этого дальше идти нельзя. И деже не дёргайтесь.