тактовая кнопка, таймер, смена полярности... типа...

woodenloony
Offline
Зарегистрирован: 26.07.2017

напишет может ктонить, а то я так мудренно не умею)))?

 

\pin1 - нажать кнопку\отпустить кнопку

     \pin3 - включить реле 1 на 0.7сек. pin5 - стать землей на 0.7сек. - (вкл\выкл одновременно)

\пауза 0.4сек

     \pin5 - включить реле 2 на 0.7сек. pin6 - стать землей на 0.7сек. - (вкл\выкл одновременно)

\пауза 1сек.

\по новой, при повторном нажатии.

 

п.с. я вообще не бум-бум....

200р. на тел

woodenloony
Offline
Зарегистрирован: 26.07.2017

:(

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

нуууу...  когда научитесь внятно ставить ТЗ, тогда и грустить не придёца. 

Green
Онлайн
Зарегистрирован: 01.10.2015

woodenloony, а сама схема собрана? htpicc@gmail.com

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

Какая простая задача

/**/
uint32_t mill;// текущая в цикле millis()
//------------Cl_Relay-----------------------------
// класс реле
class Cl_Relay {
    const byte pin;
  public:
    Cl_Relay (byte _pin): pin(_pin) {}
    void setup() {
      pinMode(pin, OUTPUT);
      OFF();
    }
    void ON() {
      digitalWrite(pin, HIGH);
    }
    void OFF() {
      digitalWrite(pin, LOW);
    }
};
//--------Cl_Brain------------------------------------------
// класс мозг определяет в какой последовательности что запускается.
class Cl_Brain {
    const uint32_t time1, time2, time3;
    const void (*Do1)(), (*Do2)(), (*Do3)(), (*Do4)(); // указатель на обработчик
    byte stat = 0; // 4(1 этап),3(2 этап),2(3 этап),1(4 этап),0- стоп
    uint32_t past = 0;
  public:
    Cl_Brain( void (*_Do1)(), uint32_t _time1, void (*_Do2)(), uint32_t _time2, void (*_Do3)(), uint32_t _time3, void (*_Do4)())
      : Do1(_Do1), time1(_time1), Do2(_Do2), time2(_time2), Do3(_Do3), time3(_time3), Do4(_Do4) {}
    void loop() {
      if (stat == 3 && mill - past >= time1) {
        stat = 2;
        past = mill;
        Do2();
      }
      if (stat == 2 && mill - past >= time2) {
        stat = 1;
        past = mill;
        Do3();
      }
      if (stat == 1 && mill - past >= time3) {
        stat = 0;
        Do4();
      }
    }
    void start() {
      stat = 4;
      past = mill;
      Do1();
    }
};
//--------Cl_Btn------------------------------------------
// class кнопка
class Cl_Btn {
    const byte pin;
    bool btn, btn_old;
    void (*Do)();// указатель на обработчик
  public:
    Cl_Btn (byte _pin, void (*_Do)()): pin(_pin), Do(_Do) {}
    void setup() {
      pinMode(pin, INPUT);
      btn_old = digitalRead(pin);
    }
    void loop() {
      btn = digitalRead(pin);
      if (btn && !btn_old) {
        btn_old = 1;
        Do();
      }
      else if  (!btn && btn_old) {
        btn_old = 0;
      }
    }
};
//----------------Компоновка-------------------------
Cl_Relay REL3(/*нога реле*/3);
Cl_Relay REL5(/*нога реле*/5);
Cl_Relay REL6(/*нога реле*/6);
void Do1_Brain() {
  REL3.ON();
  REL5.OFF();
}
void Do2_Brain() {
  REL3.OFF();
  REL5.ON();
}
void Do3_Brain() {
  REL5.ON();
  REL6.OFF();
}
void Do4_Brain() {
  REL5.OFF();
  REL6.ON();
}
Cl_Brain Brain(/*обработчик 1*/Do1_Brain,/*время 0.7сек*/700,
    /*обработчик 2*/Do2_Brain,/*время0.4*/400,
    /*обработчик 3*/Do3_Brain,/*время 0.7сек*/700,
    /*обработчик 4*/Do4_Brain);
void Do_BTN1() {
  Brain.start();
}
Cl_Btn BTN1(/*нога кнопки*/1,/*обработчик кнопки*/Do_BTN1);
//----------------main()------------------------
void setup() {
  REL3.setup();
  REL5.setup();
  REL6.setup();
  BTN1.setup();
}

void loop() {
  mill = millis();
  Brain.loop();
  BTN1.loop();
}
/*Скетч использует 1648 байт (5%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 46 байт (2%) динамической памяти, оставляя 2002 байт для локальных переменных. Максимум: 2048 байт.
*/

 

Roman1984
Offline
Зарегистрирован: 17.02.2017

200 руб. на webmoney. Если что - обращайтесь на почту: petrovskiy.roman.vladimirovich@gmail.com