#1 Re: Програмування Arduino » Помогите мне пожалуйста. ардуина, кнопка, реле » 2017-07-19 19:53:16

qwone пише:

Код компилируется, но я не проверял. Одна кнопка запускает, вторая останавливает. Разберетесь напишите и себе.

/*
*/
//---------------Cl_Led---------
//класс Cl_Led управление  светодиодом
class Cl_Led {
    byte _pin;//нога светодиода
    bool _led;// уровень на выводе светодиода
    byte _stat ; //0 готовность к взводу / 1 время до импульса / 2 импульс/3 конец
    uint32_t _time_start, _time_pulse;
    uint32_t _past = 0 ;
  public:
    // конструктор класса
    Cl_Led(byte pin): _pin(pin) {}
    // метод setup()
    void setup() {
      pinMode(_pin, OUTPUT);
      digitalWrite(_pin, _led = 0);
      _stat = 0;
    }
    // метод loop()
    void loop() {
      if (_stat == 1 & millis() - _past >= _time_start) {
        _past = millis();
        digitalWrite(_pin, _led = 1);
        _stat == 2;
      }
      if (_stat == 2 & millis() - _past >= _time_pulse) {
        _past = millis();
        digitalWrite(_pin, _led = 0);
        _stat == 3;
      }
    }
    void pulse(uint32_t time_start, uint32_t time_pulse) {
      _time_start = time_start;
      _time_pulse = time_pulse;
    }
    void stop() {
      digitalWrite(_pin, _led = 0);
      _stat == 3;
    }
};
//---------------Cl_Btn--------
//класс кнопка подключ на питание через резистор 10кОм
class Cl_Btn {
    byte pin; // номер ноги на кнопке
    void (* Do)();// указатель на обработчик
    bool btn, btn_old;
    bool bounce = 0; // антидребезговый флаг
    uint32_t past = 0 ;
  public:
    // конструктор класса
    Cl_Btn( byte _pin, void (* _Do)()): pin(_pin), Do(_Do) {}
    // метод setup()
    void setup() {
      pinMode(pin, INPUT);// подключить кнопку 1 с подтяжкой
      btn = digitalRead(pin); // прочитать реальное значение на выводе};
    }
    // метод loop()
    void loop() {
      if (! bounce && btn != digitalRead(pin)) { // если прошел фронт изм на выводн
        bounce = 1;                              // выставить флаг
        past = millis();                         // сделать временую засветку
      }
      else if ( bounce && millis() - past >= 5 ) { // если прошло антидребезговое время
        bounce = 0;                                // то снять флаг
        btn_old = btn ;
        btn = digitalRead(pin) ;                   // прочитать реальное значение на выводе
        if (!btn_old && btn) Do();
      }
    }
};
//--------------компоновка------------
Cl_Led Led1(/*пин*/12);

void Do_Btn1() {
  Led1.pulse(1000ul * random(10, 60) , 2000);
}
Cl_Btn Btn1(/*пин*/10,/*обработчик*/Do_Btn1);
void Do_Btn2() {
  Led1.stop();
}
Cl_Btn Btn2(/*пин*/11,/*обработчик*/Do_Btn2);
//------------main()--------------
void setup() {
  Led1.setup();
  Btn1.setup();
  Btn2.setup();
}
void loop() {
  Led1.loop();;
  Btn1.loop();
  Btn2.loop();
}

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

#2 Re: Програмування Arduino » Помогите мне пожалуйста. ардуина, кнопка, реле » 2017-07-11 21:59:27

1) первое нажатие кнопки после включения питания.
2) сигнала на вход 11 положительный, длительность не кретична, но она будет постоянной
3) после детектирования входного сигнала на входе 11, через случайный промежуток времени от 10 до 60 с, один раз включается реле на 2 секунды
4) после включения реле больше ничего не будет происходить.
5) "Каким уровнем должно включаться реле?"??? просто подключается ардуиновский релейный модуль

#3 Re: Програмування Arduino » Помогите мне пожалуйста. ардуина, кнопка, реле » 2017-07-11 20:38:00

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

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

спасибо за отзывчивость
bb1113983844.jpg

при подаче питания на плату, если нажатия на кнопку не произошло (время безгранично), то при поступлении сигнала  на вход  11 , через какое-то время (каждый раз рандомно от 10 до 60 секунд) на 2 секунды включается реле, подключённое к выходу 12.
как-то так

goodspeedmen пише:

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

я думал, что описал работу устройства доходчиво

#7 Програмування Arduino » Помогите мне пожалуйста. ардуина, кнопка, реле » 2017-07-09 14:24:08

Rukas
відповідей: 16

напишите мне пожалуйста со скетчем.
с программированием почти не дружу - по примерам могу что-то склепать, а вот когда нужно несколько разных действий собрать в кучу, то бяда(((((
принцип такой: при включении ардуины, если нажатия на кнопку не произошло (время безгранично), то при поступлении 1 на вход (например 11) , через какое-то время (каждый раз рандомно от 10 до 60 секунд) на выходе (например 12) появляется 1 на 1-2 секунды (включается реле). 
цикличности нет. после включения реле ардуина будет отключаться.

заранее всем спасибо!

Підвал форуму