Добрый день товарищи помогите разобратья с кодом в чем не верность?

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Moderator : пожалуйста, вставьте код правильно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

 

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

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

всё дело в лишних обьявленьях

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Можно ткнуть прямов мордой, я их уже и туды и сюды. 

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

Изучите правила, и вставьте код как положено. Тогда можно будет разговаривать.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Gluck-Truck пишет:

Можно ткнуть прямов мордой

Пока не вставишь правильно код - нельзя.

Сейчас тебе можно только сказать, что у тебя проблемы в строка №№ ХЗ, ХЗ, ХЗ, ХЗ и вещё в строке №ХЗ.

Вставь нормально код, чтобы были номера строк (только не картинкой, а именно нормально).

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

byte L1,2,3 и тд объявлен более одного раза, уберите слово byte и будет вам счастье, вам же Дед уже подсказал

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

ua6em пишет:

уберите слово byte и будет вам ...

многочисленные ошибки компиляции.

ua6em, я предлагаю солидарно придерживаться правил форума. Вы не согласны?

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019
ёё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;
}
}

 

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

извеняюсь. 

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019
ёё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;
}
}

 

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

Прочитайте вот здесь "Правила области видимости".

А прочитав, ответьте на вопросы:

1) L1 в строках №№ 12, 18, 32 и 36 - это одна и та же переменная или разные?
2) L2 в строках №№ 13, 22, 32 и 37 - это одна и та же переменная или разные?
3) L3 в строках №№ 14, 26, 32 и 38 - это одна и та же переменная или разные?

Когда у Вас будут ответы на эти вопросы, проблема решится сама собой.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Нормально вставить не получилось? :-))))  Что за ё-мобиль в первой строке? :))))

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

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

ua6em пишет:

уберите слово byte и будет вам ...

многочисленные ошибки компиляции.

ua6em, я предлагаю солидарно придерживаться правил форума. Вы не согласны?

согласен!

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Благодарю за помощь всех, а почему у меня не запускается конечное 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;
}
}

 

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

Gluck-Truck - надеюсь Вы сами понимаете - но я на всякий случай уточню. Обьявление переменных  в строках 16-18 означает. что каждый проход loop() программа будет начинать "с чистого листа", ничего не помня о состоянии перемнных в прошлом цикле. 

так что например строчки 39-41 - лишние, L1-L3 и без них всегда будут обнуляться, а не только когда (L1==1&&L2==1&&L3==1)

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

Gluck-Truck пишет:

а почему у меня не запускается конечное if(L1==1&&L2==1&&L3==1)

Что Вы понимаете под словом "не запускается"?

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

В интерактивной програме когда 3 кнопки нажал, 19 ножка не дает логическую 1. и не загорается диод D1 говорящий что все 3 кнопки были нажаты.

 

Morroc
Offline
Зарегистрирован: 24.10.2016

Gluck-Truck пишет:
почему у меня не запускается конечное if(L1==1&&L2==1&&L3==1)

А эти if(L1==1), if(L2==1), if(L3==1) все три "запускаются" ?

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Да работает 

Да запускаются 

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

Поставьте перед строкой №35 печать (в Serial)  своих L1, L2 и L3 и посмотрите, чему они равны.

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

Gluck-Truck пишет:

В интерактивной програме когда 3 кнопки нажал, 19 ножка не дает логическую 1

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

Morroc
Offline
Зарегистрирован: 24.10.2016

Это ножка меги 19. Вроде на картинках с инета такая пин13, но подозрения вызывает раз остальное работает )

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

19 ножка это Pun13  в саммом начале OUTPUN 

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

Вы сделали то, что я сказал? И что? Все 1-цы печатает? Или как?

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

Gluck-Truck пишет:

19 ножка это Pun13  в саммом начале OUTPUN 

вы пишите в одном стиле - если пин в программе обозначен 13 - то нафига сюда какие-то 19 привлекать - чтобы себя и других запутать?

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Я не знаю как это сделать разбираюсь.

Serial.print(L1) куда он печатает?  =) 

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

В последовательный интерфейс USART.

У Вас только модель, реальной ардуины нет, что ли?

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

Если только модель, то добавьте туда виртуальный терминал. Это вот так делается:

 

Потом соедините его с контроллером вот так

 

Потом в свойствах терминала установите такую же скорость, как у Вас в Serial.begin указана.

Вот туда и будет печатать.

Morroc
Offline
Зарегистрирован: 24.10.2016

Все условия вида  if(L1==1) сработали раз остальные светодиоды зажглись, вроде там действительно 1.

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Поподробнее где можно почитать? 

#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;
}
}

 

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

замудрили похоже

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

Или протеус научился дребезжать кнопками.

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

Gluck-Truck пишет:

 

1. Я Вам как рисовал подключать? Rx -> TX и Tx -> Rx, А Вы как подключили? Наоборот? Делайте как было нарисовано!

2. Причём тут SoftSerial на каких-то левых пинах? Тем более, Вы туда пин 2 всунули, который Вы уже и так в программе используете!!!! Это подключение для обычного аппаратного Serial. Убирайте свой SoftSerial нафиг!

Исправляйте и напечатайте, наконец эти несчастные переменные!

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

sadman41 пишет:

Или протеус научился дребезжать кнопками.

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

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

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

sadman41 пишет:

Или протеус научился дребезжать кнопками.

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

фигура из трёх пальцев? ;-)

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

ua6em пишет:

фигура из трёх пальцев? ;-)

Если честно, то не понял.

Но по работе ТС - напечатает переменные, сам что-то поймёт (да и на будущее этот приём освоит), а выложить решение на блюдечке, завтра опять будет "памахите". Я готов тратить своё время, чтобы помочь понять и научиться, но не на предоставление готовых решений. Готовые решения - это в другом разделе.

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Я правльно мыслю? 

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);
}
}

 

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Может есть подобные решения я бы сообразил, :? 

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

чтобы понять надо сделать то, что сказал ЕвгенийП...
Вы сделали???

Что выводится в сериал строками 41-43?

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

Gluck-Truck пишет:

Может есть подобные решения я бы сообразил, :? 

Вы когда-нибудь напечатаете эти три переменные? Или так и будем в прятки играть? Чему они равно в тот момент, когда Вы считаете, что светодиод на 13-ом должен светиться?

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

не получается либо я не понимаю. почему не печатает виртуальный монитор =((((((((((((((((((((((((((((((

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

Serial.print("rabotaet"); даже не печатает 

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

Скорость выставлена правильная? Окно показывается? Что в окне?

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

9600 в терминале и я прописал в программу Serial.begin(9600);

 

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

окна нет. не всплывает. 

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

Gluck-Truck пишет:

окна нет. не всплывает. 

Так оно у Вас закрыто просто. Во время работы кликнете правой кнопкой мышки на терминал и из меню выберите "Virtual terminal" там внизу должно быть. Окно появится.

Только Вы поставьте хоть где-нибудь println - оно ж у Вас всё в одну строку печатается.

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Скажите я безнадежен? ;(

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

Gluck-Truck пишет:

Скажите я безнадежен? ;(

Да звиздец, ты тугой. 

Gluck-Truck
Gluck-Truck аватар
Offline
Зарегистрирован: 17.06.2019

Подскажите пожалуйста так же правилеьнее только все равно не работает 

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;
}

 

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

Скажу, что Вы не умеете пользоваться протеусом или не умеете его настраивать.

Ну, тогда берите живую ардуину и делайте на ней. 

Делайте, что хотите, но напечатайте эти переменные. Пока Вы их не напечатаете, Вы ничего не поймёте. 

И кстати, делайте это всегда - смотрите на переменные, не работайте вслепую.

Как напечатаете - скажете что там.

Morroc
Offline
Зарегистрирован: 24.10.2016

Код из #7 работает - D4 загорается при нажатии 3х кнопок. Расходимся :)

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

Gluck-Truck пишет:

Подскажите пожалуйста так же правилеьнее только все равно не работает 

Здесь написан бред.

Вернитесь и изначальной программе и напечатайте наконец переменные.

Без этого дальше идти нельзя. И деже не дёргайтесь.