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

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Здравствуйте, хочу освоить больше, чем моргать диодом, но не получается. Есть плата 2560, к ней подключены 3 диода и 3 кнопки. Работать должна так: пуск программы, включение генератора псевдослучайных чисел, включение соответствующего диода, нажатие соответствующей(за счет электрики) этому диоду кнопки, возвращение в начало программы. В случае не нажатия кнопки за определенное время, включение всех диодов.  По факту плата просто хаотично постоянно мигает диодами. Вопрос, почему на входные пины не подано напряжение (не нажата кнопка и соответственно не выполняется условие if) а программа все равно идет по циклу и не включаются 3 диода одновременно? Если нажать одну из кнопок просто диоды мигают с большей паузой. Как прервать программно этот цикл? Спасибо.

[code]

// Псевдослучайное включение светодиодов, подключенных к выходам платы 10,12, 13.
//Работать должно так, после нажатия кнопки "РЕСЕТ" на плате, должен в случайном порядке загораться один светодиод и гореть до нажатия соответствующей этому диоду кнопки, далее по циклу 
int ledPin = 10; // объявляем выходные пины платы МЕГА 2560 В3
int ledPin1 = 12;
int ledPin2 = 13;
int inPin = 2; // объявляем пин 2 входом
int inPin1 = 3; // объявляем пин 3 входом
int inPin2 = 4; // объявляем пин 4 входом
int k ; // объявляем переменные для генератора случайных чисел

void setup() 
{
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT); 
  pinMode(inPin, INPUT);
  pinMode(inPin1, INPUT);
  pinMode(inPin2, INPUT); 
} 
  void loop() 
{
 lab: ;  // начало выполнения программы при выполнении условия задачи
  k = random (1, 3); // делаем выбор псевдослучайных чисел от 1 до 3 для включения диодов
delay (100); //  пауза

  if ( k == 1)// проверяем условие, если к=1 то
{
analogWrite (ledPin, 255), analogWrite (ledPin1, 0), analogWrite (ledPin2, 0);// включаем диод на выходе 10, на выходе 12 и 13 отключаем
}
  delay (100); //  пауза
 if (k == 2)// проверяем, если к = 2 то
{
 analogWrite (ledPin, 0), analogWrite (ledPin1, 255), analogWrite (ledPin2, 0); // включаем диод на выходе 12, на выходе 10 и 13 отключаем
}
  delay (100); //  пауза
  if (k == 3)// проверяем, если к =3 то
{
 analogWrite (ledPin, 0), analogWrite (ledPin1, 0), analogWrite (ledPin2, 255); // включаем диод на выходе 13, на выходе 10 и 12 отключаем
}  

 delay (1000);//  пауза 
 if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab;
}
if (digitalRead(inPin1) == HIGH) // если на пин 3 подано напряжение
{
  goto lab;
}
if (digitalRead(inPin2) == HIGH) // если на пин 4 подано напряжение
{
  goto lab;
}
delay (1000);//  пауза
analogWrite (ledPin, 255), analogWrite (ledPin1, 255), analogWrite (ledPin2, 255);// включаем диоды на выходе 10,  12 и 13 

}

[/code]

 

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

INPUT_PULLUP

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

Alexandr0202 пишет:

Вопрос, почему на входные пины не подано напряжение (не нажата кнопка и соответственно не выполняется условие if) а программа все равно идет по циклу

а куда ей еще идти, если loop() - это цикл? - если вы нажали какую-нить кнопку - вы переходите по goto на метку lab,  а если не нажали - переходите на ту же lab просто потому что loop закончился

Внешне между этими переходами никакой разницы нет

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

Alexandr0202 пишет:

  pinMode(inPin, INPUT);
  pinMode(inPin1, INPUT);
  pinMode(inPin2, INPUT); 

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

Alexandr0202 пишет:

k = random (1, 3); // делаем выбор псевдослучайных чисел от 1 до 3 для включения диодов

На самом деле, здесь выбирается не число от 1 до 3, как написано в комментарии, а число от 1 до 2. RTFM!

Что касается Вашего "цикла" - это свойство функции loop. Как только она завершается, она тут же начинается снова. RTFM!

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

sadman41 пишет:
INPUT_PULLUP
Он же на HIGH проверяет

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

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

Что касается Вашего "цикла" - это свойство функции loop. Как только она завершается, она тут же начинается снова. RTFM!

ждем вопрос "как остановить loop()??!!"

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

Alexandr0202 пишет:

Вопрос, почему на входные пины не подано напряжение (не нажата кнопка и соответственно не выполняется условие if) а программа все равно идет по циклу

а куда ей еще идти, если loop() - это цикл? - если вы нажали какую-нить кнопку - вы переходите по goto на метку lab,  а если не нажали - переходите на ту же lab просто потому что loop закончился

Внешне между этими переходами никакой разницы нет

Т.е. если условие if не выполняется то программа не ждет а идет дальше?

 Вот в другой редакции, но почему то кнопку нажимаю она не переходит по метке lab а идет до конца...

[code]

// Псевдослучайное включение светодиодов, подключенных к выходам платы 10,12, 13.
//Работать должно так, после нажатия кнопки "РЕСЕТ" на плате, должен в случайном порядке загораться один светодиод и гореть до нажатия соответствующей этому диоду кнопки, далее по циклу 
int ledPin = 10; // объявляем выходные пины платы МЕГА 2560 В3
int ledPin1 = 12;
int ledPin2 = 13;
int inPin = 2; // объявляем пин 2 входом
int inPin1 = 3; // объявляем пин 3 входом
int inPin2 = 4; // объявляем пин 4 входом
int k ; // объявляем переменные для генератора случайных чисел

void setup() 
{
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT); 
  pinMode(inPin, INPUT);
  pinMode(inPin1, INPUT);
  pinMode(inPin2, INPUT); 
} 
  void loop() 
{
 lab: ;  // начало выполнения программы при выполнении условия задачи
  k = random (1, 3); // делаем выбор псевдослучайных чисел от 1 до 3 для включения диодов
delay (1000); //  пауза

  if ( k == 1)// проверяем условие, если к=1 то
{
analogWrite (ledPin, 255), analogWrite (ledPin1, 0), analogWrite (ledPin2, 0);// включаем диод на выходе 10, на выходе 12 и 13 отключаем
}
 delay (1000); //  пауза
  if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab;
}
 if (k == 2)// проверяем, если к = 2 то
{
 analogWrite (ledPin, 0), analogWrite (ledPin1, 255), analogWrite (ledPin2, 0); // включаем диод на выходе 12, на выходе 10 и 13 отключаем
}
  delay (1000); //  пауза
 if (digitalRead(inPin1) == HIGH) // если на пин 3 подано напряжение
{
  goto lab;
} 
  if (k == 3)// проверяем, если к =3 то
{
 analogWrite (ledPin, 0), analogWrite (ledPin1, 0), analogWrite (ledPin2, 255); // включаем диод на выходе 13, на выходе 10 и 12 отключаем
}  
delay (1000);//  пауза 
if (digitalRead(inPin2) == HIGH) // если на пин 4 подано напряжение
{
  goto lab;
}
delay (10000);//  пауза
analogWrite (ledPin, 255), analogWrite (ledPin1, 255), analogWrite (ledPin2, 255);// включаем диоды на выходе 10,  12 и 13 
delay (10000);//  пауза
}
[/code]

 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

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

 

потому приведите схему подключения кнопок. Без схемы тут ничего сказать нельзя.

 Схему пока не нарисую, просто с выхода +5В подключаю проводок к одному из 2,3,4 PWM пинов, с миганием диодов так работало :)

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

Alexandr0202 пишет:

Т.е. если условие if не выполняется то программа не ждет а идет дальше?

а чего ей ждать-то? пока условие выполнится? - так вы этого в коде не заказывали :)

 

Цитата:
Вот в другой редакции, но почему то кнопку нажимаю она не переходит по метке lab а идет до конца...

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

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

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

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

Я частично тыком, так как в тех учебниках что я читал( Brian W.Evans и еще несколько), не написано можно ли оператору if сравнивать несколько условий одновременно, как задать паузу между if и GOTO..... А спросить не у кого мне 44 года мои друзья не каждый компьютером может пользоваться.

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

Alexandr0202 пишет:

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

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

if ((k > 9) && (H < 3))  // если  k > 9 И h <3

Цитата:
как задать паузу между if и GOTO.....

никак

Цитата:
мне 44 года мои друзья не каждый компьютером может пользоваться.

жуть, это где ж такое? Гватемала какая-нить? мне за 50 у меня в РФ нет знакомых. не умеющих обращаться с компом. У меня маме 80 - она активная пользовательница ПК :)

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

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

sadman41 пишет:
INPUT_PULLUP
Он же на HIGH проверяет


Будет на LOW проверять. Хаос-то у него от floating pin, полагаю.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

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

Спасибо что помогаете, я пробовал все равно идет до конца

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

sadman41 пишет:
Хаос-то у него от floating pin, полагаю.
Да, нет, хаос тут, скорее всего, в голове,а не в пинах.

Я попросил у ТС схему, он ответил "рисовать не буду". Ну, не будет, так не будет - сам себе злобный Буратино. Откуда Вам известно, что там нет резистора на землю? Шар подсказал? По мне так, пусть рисует сначала, а потом поговорим. А то если ради каждой ленивой задницы шар тереть - шаров не напасёшься. 

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

Alexandr0202 пишет:

 Схему пока не нарисую

Ну, на нет и суда. Тогда сами ищите свои ляпы. Потребуется помощь, рисуйте и выкладывайте.

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

b707 пишет:
Гватемала какая-нить?
Не клевещите на Гватемалу. Работал я там как-то - очень симпатичное место!

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

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

 Потребуется помощь, рисуйте и выкладывайте.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Всем спасибо, заработала. Может есть ветка на форуме где можно задавать вопросы новичку непосредственно по программированию (как например про несколько сравнений в if или про паузу между if  и GOTO) ткните носом пожалуйста.

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

дел

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

Alexandr0202 пишет:

Я частично тыком, так как в тех учебниках что я читал( Brian W.Evans и еще несколько), не написано можно ли оператору if сравнивать несколько условий одновременно, как задать паузу между if и GOTO..... А спросить не у кого мне 44 года мои друзья не каждый компьютером может пользоваться.

1. Оператор if вообще не работает с условиями. Он работает исключительно с логическими выражениями. А сколько условий включать в логическое выражение: одно, десять, сто - решает программист.

2. Если у Вас возникает потребность задать паузу между if и goto, значит, у Вас ошибка в логике программы. Такого не должно быть от слова "совсем". 

3. Тут практически все завсегдатаи старше Вас. Самый молодой недавно отчитался о достижении 50-летия.

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

Alexandr0202 пишет:

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

 Потребуется помощь, рисуйте и выкладывайте.

Эта схема неработоспособна:

1. При разомкнутых кнопках состояние входов не определено.

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

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

andriano пишет:

3. Тут практически все завсегдатаи старше Вас. Самый молодой недавно отчитался о достижении 50-летия.

я думаю что ТС это и имел в виду - "мне всего 44, мы комп еще не проходили"...

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Можно ли сделать так, что бы программа  пропускала паузы если условие(к=1, к=2) не выполняется, что бы быстрее дойти до к=3 и если можно то чем?


if ( k == 1)// проверяем условие, если к=1 то
{
analogWrite (ledPin, 255), analogWrite (ledPin1, 0), analogWrite (ledPin2, 0);// включаем диод на выходе 10, на выходе 12 и 13 отключаем
}
 delay (5000); //  пауза !эту паузу пропустить если к не 1
  if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
 {
  goto lab ;
}
 if (k == 2)// проверяем, если к = 2 то
{
 analogWrite (ledPin, 0), analogWrite (ledPin1, 255), analogWrite (ledPin2, 0); // включаем диод на выходе 12, на выходе 10 и 13 отключаем
}
  delay (5000); //  пауза !эту паузу пропустить если к не 2 
 if (digitalRead(inPin1) == HIGH) // если на пин 3 подано напряжение
{
  goto lab ;
} 
  if (k == 3)// проверяем, если к =3 то
{
 analogWrite (ledPin, 0), analogWrite (ledPin1, 0), analogWrite (ledPin2, 255); // включаем диод на выходе 13, на выходе 10 и 12 отключаем
}  
delay (5000);//  пауза 
if (digitalRead(inPin2) == HIGH) // если на пин 4 подано напряжение
{
  goto lab ;

 

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

Alexandr0202 пишет:

Можно ли сделать так, что бы программа  пропускала паузы если условие(к=1, к=2) не выполняется, что бы быстрее дойти до к=3 и если можно то чем?

Расскажи, что ты знаешь за фигурные скобки {} и операцию "запятая"? 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

DetSimen пишет:

Alexandr0202 пишет:

Можно ли сделать так, что бы программа  пропускала паузы если условие(к=1, к=2) не выполняется, что бы быстрее дойти до к=3 и если можно то чем?

Расскажи, что ты знаешь за фигурные скобки {} и операцию "запятая"? 

Фигурные скобки определяют начало и конец блока функции или блока выражений, таких как функция void loop() или выражений типа for и if. За открывающейся фигурной скобкой всегда должна следовать закрывающаяся.

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

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Вставить паузу в фигурные скобки операции if ?

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

1. Не забудьте прочитать пост #19 - у Вас всегда будут глючные "нажатия кнопок" выскакивать.

2.

Alexandr0202 пишет:
дойти до к=3

а Ваш random уже выдаёт 3? А то, с тех пор как я Вам написал, что он выдаёт только 1 и 2, я не видел исправленного кода.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

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

1. Не забудьте прочитать пост #19 - у Вас всегда будут глючные "нажатия кнопок" выскакивать.

2.

Alexandr0202 пишет:
дойти до к=3

а Ваш random уже выдаёт 3? А то с тех пор как я Вам написал, что он выдаёт только 1 и 2 я не видел исправленного кода.

 Притянуть к земле это я знаю, пока так работает четко, да исправил на 4. Спасибо, как здесь репутацию поднимают? 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Вместо if в конце лучше применить http://arduino.ru/Reference/SwitchCase

k=1 это не условие, это присвоение

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

inspiritus пишет:

Вместо if в конце лучше применить http://arduino.ru/Reference/SwitchCase

Что это даст в дух словах объясните, мне if проще применять (я очень давно бейсик учил и там применял)

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

Alexandr0202 пишет:

Что это даст в дух словах объясните, мне if проще применять (я очень давно бейсик учил и там применял)

Александр, обьясните лучше, в чем смысл этой ветки? Вы про каждую запятую будете в форуме спрашивать?  Если у вачс в прошлом опыт только с бейсиком - для начала найдите в инете любой "краткий курс С++" и прочитайте его от начала и до конца - многие ваши вопросы отпадут.

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

Alexandr0202 пишет:

Можно ли сделать так, что бы программа  пропускала паузы если условие(к=1, к=2) не выполняется, что бы быстрее дойти до к=3 и если можно то чем?


Можно. Например переставить паузу туда, где она нужна. Вы хоть напишите как это должно работать (ну т.е. когда пауза то нужна?)

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

Alexandr0202 пишет:

Что это даст в дух словах объясните, мне if проще применять (я очень давно бейсик учил и там применял)

Если у вачс в прошлом опыт только с бейсиком - для начала найдите в инете любой "краткий курс С++" и прочитайте его от начала и до конца - многие ваши вопросы отпадут.

У меня есть "Введение в язык СИ", я еще несколько таких книг прочел, но там нигде нет того что программа не ждет выполнения условия if а идет дальше (я немного с языком LD знаком там пока кнопку не нажмешь ничего не произойдет) и много других нюансов. Я в том году 3 месяца не мог решить эту проблему, пришел на форум(не этот) и задал вопрос "Как остановить цикл" меня осмеяли и я бросил это программирование.  Сейчас появилось время и желание попробовать опять. С помощью Вашего форума за пару часов я продвинулся больше чем с книжками за несколько месяцев, за что огромное спасибо Вам.

И если позволите, я так понял что при IF у меня нужно ждать пока условие отработает по паузе и только потом сработает по кнопке, а если использовать SWITCH Case то нажатие кнопки в любое время остановит условие?

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Morroc пишет:

 Можно. Например переставить паузу туда, где она нужна. Вы хоть напишите как это должно работать (ну т.е. когда пауза то нужна?)

это должно работать так, генератор выдал псевдослучайное число, например 3, оператор IF проверяет условие на каждую цифру от 1 до 3 последовательно и в случае выполнения одного из условий зажигает соответствующий диод на время паузы. Проблема в том, что если выпала цифра 3 то паузы 1-го и 2-го увеличивают время ожидания.

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

Alexandr0202 пишет:

И если позволите, я так понял что при IF у меня нужно ждать пока условие отработает по паузе и только потом сработает по кнопке, а если использовать SWITCH Case то нажатие кнопки в любое время остановит условие?

условие срабатывает только в ту единсвенную микросекунду, когда программа выполняет эту конкретную строчку. Это относится как к IF так и к switch. Программа ничего не ждет.

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

Alexandr0202 пишет:

это должно работать так, генератор выдал псевдослучайное число, например 3, оператор IF проверяет условие на каждую цифру от 1 до 3 последовательно и в случае выполнения одного из условий зажигает соответствующий диод на время паузы. Проблема в том, что если выпала цифра 3 то паузы 1-го и 2-го увеличивают время ожидания.

это делается так - сначала проверяете цифры на совпадение с каждым из вариантов (либо IF либо switch. разницы нет) - а только после всех трех проверок ставите паузу. Тогда пауза после 1 не будет влиять на проверку 2 и так далее

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

Alexandr0202 пишет:

это должно работать так, генератор выдал псевдослучайное число, например 3, оператор IF проверяет условие на каждую цифру от 1 до 3 последовательно и в случае выполнения одного из условий зажигает соответствующий диод на время паузы. Проблема в том, что если выпала цифра 3 то паузы 1-го и 2-го увеличивают время ожидания.

это делается так - сначала проверяете цифры на совпадение с каждым из вариантов (либо IF либо switch. разницы нет) - а только после всех трех проверок ставите паузу. Тогда пауза после 1 не будет влиять на проверку 2 и так далее

 Если выпала 1 и совпала с одним из значений то оператор if вторым действием (первое сравнение) зажигает на эту паузу диод, а что должен делать вторым действием в Вашем случае?

01
if ( k == 1)// проверяем условие, если к=1 то
02
{
03
analogWrite (ledPin, 255), analogWrite (ledPin1, 0), analogWrite (ledPin2, 0);// включаем диод на выходе 10, на выходе 12 и 13 отключаем
04
}
05
 delay (5000); //  пауза время горения диода  !эту паузу пропустить если к не 1

 

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

Alexandr0202 пишет:

Если выпала 1 и совпала с одним из значений то оператор if вторым действием (первое сравнение) зажигает на эту паузу диод, а что должен делать вторым действием в Вашем случае?

вы себя слышите? - что такое "первое действие", "второе действие" "третье" ???

что мешает сделать так:

if (x == 1) {// зажигаем первый диод}
if (x == 2) {// зажигаем второй диод}
if (x == 3) {// зажигаем третий диод}
// пауза (общая для всех)
// гасим все диоды

 

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

Alexandr0202 пишет:

У меня есть "Введение в язык СИ", я еще несколько таких книг прочел, но там нигде нет того что программа не ждет выполнения условия if а идет дальше

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

Вы всерьез полагаете, что существует исчерпывающий перечень того, что программа НЕ делает?

Цитата:

И если позволите, я так понял что при IF у меня нужно ждать пока условие отработает по паузе и только потом сработает по кнопке, а если использовать SWITCH Case то нажатие кнопки в любое время остановит условие?

При программировании микроконтроллеров под словом "ждать" подразумевается совсем не то, что Вы пока об этом думаете. Если Вы собираетесь программировать микроконтроллеры, Вам совершенно необходимо с этим разобраться. Найдите два исходника "blink" и "blink without delay", внешне их работа выглядит одинаково, но как только мы пытаемся добавить в код какую-нибудь функциональность, оказывается, что с первым это сделать невозможно, а со вторым - сколько угодно. Детально разберитесь с этими двумя примерами. Разбирайтесь, пока не поймете в чем разница. Для контроля советую сделать blink на два светодиода с не кратными периодами, например, один светодиод мигает с периодом 543 мс, а второй - 345 мс.

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

Я смотрю язык LD, чем бы он ни был, опасен для начинающих программистов :)

С делеем бы сначала, а то совсем запутается.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Применяя свич Вы избавитесь от гоуту

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

inspiritus пишет:

Применяя свич Вы избавитесь от гоуту

савершенно ни факт :)

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

Alexandr0202 пишет:
Если выпала 1 и совпала с одним из значений то оператор if вторым действием (первое сравнение) зажигает на эту паузу диод, а что должен делать вторым действием в Вашем случае?

if (k==1) { зажигаем светодиод, делаем паузу }
обратите внимание в каком именно месте пауза относительго блока {}

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

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

Morroc пишет:
язык LD, чем бы он ни был
Это рисовалка для ПЛК. Например, FLProg - упрощённое подобие LD.

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

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

Morroc пишет:
язык LD, чем бы он ни был
Это рисовалка для ПЛК. Например, FLProg - упрощённое подобие LD.

ах вот оно что...

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

вы себя слышите? - что такое "первое действие", "второе действие" "третье" ???

Первое действие это в круглых скобках, второе в фигурных :)
b707 пишет:
что мешает сделать так:
if (x == 1) {// зажигаем первый диод}
if (x == 2) {// зажигаем второй диод}
if (x == 3) {// зажигаем третий диод}
// пауза (общая для всех)
// гасим все диоды

Нехватка опыта и ошибки в мышлении. Я писал код для одного диода, проверял, если работает, то копировал и затем вставлял с изменениями .....

FoxJone
Offline
Зарегистрирован: 19.04.2019

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

Morroc пишет:
язык LD, чем бы он ни был
Это рисовалка для ПЛК. Например, FLProg - упрощённое подобие LD.

Такие вещи надо запрещать, как оружие массового поражения мозга...

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

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

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

Вот теперь точно пора изучать блинк без делей. Можно по примерам, можно тут на форуме поискать. В общем как делать паузы в действиях не останавливая программу.

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

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

Alexandr0202 пишет:

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

Боюсь Вас разочаровать, но это невозможно. Тут надо выбирать, либо вставлять паузы, либо обрабатывать кнопки. А Вы хотите всё и сразу - так не бывает :-)

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

FoxJone пишет:

Такие вещи надо запрещать, как оружие массового поражения мозга...

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

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