Arduino Due+Uno

Тема в разделе "Arduino & Shields", создана пользователем lex-sh, 18 апр 2019.

  1. lex-sh

    lex-sh Нуб

    Добрый день!
    Сделал логику на Due, а управление реле решил на Uno, так как не могу подружить дуе с реле на 5в. На УНО подаю логические уровни, которые уже управляют реле. Так вот, на Дуе все оттестировано, на ее выход подается сигнал в зависимости от настроек (3 сек. закрыто, 2 открыто ну или произвольно), но при считывании его на УНО выходной сигнал с нее всегда HIGH. Что не так?
    Скетч на УНО:
    Код (C++):
    const int Clapan1 = 4;
    const int Clapan2 = 7;
     
    const int input1 = 8;  
    int inputStateSet1= 0;
    //
    const int input2 = 12;  
    int inputStateSet2= 0;

    void setup()
    {
      pinMode(Clapan1, OUTPUT);  pinMode(Clapan2, OUTPUT);
      pinMode(input1, INPUT);
      pinMode(input2, INPUT);
    }
    void loop()
    {
      inputStateSet1 = digitalRead(input1);
      inputStateSet2 = digitalRead(input2);

      if (inputStateSet1==HIGH)
      {
        digitalWrite(Clapan1, HIGH);
      }
      else {digitalWrite(Clapan1, LOW);}
     
      /*if (inputStateSet2==HIGH)
      {
        digitalWrite(Clapan2, HIGH);
      }
      else {digitalWrite(Clapan2, LOW);}
      */

    }
    Повторюсь - с дуе выходит как надо, оттестировано на светодиоде, то есть он допустим 4 сек горит, 2 не горит. Может ли это быть из-за несовпадения уровней напряжения?
     
  2. itehno

    itehno Нерд

  3. lex-sh

    lex-sh Нуб

    Слишком сложно. Мне все-лишь нужно в зависимости от входного сигнала на УНО включить или выключить нагрузку на реле.
     
  4. itehno

    itehno Нерд

    Поверьте, я сам еще месяц назад ничего не знал про протокол i2c. Теперь могу диплом писать )))
     
  5. itehno

    itehno Нерд

    Попробуйте эти два кода на ваших устройствах. Только соедините их правильно по схеме из вышеприведенного урока.
    Код для мастер-устройства:
    Код (C++):
    // Подключаем библиотеки:
    #include <Wire.h>                                     // подключаем библиотеку для работы с шиной I2C
    #include <iarduino_I2C_connect.h>                     // подключаем библиотеку для соединения arduino по шине I2C
    // Объявляем переменные и константы:
    iarduino_I2C_connect I2C2;                            // объявляем переменную для работы c библиотекой iarduino_I2C_connect

    const byte           PIN_Button_master = 2;           // объявляем константу с указанием номера цифрового вывода, к которому подключена кнопка

    void setup(){
      Wire.begin();                                       // инициируем подключение к шине I2C в качестве ведущего (master) устройства
      pinMode(PIN_Button_master, INPUT);                  // Устанавливаем режим работы вывода собственной кнопки, как вход
    }
    void loop(){
    //Считываем данные:
      VAR_Button_master  = digitalRead(PIN_Button_master);// Считываем состояние собственной кнопки
      VAR_Button_slave   = I2C2.readByte(0x01,0);         // Считываем состояние реле ведомого (адрес ведомого 0x01, номер регистра 0)

    //Отправляем данные:
      I2C2.writeByte(0x01,0,VAR_Button_master);           // Отправляем состояние собственной кнопки ведомому (адрес ведомого 0x01, номер регистра 0, состояние кнопки)
      delay(200);                                    
    }
    Код, для ведомого устройства:
    Код (C++):

    // Подключаем библиотеки:
    #include <Wire.h>                                     // подключаем библиотеку для работы с шиной I2C
    #include <iarduino_I2C_connect.h>                     // подключаем библиотеку для соединения arduino по шине I2C
    // Объявляем переменные и константы:
    iarduino_I2C_connect I2C2;                            // объявляем переменную для работы c библиотекой iarduino_I2C_connect
    const byte           PIN_LED           = 13;          // объявляем константу с указанием номера цифрового вывода, к которому подключен светодиод
          byte           REG_Massive[3];                  // объявляем массив, данные которого будут доступны для чтения/записи по шине I2C
    void setup(){
      Wire.begin(0x01);                                   // инициируем подключение к шине I2C в качестве ведомого (slave) устройства, с указанием своего адреса на шине.
      I2C2.begin(REG_Massive);                            // инициируем возможность чтения/записи данных по шине I2C, из/в указываемый массив
      pinMode(PIN_LED, OUTPUT);                           // Устанавливаем режим работы вывода светодиода, как выход
    }
    void loop(){
      digitalWrite(PIN_LED, REG_Massive[0]);              // вкл/выкл светодиод в соответствии со значением 0 элемента массива REG_Massive
    }
     
    Можете в ведомом устройстве вместо реле подключить светодиод для отладки.

    Этот код я сам проверить не могу, т.к. у меня нет двух устройств и я сам только учусь. )))
     
    Последнее редактирование: 18 апр 2019
    lex-sh нравится это.
  6. parovoZZ

    parovoZZ Гуру

    далана. Как МК разбудить из глубокого сна по шине I2C?
     
  7. Airbus

    Airbus Радиохулиган

    Глупость какая.На Дуосе не хватило пина для реле?Или лишняя Уна в гараже завалялась?Надо все делать на одной плате одним скетчем-препод это оценит
     
  8. itehno

    itehno Нерд

    Снова умничаете?
    Вот Вам беглое решение:
    Прикрутить по шине I2C внешний RTC, например DS1307, а выход его "будильника" посадить на ножку прерывания МК..
    МК будет "заводить" на RTC время, когда нужно будет просыпаться, а сам будет засыпать...
     
  9. схема где
     
    Daniil нравится это.
  10. Airbus

    Airbus Радиохулиган

    Лучше прикрутить втягивающее реле оно точно разбудит кого угодно.
     
  11. lex-sh

    lex-sh Нуб

    Не понимаю, как jqc-3ff-s-z запитать от 3,3 вольта с дуе.
    Препод? Уже давно-давно препод не указ.
    Схема чего? выход с дуе подается на вход уно. Вместо реле пока светодиод. Горит постоянно, реле соответственно непрерывно щелкает.

    Кстати, да.. А земли устройств надо объединять? )
     
  12. Ток по одному проводу не течет.
     
    Daniil и lex-sh нравится это.
  13. Airbus

    Airbus Радиохулиган

    Как запитать?Как обычно.Хочешь я поищу в Гугле за тебя?Если препод не указ и не курсовая/лаба/диплом то тем более надо голову включить.
     
  14. Airbus

    Airbus Радиохулиган

    Есть реле шилд-для самых ленивых
     
  15. lex-sh

    lex-sh Нуб

    Я ведь не об этом спрашивал. Более того, я подключал. Но во время срабатывания реле, переменным присваиваются какие то левые значения, необъяснимые никакой логикой, на кран выводится абракадабра. Решил отказаться.
    Подскажешь как подружить его с http://wiki.amperka.ru/продукты:tft-lcd-480x320
     
    Последнее редактирование: 18 апр 2019
  16. lex-sh

    lex-sh Нуб

    Можно ли объединить земли обоих устройств? чтобы не спалить все ..
     
  17. чтобы не спалить, нужно составить полную электрическую схему и убедиться, что нигде не течет лишний ток
     
  18. itehno

    itehno Нерд

    Нужно всегда объединять землю при использовании двух и более устройств.
    Даже если у Вас устройства питаются от одного источника питания (БП, ПК и т.д.) лишним не будет.
     
  19. lex-sh

    lex-sh Нуб

    разные БП.
     
  20. parovoZZ

    parovoZZ Гуру

    Очень слаб. К защите диплома не допущен.