Помогите!Два скетча в один

Soltexx
Offline
Зарегистрирован: 09.04.2020

Добрый,суть такая,один скетч включает и выключает питание на релюшку. Кнопка без фиксации.

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

/*
   базовый скетч отработки нажатия кнопки с фильтром дребезга контактов
   и включением выключением реле / светодиода по нажатию на кнопку
   
*/
 
Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 
 
 
 
и второй
 
Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 
 

 

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

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

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

Отставить! Тс не вставил код правильно!!

Soltexx
Offline
Зарегистрирован: 09.04.2020

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

Soltexx
Offline
Зарегистрирован: 09.04.2020

Могу скрин кода вставить если что

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

Soltexx пишет:
Могу скрин кода вставить если что

а почитать правила вставки кода? )))
Всё понятно, что нужно и, даже подсказал, как сделать

int PinLed = 13;
int PinPusk = 5;
int PinStop = 6;
void setup() {
pinMode(PinPusk,INPUT_PULLUP);
pinMode(PinStop,INPUT_PULLUP);
digitalWrite(PinLed,LOW);
}

void loop() {
if(digitalRead(PinStop)){
  if(!digitalRead(PinPusk)){
digitalWrite(PinLed,!digitalRead(PinLed)); 
  } 
}else{
digitalWrite(PinLed,LOW);
 }
}

 

Soltexx
Offline
Зарегистрирован: 09.04.2020
/*
   базовый скетч отработки нажатия кнопки с фильтром дребезга контактов
   и включением выключением реле / светодиода по нажатию на кнопку
   
*/

#define button_pin 3   // пин кнопки
#define relay_pin 6    // пин реле

boolean butt_flag = 0;      // флажок нажатия кнопки
boolean butt;               // переменная, харнящая состояние кнопки
boolean flag = 0;           // флажок режима
unsigned long last_press;   // таймер для фильтра дребезга
void setup() {
  pinMode(button_pin, INPUT_PULLUP);   // кнопка подтянута внутренним резистором 
  pinMode(relay_pin, OUTPUT);          // пин реле как выход
}

void loop() {
  butt = !digitalRead(button_pin);  // считать текущее положение кнопки

  if (butt == 1 && butt_flag == 0 && millis() - last_press > 500) {  // если кнопка НАЖАТА, до этого была была ОТПУЩЕНА
    butt_flag = 1;                    // запоминаем, что нажимали кнопку
    flag = !flag;                     // инвертируем флажок
    last_press = millis();            // запоминаем время

    digitalWrite(relay_pin, flag);    // подаём сигнал на пин реле / светодиода
  }
  if (butt == 0 && butt_flag == 1) {  // если кнопка ОТПУЩЕНА, и до этого была НАЖАТА
    butt_flag = 0;                    // запоминаем, что отпустили кнопку
  
  }
}

 

Soltexx
Offline
Зарегистрирован: 09.04.2020
 int onnButton = 3;  //Кнопка "Пуск"
  int offButton = 4;   //Кнопка "Стоп"
  int pinMotor = 6;   // На реле ,светодиод
 int bloc = 1; // Некиий аналог блокконтактов (разомкнут)
void setup() {
  pinMode(onnButton, INPUT_PULLUP); //Кнопка не нажата
  pinMode(offButton, INPUT_PULLUP); //Кнопка не нажата
// при двукнопочном управлении антидребезг не нужен
 pinMode (pinMotor, OUTPUT);
  //
  }
void loop() {
  int vkl = digitalRead (onnButton);   // Опрос кнопки пуск
 if (vkl ==LOW ||  pinMotor == HIGH){ //Нажимаем кнопку "Пуск"
  bloc = 0; //При этом замыкается блокконтакт
 }
  int otkl = digitalRead (offButton); // опрос кнопки стоп
 if(bloc == 0 && otkl ==HIGH){
  digitalWrite(pinMotor, HIGH);} //Включается мотор и удерживается блокконтакт
  else{
    digitalWrite(pinMotor, LOW);
    bloc = 1;
  }
 }

 

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

Soltexx пишет:

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

 
Не проще вторую кнопку выкинуть и вкл/выкл одной кнопкой?  Пины сыканомишь. 
Soltexx
Offline
Зарегистрирован: 09.04.2020

нет,вторая кнопка как страховка,по большому счету и так все устраивает,но хотелось бы получить полный функционал 1 кнопки на вкл и выкл

 

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

ну лана, тогда. Я в извращениях не участвую. 

Soltexx
Offline
Зарегистрирован: 09.04.2020

DetSimen пишет:

ну лана, тогда. Я в извращениях не участвую. 

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

Soltexx
Offline
Зарегистрирован: 09.04.2020

Да и вопрос не стоит нужна ли вторая кнопка,а в обьединении или дополнении скетчей.

nik182
Offline
Зарегистрирован: 04.05.2015

Скетчи одинаковые. Вся разница в переменной block и flag и их реакции на нажатие. Зачем объединять? Можно просто добавить вторую кнопку на другую ногу. Можно существующей кнопке расширить функционал. Можно прочитать про титановый велосипед для тактовой кнопки. http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-taktovoi-knopki и на его основе сделать то,что хочется.  

bwn
Offline
Зарегистрирован: 25.08.2014

Soltexx пишет:

,не вижу тут извращений,вторая кнопка как аварийная кнопка стоп которая расположена в удобном и нужном месте. 

Аварийная кнопка, работающая от МК, это покушение на убийство конечного пользователя, а значит, является BDSM-извращением. Серьезно.

Soltexx
Offline
Зарегистрирован: 09.04.2020

Я вот не пойму, если человеку нужно к примеру такая сборка, хочет он так, так что теперь будем обсасовать это желание или просто можно помочь если есть возможность, если нет возможности просто не пишите ничего, все просто!

nik182
Offline
Зарегистрирован: 04.05.2015

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

Ещё раз повторю. Скетчи почти одинаковые. Объединять их нет никакого смысла. Нужно чуть чуть изменить логику работы. Есть переменная, которая блокирует включение реле. Что мешает при нажатии второй кнопки записать в эту переменную значение соответствующее отсутствию блокировки и тем самым реле отключить? Или нужно разжевать какая переменная за что отвечает и как переменной присвоить значение?   

Soltexx
Offline
Зарегистрирован: 09.04.2020

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

nik182
Offline
Зарегистрирован: 04.05.2015

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

nik182
Offline
Зарегистрирован: 04.05.2015

Soltexx пишет:
Согласен с вами, писать может каждый, но я почему-то подумал что писать нужно по теме, ошибся. Да если не сложно, что убрать и что добавить что б все работало.

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

Soltexx
Offline
Зарегистрирован: 09.04.2020

nik182 пишет:
Прочитал несколько раз, но так и не понял, что должны делать кнопки. Единственное предположение сейчас это то, что при нажатой выкл, при нажатии на вкл мотор должен включиться и работать пока вкл нажата?

кнопка без фиксации №1) должна включить реле по нажатию и выключить по нажатию(то есть нажал и отпустил без удержания) и не должна включать реле если нажата кнопка №2

кнопка без фиксации №2)должна выключать реле по нажатию если оно включено (просто отключать)

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

Soltexx пишет:
я почему-то подумал что писать нужно по теме, ошибся.
Таки да, ошибся. Оно ведь, разным людям нужно разное. Кому-то нравится поп, кому-то попадья, а кому-то и попова дочка. И кто ты такой, чтобы указывать людям что им писать, а что не писать на публичной площадке?

А теперь по сути. Вот ты пишешь:

Soltexx пишет:

кнопка без фиксации №1) должна включить реле по нажатию и выключить по нажатию(то есть нажал и отпустил без удержания) и не должна включать реле если нажата кнопка №2

кнопка без фиксации №2)должна выключать реле по нажатию если оно включено (просто отключать)

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

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

Только так!

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

Ворота, жму руку! я все ждал, когда ж кто-нить напишет этому неучу, что просить форум обьединить два кода по 10 строк - это уже перебор по наглости и лени...

-NMi-
Offline
Зарегистрирован: 20.08.2018

жостка...

nik182
Offline
Зарегистрирован: 04.05.2015

А что должна делать программа программа если нажата и удерживается выкл и нажата вкл ? Можно придумать ещё несколько разных сочетаний, да ещё включить сюда текущее состояние мотора - вертится не вертится. Как советовать, если не знаешь как должно работать? Нарисуйте квадратиками все состояния системы, все типы воздействия типа  нажатие, нажата кнопка, удерживается, отпускается.  Линиями со стрелками в направлении воздействия соедините квадратики согласно Вашему алгоритму работы системы. Полученный алгоритм опишите словами типа: если нажата и удерживается кнопка 1 и если в это время нажимается кнопка 2 и удерживается. то программа ждет опускание одной из кнопок и потом начинает выполнять... На языке СИ, если что, если пишется как if . И остальные слова можно заменить на соответствующие операторы языка. В результате получим работающую программу, учитывающую все состояния системы. Все описанные ранее хотелки покрывают примерно половину состояний. Надо описать что делать программе в остальных случаях.  

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

DetSimen пишет:

ну лана, тогда. Я в извращениях не участвую. 

А что так? У тебя же был изящный код экономящий переменную для пусковой кнопки, чуток поправить мой набросок и взлетит )))