Ничего не найдено :(
    В гостях у Самоделкина! » Темы » Советы » Arduino в качестве ведомого устройства I2C

    Arduino в качестве ведомого устройства I2C



    Ардуиощики пользуются шиной I2C довольно давно. Она позволяет подключать к одному ведущему устройству несколько ведомых, но об этом часто забывают, подключая всего одно. И мало кто задумывается, что и само Arduino может быть на этой шине не только ведущим, но и ведомым. А оно может! Чем можно воспользоваться, например, если не хватает GPIO, или надо по другой причине соединить две или более плат между собой. Одну назначаем ведущей, остальные - ведомыми, и пользуемся. Даже библиотек сторонних не надо. Инструкцию с несложным примером предлагает под лицензией GPL версии 3 или больше по вашему выбору автор Arduino Project Hub под ником Chandran N.

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

    Arduino в качестве ведомого устройства I2C


    Обратите внимание: здесь не надо соединять вход с выходом, а выход - с входом, это не последовательный порт. Здесь шина из двух линий: данные и тактовые импульсы. SDA соединяем с SDA, SCL - с SCL. А куда выведены эти линии, зависит от платы. Например, на Arduino Uno они следующие: SDA - A4, SCL - A5.

    Смысл эксперимента в следующем. Первое Arduino измеряет напряжение на подвижном контакте переменного резистора и передаёт результаты измерений по шине I2C на второе Arduino. Оно, в свою очередь, включает светодиод, если значение превышает пороговое:



    Скетчи для обеих плат приведены далее (41 строка в сумме):

    //Code for the Master board
    #include<Wire.h>//This library is used for I2C communication
    int x;
    void setup() {
      Wire.begin(); 
      Serial.begin(9600);
    }
    void loop() {
      x = analogRead(A0);//Reading value from Potentiometer
      x/=4;
      Wire.beginTransmission(9);//9 here is the address of the slave board 
      Wire.write(x);//Transfers the value of potentiometer to the slave board            
      Wire.endTransmission(); 
      Serial.print(x);
      delay(1000);
    }
    
    //Code for the slave board
    #include<Wire.h
    int x;
    void setup() {
      pinMode (13, OUTPUT);//Connect LED to pin 13
      Wire.begin(9);//9 here is the address(Mentioned even in the master board code) 
      Wire.onReceive(receiveEvent);
      Serial.begin(9600);
    }
    void receiveEvent(int bytes) {
      x = Wire.read();//Receive value from master board
      Serial.print(x);
    }
    void loop() {
      if (x > 88) {//I took the threshold as 88,you can change it to whatever you want
        digitalWrite(13, HIGH);
        delay(200);
      }
      else{
        digitalWrite(13, LOW);
        delay(400);
      }
    }


    Оба скетча выводят в монитор последовательного порта оповещения о происходящем. Изучив код, вы сможете начать применять Arduino в качестве ведомого устройства I2C и в своих проектах. Следует учитывать, что эта шина не рассчитана на передачу данных на расстояние свыше 2 м.

    Источник (Source)
    Подборки: ардуино i2c

    Шасси из одноразовых ложек

    Шаговый двигатель в роли энкодера

    Добавить комментарий

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Опрос
    А Вы уже рассказали на сайте о своей самоделке?

    Последние комментарии

    Все комментарии