#1 2017-10-11 00:34:13

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Затея какая: от нажатия кнопки должен загореться один светодиод. По истечении 10 секунд первый светодиод должен погаснуть, а второй зажечься тоже на 10 секунд. При этом всем, нужно при нажатии второй кнопки весь этот процес прервать и вернуться в основную программу. Вот взял чужой скетч и на его основе пытаюсь реализовать. Второй LED либо совсем не зажигается, либо зажигается автоматически. Может другой подход к реализации должен быть, не через milles() ?

const int button1Pin = 5;
const int button2Pin = 3;
const int led1Pin = 13;
const int led2Pin =4 ;
unsigned long led1OnTime;
unsigned long led2OnTime;
//bool led1On;                             //Изначально было влючены везде эти переменные, но я их отключил и разницы в работе не увидел.
//bool led2On;

void setup() {                              /////////SETUP/////////
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
//led1On = false;
//led2On = false;
}
                                       
void loop(){                                 /////////LOOP/////////

if (digitalRead(button1Pin) == HIGH) {       //Кнопка1 нажата, лед включен, статус вкл,
digitalWrite(led1Pin, HIGH);
//led1On = true;
led1OnTime = millis();
}

if (digitalRead(button2Pin) == HIGH) {       //Кнопка2 нажата, лед включен, статус вкл,
digitalWrite(led2Pin, HIGH);
//led2On = true;
led2OnTime = millis();   
}

//if(led1On)
if(millis() - led1OnTime > 10000) {
digitalWrite(led1Pin, LOW);
//led1On = false;

}

//if(led2On)
if(millis() - led2OnTime > 10000) {   
digitalWrite(led2Pin, LOW);
//led2On = false;
}
}

Редактировался ForestCrow (2017-10-11 01:08:45)

#2 2017-10-11 10:36:48

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Я пробовал. Пробовал с булин переменными, но вторая лампа либо вообще не зажигается, либо зажигается сама в цикле, либо постоянно горит. Топо не хватает либо знаний, либо клепки, либо вообще подход ложный, либо все вместе. Сюда обращаюсь только в крайних случаях, после нескольких дней самостоятельных поисков решений когда уже опускаются руки, не люблю напрягать других людей и вообще кайфую когда получается у самого, но тут уже резерв терпения закончился. Сам терпеть не могу когда люди не включают мозг и хотят, что бы все за них сделали. По этому прошу более конкретной помощи со скетчем, либо действительно дельного совета куда копать. То за что этот скетч отвечает я прекрасно знаю, но не знаю как из него сделать то что нужно.

P.S.

Я не программер, я самоучка, что в компьютерной тематике, что в программировании ардуины. С компьютерами я больше 15 лет работаю и было у кого спросить, то в программировании даже посоветоваться, кроме форума не с кем.  Хотя есть мысли пойти на курсы программирования и этим зарабатывать на жизнь, но это пока мысли, сейчас я битву с ардуиной проигрываю(.

#3 2017-10-11 10:59:03

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Да простит меня, Вячеслав Азаров)

void loop(){                                 /////////LOOP/////////

if (digitalRead(button1Pin) == HIGH) {       //Кнопка1 нажата, лед включен, статус вкл,
digitalWrite(led1Pin, HIGH);
led1OnTime = millis();
}

if(led1OnTime && millis() - led1OnTime > 10000) {
digitalWrite(led1Pin, LOW);
led1OnTime = 0;
digitalWrite(led2Pin, HIGH);
led2OnTime = millis();   
}

if(led2OnTime && millis() - led2OnTime > 10000) {   
digitalWrite(led2Pin, LOW);
led2OnTime = 0;
}

if (digitalRead(button2Pin) == HIGH) {
digitalWrite(led1Pin, LOW);
led1OnTime = 0;
digitalWrite(led2Pin, LOW);
led2OnTime = 0;
}

}

Пиво?

#4 2017-10-11 12:17:44

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

) Осталось выбить у Лесной Вороны. Только, похоже, что там даже спасибо не дождёшься.((

#5 2017-10-11 12:27:10

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Уважаемый, GREEN! Я пробовал подобным способом, но у меня не получилось. Пока, что код не работает. Горит 13, при нажатии, гаснет. У меня сейчас клиент по компу, закончу посмотрю скеч, может я что то нахомутал не так. А за отзыв на пой призыв о помощи ОГРОМНОЕ СПАСИБО. А как заработает без проблем с меня пивасик)). Я обязательно отпишусь сегодня.

#6 2017-10-11 12:33:09

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Ну надо же! Беру свои слова обратно.)
А пивасик пож. Вячеславу Азарову. А лучше водка!)

#7 2017-10-11 13:32:33

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Уважаемый, GREEN! Вроде код работает, это я начал переводить кнопки с резисторов на INPUT_PULLUP. Но печему то отрабатывает по 15 секунд вместо 10. Опять таки пока посмотрел поверхностно.

#8 2017-10-12 20:48:04

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

GREEN, огромное спасибо! Код работает, на его основе вроде разобрался с таймером этого типа, уже пишу сам, не подсматривая в подсказки)). Переписал его под конкретные нужны: в место леда бузер, а потом сирена. Запуск с концевика.
Теперь столкнулся с другой проблемой: нужна звук с пьезоизлучателя разных тонов в цикле, с возможностью его отключить. Не проблема его запустить чем то типа кнопка и несколько раз скопировать код, но хочу поставить эту часть кода вызывать как функцию, но не понимаю как при вызове функции, она стартовала. Как сделать в виде функции знаю.

#define button1Pin 5        
#define BUZZER 2
unsigned long interv;

void setup() {                              /////////SETUP/////////

pinMode(button1Pin, INPUT_PULLUP);
}
                                        
void loop(){                                 /////////LOOP/////////
boolean button_1 = !digitalRead(button1Pin);


if (button_1 == HIGH) {
  tone(BUZZER,600,500);
interv = millis();  
}

if(interv&&millis() - interv > 500) {
interv = 0;
tone(BUZZER, 300,500);
interv = millis();
}

if(interv&&millis() - interv > 500) {
interv = 0;
tone(BUZZER, 300);
interv = millis();
}

}

Редактировался ForestCrow (2017-10-12 20:56:32)

#9 2017-10-12 20:53:58

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Код Вячеслав Азарова интересный, но я его пока не понимаю. Оператор switch еще не использовал, но хочу освоить.

#10 2017-10-12 21:14:03

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

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

Редактировался ForestCrow (2017-10-12 21:15:33)

#11 2017-10-13 09:20:33

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Я всегда говорю что один из вариантов научиться - это посмотреть как твою задачу решают другие. Пусть даже за деньги/пиво/водку...)
Вячеслав Азаров, а я обычно пишу типа next(state), дабы не придумывать метки для каждого (следующего) состояния автомата, особенно когда их много.)

#12 2017-10-13 11:05:15

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Так с бузером мне смогут показать как выйти из ситуации? Тупо не могу запустить автоцикл. Есть еще мысль постоянно инвертировать состояние/флаг, наверное заработает, но мне кажется это будет некорректный код.  Может именно по этой теме есть у кого-то литература, статья?

#13 2017-10-14 13:14:18

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Вячеслав Азаров пишет:

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

Согласен. Но я ленивый (как и все мы). Поэтому, зачем делать лишние телодвижения? Вопрос риторический.)

#14 2017-10-14 13:47:35

ForestCrow
Участник
Зарегистрирован: 2017-02-08
Сообщений: 15

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Короче , я понял, тут хрен дождешься реальной помощи, в основном все советуют учить язык, напрягать мозги и т.п. GREENу еще раз спасибо за реальную помощь, благодаря его коду я понял работу millis(). Куда пиво отправлять?)

#15 2017-10-14 13:58:31

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

А что делать! Это жИзнь!
- Вы знаете, что такое гусь?
- Знаю.
- Вы знаете, что такое шейка, ножка, крылышко! Вы знаете, как я люблю гуся!
))

#16 2017-10-14 14:01:01

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Вячеслав Азаров пишет:

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

А зелёному пиво - как слону дробина!)))

Редактировался Green (2017-10-14 14:01:33)

#17 2017-10-14 14:27:23

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Как минимум. И не только кормить, но и ухаживать. Но спросите об это лучше...)

Редактировался Green (2017-10-14 14:27:46)

#18 2017-10-14 14:44:41

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

ForestCrow пишет:

Короче , я понял, тут хрен дождешься реальной помощи, в основном все советуют учить язык, напрягать мозги и т.п. GREENу еще раз спасибо за реальную помощь, благодаря его коду я понял работу millis(). Куда пиво отправлять?)

Ну а как Вы хотите? Не напрягая мозги получить всё готовое?
Вы поймите правильно. Никто не будет просто ТАК на Вас тратить своё время. Заради чего? Если только уж совсем делать нечего (бывают исключения), либо на минуту делов.) Направление дали - а дальше уж сами, но разжовывать... Обижаться не надо - это жИзнь.) И дело не в пиве. Пиво - это чисто для приличия.)

#19 2017-10-14 19:34:42

Nefreemen
Участник
Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 666

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

Вячеслав Азаров пишет:
Green пишет:

А что делать! Это жИзнь!
- Вы знаете, что такое гусь?
- Знаю.
- Вы знаете, что такое шейка, ножка, крылышко! Вы знаете, как я люблю гуся!
))

Да, вы правы, жизнь это поедание одних существ другими. Но, что бы съесть гуся его нужно пол года кормить!

4 месяца smile, и в основном пасти smile.

#20 2017-10-15 10:43:51

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: Вроде с таймерами разобрался, но никак не могу реализовать задуманное.

А кормить разве нет? Не может быть!)

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела