Друзья, нужна помощь с реле.

Тема в разделе "Arduino & Shields", создана пользователем Volf, 19 фев 2015.

  1. vvr

    vvr Инженерище

    Рабочий проверенный вариант
    Нужно только скачать и установить библиотеку для борьбы с дребезгом
    https://www.pjrc.com/teensy/td_libs_Bounce.html


    Код (Text):
    #include <Bounce.h>

    #define BUTTON1            11
    #define BUTTON2            12
    Bounce bouncer1 = Bounce( BUTTON1, 15);
    Bounce bouncer2 = Bounce( BUTTON2, 15);
    #define relay1              5
    #define relay2              6
    int relayState1 = LOW;
    int relayState2 = LOW;
    unsigned long currentMillis_1 = 0;
    unsigned long currentMillis_2 = 0;
    long interval_1 = 2000;    ///    задаёшь время срабатывания
    long interval_2 = 3000;

    void setup ()
    {
      pinMode (relay1, OUTPUT);
      pinMode (relay2, OUTPUT);
      pinMode(BUTTON1,INPUT);
      pinMode(BUTTON2,INPUT);
    }
    void loop ()
    {
      bouncer1.update ( );
      int value1 = bouncer1.read();
      bouncer2.update ( );
      int value2 = bouncer2.read();
     
      if (value1 == HIGH)
      {
        currentMillis_1 = millis();
        relayState1 = HIGH;
      }
      if (millis() - currentMillis_1 >= interval_1)
      {
        currentMillis_1 =0;
      relayState1 = LOW;
      }

      if (value2 == HIGH)
      {
        currentMillis_2 = millis();
        relayState2 = HIGH;
      }
      if(millis() - currentMillis_2 >= interval_2)
      {
        currentMillis_2 =0;
        relayState2 = LOW;
      }
    digitalWrite (relay1, relayState1);
    digitalWrite (relay2, relayState2);
    }

     
     
  2. Volf

    Volf Нерд

    результат тот же
     
  3. Volf

    Volf Нерд

    сейчас попоробую
     
  4. Volf

    Volf Нерд

    upload_2015-2-24_14-51-26.png выдает ошибки
     
  5. vvr

    vvr Инженерище

    какая версия IDE
     
  6. X-Dron

    X-Dron Гик

    Скриншот папки <документы пользователя>\Arduino\libraries
    а так же папок
    <документы пользователя>\Arduino\libraries\Bounce
    <документы пользователя>\Arduino\libraries\X-Dron_lib-master

    @vvr
    1.0.6 на скрине видно, похоже не умеет работать с библиотеками.
     
  7. vvr

    vvr Инженерище

    на скрине Bounce.h не красного цвета - значит библиотека не установлена.
    проверь куда установил
    проверь название библиотеки
     
  8. vvr

    vvr Инженерище

    у меня все библиотеки в папке libraries в самой IDE
     
  9. X-Dron

    X-Dron Гик

    @vvr
    пользовательские библиотеки импортируются или копируются в <документы пользователя>\Arduino\libraries
    Пользовательские библиотеки не подсвечиваются "красным" (у меня оранжевым) цветом в #include
    http://wiki.amperka.ru/программирование:библиотеки
    со слов
    Сторонние библиотеки
     
  10. vvr

    vvr Инженерище

    и так успешно ковыряюсь.
    у меня какие то подсвечиваются, какие то нет.
    в данном случае Bounce подсвечивается.
     
  11. X-Dron

    X-Dron Гик

    чтобы в 1.0.6 заработала Bounce, ее нужно править. ругается на отсутствие WProgram.h. а этого файла действительно нет.
    Как лечить.
    http://robocraft.ru/blog/arduino/751.html
     
  12. vvr

    vvr Инженерище

    проще установить версию 1.5.2 :D
     
  13. X-Dron

    X-Dron Гик

    не поможет :-D
    в 1.5.2 тоже нет WProgram.h. 1.5.2 старше 1.0.6 и старше 1.0.0 :-D
    24-02-2015 14-04-53.png
     
  14. Volf

    Volf Нерд

  15. Volf

    Volf Нерд

    делал все именно так, но все равно упорно отказывается импортировать библиотеку.
     
  16. X-Dron

    X-Dron Гик

    Volf еще раз, третий повторять не буду.
    Bounce лечится так http://robocraft.ru/blog/arduino/751.html

    Скриншоты папок
    <документы пользователя>\Arduino\libraries
    <документы пользователя>\Arduino\libraries\Bounce
    <документы пользователя>\Arduino\libraries\X-Dron_lib-master
    в студию.
    Если, все-таки, будете использовать мой код, то пропробуйте заменить имя папки "X-Dron_lib-master" на "XDron_lib"
     
  17. Volf

    Volf Нерд

    излечил, но теперь столкнулся с тем, что реле открываются в каком-то непонятном рандомном порядке, независимо от кнопок вообще
    Код (Text):
    #include <Bounce.h>

    #define BUTTON1            5
    #define BUTTON2            4
    Bounce bouncer1 = Bounce( BUTTON1, 15);
    Bounce bouncer2 = Bounce( BUTTON2, 15);
    #define relay1              7
    #define relay2              6
    int relayState1 = LOW;
    int relayState2 = LOW;
    unsigned long currentMillis_1 = 0;
    unsigned long currentMillis_2 = 0;
    long interval_1 = 2000;    ///    задаёшь время срабатывания
    long interval_2 = 3000;

    void setup ()
    {
      pinMode (relay1, OUTPUT);
      pinMode (relay2, OUTPUT);
      pinMode(BUTTON1,INPUT);
      pinMode(BUTTON2,INPUT);
    }
    void loop ()
    {
      bouncer1.update ( );
      int value1 = bouncer1.read();
      bouncer2.update ( );
      int value2 = bouncer2.read();
      if (value1 == HIGH)
      {
        currentMillis_1 = millis();
        relayState1 = HIGH;
      }
      if (millis() - currentMillis_1 >= interval_1)
      {
        currentMillis_1 =0;
      relayState1 = LOW;
      }

      if (value2 == HIGH)
      {
        currentMillis_2 = millis();
        relayState2 = HIGH;
      }
      if(millis() - currentMillis_2 >= interval_2)
      {
        currentMillis_2 =0;
        relayState2 = LOW;
      }
    digitalWrite (relay1, relayState1);
    digitalWrite (relay2, relayState2);
    }
     
     
  18. Volf

    Volf Нерд

    Код (Text):
    #include <Bounce.h>

    #define BUTTON1            5
    #define BUTTON2            4
    Bounce bouncer1 = Bounce( BUTTON1, 15);
    Bounce bouncer2 = Bounce( BUTTON2, 15);
    #define relay1              7
    #define relay2              6
    int relayState1 = LOW;
    int relayState2 = LOW;
    unsigned long currentMillis_1 = 0;
    unsigned long currentMillis_2 = 0;
    long interval_1 = 2000;    ///    задаёшь время срабатывания
    long interval_2 = 3000;

    void setup ()
    {
      pinMode (relay1, OUTPUT);
      pinMode (relay2, OUTPUT);
      pinMode(BUTTON1,INPUT);
      pinMode(BUTTON2,INPUT);
    }
    void loop ()
    {
      bouncer1.update ( );
      int value1 = bouncer1.read();
      bouncer2.update ( );
      int value2 = bouncer2.read();
      if (value1 == HIGH)
      {
        currentMillis_1 = millis();
        relayState1 = HIGH;
      }
      if (millis() - currentMillis_1 >= interval_1)
      {
        currentMillis_1 =0;
      relayState1 = LOW;
      }

      if (value2 == HIGH)
      {
        currentMillis_2 = millis();
        relayState2 = HIGH;
      }
      if(millis() - currentMillis_2 >= interval_2)
      {
        currentMillis_2 =0;
        relayState2 = LOW;
      }
    digitalWrite (relay1, relayState1);
    digitalWrite (relay2, relayState2);
    }
     
    при таком коде они почему-то независимо от кнопок живут своей жизнью :D
     
  19. X-Dron

    X-Dron Гик

    Схема подключение кнопок?
    Если такая, как я предлагал на предыдущей странице, то
    pinMode(BUTTON1,INPUT);
    pinMode(BUTTON2,INPUT);
    должно быть
    pinMode(BUTTON1,INPUT_PULLUP);
    pinMode(BUTTON2,INPUT_PULLUP);
     
  20. vvr

    vvr Инженерище

    вот код без всяких библиотек

    Код (Text):

    ////////////////////////////  чтение кнопок без тормозов


    int Button1 = 11;
    int Button2 = 12;
    long last1DebounceTime = 0;
    long last2DebounceTime = 0;
    int lastButton1State = LOW;
    int lastButton2State = LOW;
    long debounceDelay = 150;
    int lastButtonPushed = 0;
    int reading;
    #define relay1              5
    #define relay2              6
    int relayState1 = LOW;
    int relayState2 = LOW;
    unsigned long currentMillis_1 = 0;
    unsigned long currentMillis_2 = 0;
    long interval_1 = 2000;    ///    задаёшь время срабатывания
    long interval_2 = 3000;


    void setup()
    {
      pinMode(Button1, INPUT);
      pinMode(Button2, INPUT);
      pinMode (relay1, OUTPUT);
      pinMode (relay2, OUTPUT);
    }

    void loop()
    {          
      int Button1State=LOW;          
      int Button2State=LOW;

    //////////////////  обработка кнопок

      reading = digitalRead(Button2);
      if (reading != lastButton2State) {
        last2DebounceTime = millis();
      }
      if ((millis() - last2DebounceTime) > debounceDelay) {
        Button2State = reading;
        last2DebounceTime =millis();
      }
      lastButton2State = reading;

      reading = digitalRead(Button1);
      if (reading != lastButton1State) {
        last1DebounceTime = millis();
      }
      if ((millis() - last1DebounceTime) > debounceDelay) {
        Button1State = reading;
        last1DebounceTime=millis();
      }
      lastButton1State = reading;

      if(Button2State==HIGH){
        lastButtonPushed=Button2;
      }
      else if(Button1State==HIGH){
        lastButtonPushed=Button1;
      }
      else{
        lastButtonPushed=0;
      }
    //////////////////////////////////////////////////////

      if (Button1State == HIGH)
      {
        currentMillis_1 = millis();
        relayState1 = HIGH;
      }
      if (millis() - currentMillis_1 >= interval_1)
      {
        currentMillis_1 =0;
        relayState1 = LOW;
      }
    /////////////////////////////////////////////////////////

      if (Button2State == HIGH)
      {
        currentMillis_2 = millis();
        relayState2 = HIGH;
      }
      if(millis() - currentMillis_2 >= interval_2)
      {
        currentMillis_2 =0;
        relayState2 = LOW;
      }
      digitalWrite (relay1, relayState1);
      digitalWrite (relay2, relayState2);
    }