Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Rukas
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();
}

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

qwone
2017-07-11 23:03:42

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

/*
*/
//---------------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();
}
Rukas
2017-07-11 21:59:27

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

Rukas
2017-07-11 20:38:00
Вячеслав Азаров пише:

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

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

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

goodspeedmen пише:

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

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

NoName
2017-07-11 18:55:27
goodspeedmen пише:

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

goodspeedmen , привет. Вы кому написали то?

goodspeedmen
2017-07-11 18:29:59

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

Green
2017-07-11 10:29:30
NoName пише:

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

"Хорошо бы... Пива!".
Дело ж не в деньгах - в отношении.

NoName
2017-07-11 00:32:30

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

vvr
2017-07-10 22:35:20
Rukas пише:

если нет желания помочь, то и не стебайтесь

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

Green
2017-07-10 22:10:52

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

Rukas
2017-07-10 21:50:43

если нет желания помочь, то и не стебайтесь

Green
2017-07-10 11:18:13
Rukas пише:

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

"Моя благодарность будет безгранична, но в пределах разумного." Не?

Rukas
2017-07-09 19:51:17

исправил neutral

renoshnik
2017-07-09 17:47:15
Rukas пише:

так правильно?

нет...

Rukas пише:

Помогите мне пожалуйста со скетчем.

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

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


Нужно так -  Напишите за меня скетч.

ПОМОЩЬ - это когда вы что-то САМИ сделали и у вас возникли какие-то проблемы....

Rukas
2017-07-09 17:39:25

так правильно?

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