прервать цикл и начать сначала

Yurkov
Offline
Зарегистрирован: 09.11.2018

Добрый день!

С ардуино знаком плохо, но очень нужно реализовать следеющее:

Есть кнопка и диод.

При замыкании кнопки, диод включается на 4 секунды и выключается. Цикл остановился, кнопка замкнута, диод не горит. Ждем размыкания кнопки.

При размыкании кнопки происходит тоже самое- диод включается на 4 секунды и отключается. Цикл остановился, кнопка разомкнута, диод не горит. Ждем замыкания кнопки.

 

 

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

Yurkov пишет:

С ардуино знаком плохо, но очень нужно реализовать следеющее:

В добрый путь!  Реализуй. 

Yurkov
Offline
Зарегистрирован: 09.11.2018

DetSimen пишет:

Yurkov пишет:

С ардуино знаком плохо, но очень нужно реализовать следеющее:

В добрый путь!  Реализуй. 

Хоть намекните.

Есть цикл void loop() и if  else. Если кнопка нажата, включаем диод на 4 секунды и выключаем.Но цикл повторяется, проверяет, что кнопка всё еще нажата и снова включает диод на 4 секунды (что в итоге выглядит как постоянное свечение диода). Как его остановить, до размыкания кнопки??

MaksVV
Offline
Зарегистрирован: 06.08.2015

ищите библиотеку титановый велосипед для тактовой кнопки. Её написал наидобрейший человек. Там генерируются события и нажатия и отпускания и много чего ещё. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

флаг вам в руки, причём я серьезно . 

Olvin
Offline
Зарегистрирован: 01.08.2018

Yurkov пишет:

Добрый день!

С ардуино знаком плохо, но очень нужно реализовать следеющее:

Есть кнопка и диод.

При замыкании кнопки, диод включается на 4 секунды и выключается. Цикл остановился, кнопка замкнута, диод не горит. Ждем размыкания кнопки.

При размыкании кнопки происходит тоже самое- диод включается на 4 секунды и отключается. Цикл остановился, кнопка разомкнута, диод не горит. Ждем замыкания кнопки.

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

Yurkov
Offline
Зарегистрирован: 09.11.2018

Olvin пишет:

Yurkov пишет:

Добрый день!

С ардуино знаком плохо, но очень нужно реализовать следеющее:

Есть кнопка и диод.

При замыкании кнопки, диод включается на 4 секунды и выключается. Цикл остановился, кнопка замкнута, диод не горит. Ждем размыкания кнопки.

При размыкании кнопки происходит тоже самое- диод включается на 4 секунды и отключается. Цикл остановился, кнопка разомкнута, диод не горит. Ждем замыкания кнопки.

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

Мне нужно реализовать и больше к программированию не возвращаться, так как вряд ли когда-нибудь пригодится.

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

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

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

Yurkov пишет:

Мне нужно реализовать и больше к программированию не возвращаться, так как вряд ли когда-нибудь пригодится.

Тогда самый дешевый вариант - заказать работу в разделе Ищу исполнителя.

a5021
Offline
Зарегистрирован: 07.07.2013

Yurkov пишет:
Мне нужно реализовать и больше к программированию не возвращаться, так как вряд ли когда-нибудь пригодится.

Тогда расходимся. Общение с вами тоже никогда не пригодится.

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

Yurkov пишет:

Мне нужно реализовать

А, как ты думаешь. есть ещё кто-то, кроме тебя, кому нужно, чтобы у тебя это было реализовано? Ты ведь именно такого человека здесь ищешь, который реализует за тебя, правильно? Боюсь тебя огорчить, но никому, кроме тебя, это не нужно. 

Так что: нужно - реализуй. Не можешь - закажи за деньги.

Yurkov
Offline
Зарегистрирован: 09.11.2018

Ворота пишет:

Yurkov пишет:

Мне нужно реализовать

А, как ты думаешь. есть ещё кто-то, кроме тебя, кому нужно, чтобы у тебя это было реализовано? Ты ведь именно такого человека здесь ищешь, который реализует за тебя, правильно? Боюсь тебя огорчить, но никому, кроме тебя, это не нужно. 

Так что: нужно - реализуй. Не можешь - закажи за деньги.

Умник? Видали таких. Да вот только я не ищу кого-то, кому это было бы нужно и уж тем более того, кто сделает это за меня. Тут люди помощи ищут, не так ли? Вот и я написал, что мне нужно, что я использую и какая проблема и только один человек сказал в какую сторону смотреть.

MaksVV
Offline
Зарегистрирован: 06.08.2015

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

Yurkov
Offline
Зарегистрирован: 09.11.2018

Полазив в инете в поиске простого решения, кое что нашел и написал вот такое:

const int PIN_BUTTON = 10;     // номер входа, подключенный к кнопке
const int ledPin =  3;      // номер выхода светодиода
 

bool button_state = false;
 
void setup()
{
   //Serial.begin(115200);
   //Serial.println("Test button ...");
   pinMode(PIN_BUTTON, INPUT); 
   pinMode(ledPin, OUTPUT);   
}
 
void loop(){
// Фиксируем нажатие кнопки
   if( digitalRead(PIN_BUTTON) == HIGH && !button_state ){
      button_state = true;
      //Serial.println("Press key");
      digitalWrite(ledPin, HIGH);
      delay(4000);
      digitalWrite(ledPin, LOW);
      
   }
// Фиксируем отпускание кнопки
   if( digitalRead(PIN_BUTTON) == LOW && button_state ){
      button_state = false; 
      digitalWrite(ledPin, HIGH);
      delay(4000);    
      digitalWrite(ledPin, LOW);
   }
}

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

P.S. На руку не грешите, если рядом включаю блок питания, реакция такая же)

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

pinMode(PIN_BUTTON, INPUT_PULLUP);

Yurkov
Offline
Зарегистрирован: 09.11.2018

sadman41 пишет:

pinMode(PIN_BUTTON, INPUT_PULLUP);

Если пишу INUP_PULLUP, то перестает подоваться питание при ОТжатии кнопки на нужные 4 секунды, на ПИНе тишина.

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

При INPUT_PULLUP нажатие кнопки вызывает состояние LOW на пине, а отжатие - HIGH. Но с задержками на delay()-ах нормальной работы не ждите. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

MaksVV пишет:

ищите библиотеку титановый велосипед для тактовой кнопки. Её написал наидобрейший человек. Там генерируются события и нажатия и отпускания и много чего ещё. 

почему бы не последовать совету, а? Нет ведь будем топик на 100 страниц разводить

#include <Button.h>
#define BUTTON 0 // программный номер кнопки

Button test;

void setup() {
pinMode (13, OUTPUT);
digitalWrite (13, 0);

//настройки кнопки
test.NO();                         // N.O. Normal Open button
test.pullUp();                     // подтяжка к питанию
test.duration_bounce       (  50); // время антидребезга
test.duration_click_Db     ( 250); // время дабл клика
test.duration_inactivity_Up(4000); // время в течение которого горит светодиод после отпускания
test.duration_inactivity_Dn(4000); // время в течение которого горит светодиод после нажатия
test.duration_press        ( 500); // время лонг клика
test.button(2);                    // пин ардуино, куда подключена кнопка, программный номер у неё будет 0
                                   // остальные кнопки при наличии пишутся через запятую
}

void loop() {
test.read();

if (test.event_click_Up     (BUTTON) == 1) {digitalWrite (13,1);}  // отпустили  - включаем
if (test.event_click_Dn     (BUTTON) == 1) {digitalWrite (13,1);}  // нажали     - включаем

// если таймеры неактивности кончились - выключаем
if (test.event_inactivity_Up(BUTTON) == 1) {digitalWrite (13,0);}
if (test.event_inactivity_Dn(BUTTON) == 1) {digitalWrite (13,0);}

}

 

Yurkov
Offline
Зарегистрирован: 09.11.2018

MaksVV пишет:

MaksVV пишет:

ищите библиотеку титановый велосипед для тактовой кнопки. Её написал наидобрейший человек. Там генерируются события и нажатия и отпускания и много чего ещё. 

почему бы не последовать совету, а? Нет ведь будем топик на 100 страниц разводить

#include <Button.h>
#define BUTTON 0 // программный номер кнопки

Button test;

void setup() {
pinMode (13, OUTPUT);
digitalWrite (13, 0);

//настройки кнопки
test.NO();                         // N.O. Normal Open button
test.pullUp();                     // подтяжка к питанию
test.duration_bounce       (  50); // время антидребезга
test.duration_click_Db     ( 250); // время дабл клика
test.duration_inactivity_Up(4000); // время в течение которого горит светодиод после отпускания
test.duration_inactivity_Dn(4000); // время в течение которого горит светодиод после нажатия
test.duration_press        ( 500); // время лонг клика
test.button(2);                    // пин ардуино, куда подключена кнопка, программный номер у неё будет 0
                                   // остальные кнопки при наличии пишутся через запятую
}

void loop() {
test.read();

if (test.event_click_Up     (BUTTON) == 1) {digitalWrite (13,1);}  // отпустили  - включаем
if (test.event_click_Dn     (BUTTON) == 1) {digitalWrite (13,1);}  // нажали     - включаем

// если таймеры неактивности кончились - выключаем
if (test.event_inactivity_Up(BUTTON) == 1) {digitalWrite (13,0);}
if (test.event_inactivity_Dn(BUTTON) == 1) {digitalWrite (13,0);}

}

 

А где взять Button.h ? Код из первого поста засунуть в библиотеку? Но как это сделать?

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

Yurkov пишет:
Видали таких.
Таких, как я, ты ещё не видал.

MaksVV
Offline
Зарегистрирован: 06.08.2015

тс ты че прикалываешься? вел. код я тебе написал. куда ты там чо вставлять собралсо?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

#18  

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
const int PIN_BUTTON = 10;     // номер входа, подключенный к кнопке
const int ledPin =  3;      // номер выхода светодиода
bool button_state = 1;
 
void setup()
{
   //Serial.begin(115200);
   //Serial.println("Test button ...");
   pinMode(PIN_BUTTON, INPUT_PULLUP); 
   pinMode(ledPin, OUTPUT);   
}
 
void loop(){
// Фиксируем нажатие кнопки
   if( digitalRead(PIN_BUTTON) == !button_state ){
      button_state = !button_state;
      digitalWrite(ledPin, HIGH);
      delay(4000);
      digitalWrite(ledPin, LOW);
  }
}

 

Yurkov
Offline
Зарегистрирован: 09.11.2018

MaksVV пишет:

тс ты че прикалываешься? вел. код я тебе написал. куда ты там чо вставлять собралсо?

Разобрался! Заработало!)

Благодарю!

vosara пишет:

const int PIN_BUTTON = 10;     // номер входа, подключенный к кнопке
const int ledPin =  3;      // номер выхода светодиода
bool button_state = 1;
 
void setup()
{
   //Serial.begin(115200);
   //Serial.println("Test button ...");
   pinMode(PIN_BUTTON, INPUT_PULLUP); 
   pinMode(ledPin, OUTPUT);   
}
 
void loop(){
// Фиксируем нажатие кнопки
   if( digitalRead(PIN_BUTTON) == !button_state ){
      button_state = !button_state;
      digitalWrite(ledPin, HIGH);
      delay(4000);
      digitalWrite(ledPin, LOW);
  }
}

 

Рабочий вариант, но наводки иногда проскакивают, просто прикоснувшись к кнопке.

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

Это не наводки, а дребезг контактов, скорее всго. Кнопка разболтанная или контакт плохой. Наводки - это когда за пин трогаешь и он начинает другое значение давать.

Yurkov
Offline
Зарегистрирован: 09.11.2018

sadman41 пишет:

Это не наводки, а дребезг контактов, скорее всго. Кнопка разболтанная или контакт плохой. Наводки - это когда за пин трогаешь и он начинает другое значение давать.

Тут именно наводки, так как "когда за пин трогаешь и он начинает другое значение давать" ))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

не надо за пин себя трогать! Онищенко запретил.

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

Про пин он ничо не говорил. Нельзя, говорил, трогать себя за joystick, особенно по малалецтву. А то шерсть на руках...

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

Интересно, как он ЭТО на защите работы будет объяснять :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

inspiritus пишет:

Интересно, как он ЭТО на защите работы будет объяснять :)

Про шерсть на ладошках? :))