Работа с I2C

Если вы хотите использовать протокол I2C, то в библиотеке Wire есть отличные примеры работы с ним.

Вам только необходимо указать пины, к которым подсоединены SDA и SCL - PB_7_ALT1 и PC6 соответственно. Воспользуйтесь функциями setSDA и setSCL:

Wire.setSDA(PB_7_ALT1);
Wire.setSCL(PC6);

В библиотеке VBCoreG4_arduino_system PB_7_ALT1 и PC6 определены как pinSDA и pinSCL, поэтому код выше можно переписать в виде:

Wire.setSDA(pinSDA);
Wire.setSCL(pinSCL);

Ниже приведены два работающих примера из библиотеки Wire - master_writer и slave_receiver

#include <VBCoreG4_arduino_system.h>
#include <Wire.h>

// Wire Master Writer

// Демонстрирует использование библиотеки Wire
// Запись данных с master-устройства в slave-устройство по протоколу I2C

//I2С4_SDA подключен к пину PB_7_ALT1
#define pinSDA PB_7_ALT1
//I2С4_SCL подключен к пину PC6
#define pinSCL PC6
//дефайны выше прописывать необязательно - они уже есть в библиотеке


void setup()
{
  Wire.setSDA(pinSDA);
  Wire.setSCL(pinSCL);
  Wire.begin();

 
  pinMode(LED2, OUTPUT);
}

byte x = 0;

void loop()
{
  Wire.beginTransmission(5); // передать на устройство 5
  Wire.write("x is ");        // отправляет пять байтов
  Wire.write(x);              // отправляет один байт  
  Wire.endTransmission();    // прекратить передачу

  x++;
  digitalWrite(LED2, !digitalRead(LED2)); //поморгать светодиодом
  delay(200);
}
#include <VBCoreG4_arduino_system.h>
#include <Wire.h>

// Wire Slave Receiver

// Демонстрирует использование библиотеки Wire
// Получает данные как slave-устройство от master-устройства по протоколу I2C 


//SDA подключен к пину PB_7_ALT1
//#define pinSDA PB_7_ALT1
//SCL подключен к пину PC6
//#define pinSCL PC6
//закомментируем эти дефайны - они уже есть в библиотеке, убедимся что программа работает

void setup()
{
  
 Wire.setSDA(pinSDA);
  Wire.setSCL(pinSCL);
  //в качестве аргумента begin передаем адрес slave-устройства
  Wire.begin(5);                // подключение к шине i2c с адресом 5 
  Wire.onReceive(receiveEvent); // регистрация события, аргумент - функция, обрабоатывающая событие
  Serial.begin(115200);
}

void loop()
{
  delay(100);
}

// функция, которая выполняется всякий раз, когда данные получены от master-устройства
// эта функция регистрируется как событие, см. setup()
void receiveEvent(int howMany)
{
  Serial.println("ok");
  while(1 < Wire.available()) // цикл по всем элементам
  {
    char c = Wire.read(); // получаем байт в виде символа
    Serial.print(c);         // печатаем символ
  }
  int x = Wire.read();    // получить байт в виде целого числа
  Serial.println(x);         // вывести целое числarduino 

Last updated