Включение светодиода одной кнопкой а отключене другой

Ильяс
Offline
Зарегистрирован: 26.01.2017

Ребятя помогите)))

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

Логика вроде как не сложная но явстал в ступар((( с чего начать копать 

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

Ильяс пишет:

с чего начать копать 

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

Просто словами, чётко и ясно напишите логику работы программы. Не крик души, как у Вас, а чёткую точную логику. 

Попробуйте, а я подскажу, что дальше делать.

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

Да вроде понятно. И кажется я догадываюсь в чем ступор - в мигающем, параллельно работающим кнопкам, светодиоде небось ? Хотя может все и хуже :)

Ильяс пишет:
с чего начать копать

Если попытаться упростить задачу - какой вариант вы можете одолеть самостоятельно ? Просто вкл/выкл светодиода без реле двумя кнопками получится ? А то черт его знает что подсказывать, просто написать неинтересно, вы же должны помучиться :)

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Morroc пишет:

просто написать неинтересно, вы же должны помучиться :)

дед Фрейд танцует в гробу.

с какого перепуга кто-то должен мучиться?

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

Чтобы нам тут было веселее :) oO

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Morroc пишет:

Чтобы нам тут было веселее :) oO

Маркиз де Сад одобряет этот пост.

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

Привет ему, давно не виделись :)

Ильяс
Offline
Зарегистрирован: 26.01.2017

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

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

Ильяс пишет:

ребята помогите я в программироване нуль(((

Это так печально... ( Вам сюда https://code.org/learn

А чтобы не скучали вот вам скетч, который включает светодиод при замыкании 2го пина на землю (

#define LED       13
#define SWITCH_ON 2

int LED_State = LOW;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(SWITCH_ON, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(SWITCH_ON) == LOW) {
    delay(50);
    if (digitalRead(SWITCH_ON) == LOW) {    
      LED_State = HIGH;  
    }
  }
  digitalWrite(LED, LED_State);
}

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

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

Ильяс пишет:

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

Я же Вам сказал, что делать в посте №1. И сказал, что помогу, если будете делать, что сказано. Почему не делаете? Желаете на блюдечке с голубой каёмочкой? Самому делать западло? Тогда топайте в Ищу исполнителя или делайте, что говорят

Ильяс
Offline
Зарегистрирован: 26.01.2017

я подумал можно же отключать светодиод рестартом)))

так что осталось сделать 

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

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

Ах ты... жук ! Вот что лень животворящая делает :) Вот так будет мигать


#define LED       13
#define SWITCH_ON 2

int LED_State = LOW;
int SW_State = LOW;
unsigned long time;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(SWITCH_ON, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(SWITCH_ON) == LOW) {
    delay(50);
    if (digitalRead(SWITCH_ON) == LOW) {    
      SW_State = HIGH;  
    }
  }
  if (SW_State == HIGH) {
    if ((millis() - time) > 1000 ) {
      time = millis(); 
      if (LED_State == LOW) LED_State = HIGH; else LED_State = LOW;
    }
    digitalWrite(LED, LED_State);
  }
}

А вот реле такие выкрутасы подключить не помогут ! бе бе бе

Ильяс
Offline
Зарегистрирован: 26.01.2017

не помогут? т.е это не рельно реализовать? 

Ильяс
Offline
Зарегистрирован: 26.01.2017

Спасибо за пример!!!

 

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

Ильяс пишет:

не помогут?

Фокусы с ресетом ? Вряд ли ) А вот изучение программирования хотя бы по code.org может быть...

 

Ильяс пишет:

т.е это не рельно реализовать? 

Оно почти реализовано. Такой же "светодиод", но на отдельной ноге и мигает (включается) только 1 раз.

Совсем никаких мыслей нет по этому поводу ? )

Ильяс
Offline
Зарегистрирован: 26.01.2017

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

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

Внекай конкретно, внекай.  Как внекнешь, расскажешь!  :))))))))

Ильяс
Offline
Зарегистрирован: 26.01.2017

Вы же говорите почти реализовано... 

Я поробывал прописать  К 13 выходу +12 выходу ну что бы одновремено моргали.. НЕ  неполучаеться короче наченает 12 выход моргать а 13 молчит(( как так то? 

#define LED       13
#define LED       12
#define SWITCH_ON 2
 
Morroc
Offline
Зарегистрирован: 24.10.2016

Это все, что вы прописали ? Можете пояснить вашу логику ? Ну т.е. что по вашему вы сделали ?

Действительно... как так то ? )

Даю наводку - можно скопировать вот эту часть

  if (SW_State == HIGH) {
    if ((millis() - time) > 1000 ) {
      time = millis(); 
      if (LED_State == LOW) LED_State = HIGH else LED_State = LOW;
    }
    digitalWrite(LED, LED_State);
  }

и поправить её под другую ногу с реле

Ильяс
Offline
Зарегистрирован: 26.01.2017

Я подумал... для начало надо сделать хотябы что бы два выхода включались 13 и 12,  Затем прописать что бы 12 выкл через 5 сек но теперь тока вкл 12 выход... (моргание диода я откинул на задний план он не так важен...)


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

моргает оно вот тут

digitalWrite(LED, LED_State);

и LED - это конкретная нога. чтобы две ноги моргали вместе - должно быть так

digitalWrite(LED, LED_State);

digitalWrite(RELAY, LED_State);

соответственно вверху, где вы прописали 12, должно быть тоже две - одна LED, а другая RELAY

 

hijin
Offline
Зарегистрирован: 20.08.2017

А не проще взять простой RS тригер правда светодиод будет постоянно гореть а реле будет работать

Совет может и тупой но начать програмировать я только собираюсь

или попробуй так

Включение по условию и выключение по условию
например если К1 вкл и К2 вкл выход вкл
     если К1 выкл и К2 выкл выход выкл
     третьего не дано

Можеш посьотреть чтото очень похожее по єтой ссьлке Это упрравление насосом в колодце поциклу когда вода касается верхнего датчика насос вкл когда вода опускается ниже нижнего датчика выкл . Также подобный прэкт у Амперки можеш посмотреть на YouTube.

http://arduinoprom.ru/arduino/206-reguljator-urovnja-vody-v-bake.html

http://wiki.amperka.ru/projects:barrel

Ав этой ссылке конкретный ответ на твой вопрос просмотри видео и можеш скачать скетч

Как установить ArduBlock Программирование Arduino блоками - YouTube

может я слишком назойлив но попробуй вот этот скетч

bool _trgs1 = 0;
void setup()
{
pinMode(2, OUTPUT);

}
void loop()
{

//Плата:1
if(( (analogRead (1))) == (500)) _trgs1 = 1;
if(( (analogRead (0))) == (500)) _trgs1 = 0;
digitalWrite(2, _trgs1);

}

написал его я сам с помощью FLProg поле 1,5 часогого просмотра первого урока но всего за 5 минут

проверить не могу так как нет ни Ардуинки ни программы эмулятора

аналоговые входы были выбраны не случайно так как этот среч у меня должын работать для кододца где возможно на  входах будет напряжение ниже 5В а также тут введена константа 500 предотвращающая дребезг контактов

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

Не вижу ничего сложного. Главное иметь желание,голову и руки. А скетч решается в легкую

/**/
unsigned long mill;// переменая под millis()
//-----Cl_Led----------------------------------------------
// класс светодиод
class Cl_Led {
  protected:
    const byte pin;// нога
    const bool inv;// инверсия
    bool led;// состояние светодиода
    unsigned long time, past; // время включ,внут таймер
    bool statON = 0; // 1 - отработка вкл паузы
    bool statblink = 0; // 1 отработка мигания
  public:
    /* конструктор Cl_Led
      описание подключить светодиод
      ввод  _pin:пин ноги
            _inv:инверсия вывода
      вывод    нет
    */
    Cl_Led (byte _pin, bool _inv): pin(_pin), inv(_inv) {}
    /* функция setup()
      описание для нормальной работы вставить в тело программы setup()
      ввод     нет
      вывод    нет
    */
    void setup() {
      pinMode(pin, OUTPUT);
      OFF();
    }
    /* функция ON()
      описание включить светодиод
      ввод    нет
      вывод   нет
    */
    void ON() {
      digitalWrite(pin, led = !inv);
      statON = 0;
      statblink = 0;
    }
    /* функция OFF()
      описание выключить светодиод
      ввод    нет
      вывод   нет
    */
    void OFF() {
      digitalWrite(pin, led = inv);
      statON = 0;
      statblink = 0;
    }
    /* функция ON()
      описание включить светодиод на время
      ввод    _time: длительность вкл в миллисек
      вывод   нет
    */
    void ON(unsigned long _time) {
      time = _time;
      statON = 1;
      statblink = 0;
      digitalWrite(pin, led = !inv);
      past = mill;
    }
    /* функция blink()
      описание мигать светодиодом
      ввод    _time: длительность полупериода в миллисек
      вывод   нет
    */
    void blink(unsigned long _time) {
      time = _time;
      statON = 0;
      statblink = 1;
      digitalWrite(pin, led = !led);
      past = mill;
    }
    /* функция loop()
      описание для нормальной работы вставить в тело программы loop()
      ввод    нет
      вывод   нет
    */
    void loop() {
      if (statON && mill - past > time) OFF();
      if (statblink && mill - past > time) {
        digitalWrite(pin, led = !led);
        past = mill;
      }
    }
};
//----Cl_Btn-----------------------------------------------
// класс кнопка
class Cl_Btn {
  protected:
    const byte pin;// нога кнопки
    void   (*Do)();//обработчик нажатия кнопки
    unsigned long past; // время включ,внут таймер
    bool btn, old_btn;
  public:
    /* конструктор Cl_Btn
      описание подключить кнопку
      ввод  _pin:пин ноги
            _inv:инверсия вывода
      вывод   нет
    */
    Cl_Btn (byte _pin, void (*_Do)())
      : pin(_pin), Do(_Do) {}
    /* функция setup()
      описание для нормальной работы вставить в тело программы setup()
      ввод  нет
      вывод нет
    */
    void setup() {
      pinMode(pin, INPUT_PULLUP);
      old_btn = digitalRead(pin);
    }
    /* функция loop()
      описание для нормальной работы вставить в тело программы loop()
      ввод  нет
      вывод нет
    */
    void loop() {
      bool new_btn = digitalRead(pin);
      if (!new_btn && old_btn) {
        old_btn = 0;
        (*Do)();
      }
      if (new_btn && !old_btn) {
        old_btn = 1;
      }
    }
};
//-----Компоновка----------------------------------------------
Cl_Led Led1(/*пин светодиода*/13,/*инверсия*/0);
Cl_Led Relay1(/*пин реле*/12,/*инверсия*/0);
const unsigned long time_5s = 5000; // длительность 5 сек
const unsigned long time_200ms = 200; // длительность 0,2 сек
void DoBtn1() {
  Led1.blink(time_200ms);
  Relay1.ON(time_5s);
}
Cl_Btn Btn1(/*пин кнопки*/2,/*обработчик кнопки*/DoBtn1);
void DoBtn2() {
  Led1.OFF();
}
Cl_Btn Btn2(/*пин кнопки*/3,/*обработчик кнопки*/DoBtn2);
//-----main()----------------------------------------------
void setup() {
  Led1.setup();
  Relay1.setup();
  Btn1.setup();
  Btn2.setup();
}

void loop() {
  mill = millis();
  Led1.loop();
  Relay1.loop();
  Btn1.loop();
  Btn2.loop();
}
/*Скетч использует 1560 байт (4%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 57 байт (2%) динамической памяти, оставляя 1991 байт для локальных переменных. Максимум: 2048 байт.
*/

 

vlakar
Offline
Зарегистрирован: 08.01.2013

Вопрос по сложнее, можно ли на одном порту реализовать такой алгоритм ?

1.в исходном режиме подключена нормальноразомкнутая кнопка и светодиод,

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

Реально это или нет ???

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Я встал в ступар. 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

vlakar пишет:

Вопрос по сложнее, можно ли на одном порту реализовать такой алгоритм ?

1.в исходном режиме подключена нормальноразомкнутая кнопка и светодиод,

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

Реально это или нет ???

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

vvadim
Offline
Зарегистрирован: 23.05.2012

DetSimen пишет:

Я встал в ступар. 

может по 50))))

чел на нобелевку прётся....

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

Penni пишет:
и ардуина будет видеть что нажата кнопка, можно что-то еще делать.
Как это она будет видеть? Надо ещё фототранзистор / фоторезистор расположить рядом с кнопкой и подключить его к ардуине (лучше не прямо, а через wi-fi, чтбы можно было из любой точки процесс контролировать). Тогда будет видеть.

Не, мужики, задача не так проста как кажется. Она даже на "по сложнее" как поскромничал автор вопроса, а, я бы сказал, "на сложнее".

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

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

 Надо ещё фототранзистор / фоторезистор расположить рядом с кнопкой

фототранзистор / фоторезистор не могут видеть (а выто и не знали )

Как минимум камера .

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

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

Как это она будет видеть?

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

А вообще хрень полная :)

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

mobistrike пишет:

фототранзистор / фоторезистор не могут видеть (а выто и не знали )

Как минимум камера .

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

Да и подключать через wi-fi как-то ненадёжно. А ну как там нет wi-fi? Лучше, пожалуй, через спутник.

vlakar
Offline
Зарегистрирован: 08.01.2013

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

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

P.S. конечно если это возможно.

vk007
Offline
Зарегистрирован: 16.06.2015

vlakar пишет:

1.в исходном режиме подключена нормальноразомкнутая кнопка и светодиод,

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

Реально это или нет ???

Или я еще не проснулся, или вы зря троллите вопрошающего.

Анод светодиода через резистор подключается к +5В, катод - к пину. К этому же пину подключается кнопка, второй контакт которой подключается к земле.

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

Единственное, чего надо остерегаться, так это подачи на пин "1" в режиме выхода - нажатие на кнопку спалит пин. Но это уже на совести программиста.

vlakar
Offline
Зарегистрирован: 08.01.2013

Ну вот один толковый ответ из десяти !

vk007 Спасибо !

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

vk007 пишет:

Или я еще не проснулся

Ну, вот, блин! Всё веселье испортил! :(

Просыпаться надо, прежде, чем на форум заходить :)

vk007
Offline
Зарегистрирован: 16.06.2015

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

Ну, вот, блин! Всё веселье испортил! :(

Ой, я Вас прошу! :) Я просто уверен, что сегодня (а также завтра, послезавтра и т.д.) будет еще не один повод повеселиться :) Или Вы можете вспомнить тот выдающийся день, когда какой-нибудь очередной залетный "яженовичок" не задавал действительно тупых вопросов? "Эта музыка будет вечной" :)