Какова цель целого числа howMany в функции wire.onReceive() из примера кода?

i2c

В примере чтения master write / slave для проводной библиотеки объявлено целое число howMany, которое никогда не используется.

 void setup() {
   Wire.begin(8);                // присоединиться к шине i2c с адресом #8
   Wire.onReceive(receiveEvent); // событие регистрации
   Serial.begin(9600);           // запустить последовательный для вывода
}

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

Поскольку функция не работает без нее, я хотел бы знать, какова ее точная цель.Я бы предположил, что это что-то связанное с размером буфера.

, 👍0

Обсуждение

Описание проводных команд крайне скудно. Для меня здесь тоже много загадок. Без примеров кодов из foren для меня невозможно сгенерировать работающий код. По этой причине вопрос о том, сколько именно, очень актуален., @User111


2 ответа


Лучший ответ:

2

Он сообщает вам, сколько байтов было получено и, следовательно, сколько вы можете прочитать с помощью Wire.read().

Прежде чем вы прочитаете что-либо с помощью Wire.read() Wire.available() вернет то же значение. По мере чтения из буфера Wire.available() будет уменьшаться, но количество останется прежним.

,

1

Справочная страница https://www.arduino.cc/en/Reference/WireOnReceive государства:

Параметры

обработчик: функция, которая вызывается, когда подчиненное устройство получает данные; это должно принимать один параметр int (количество байтов, считанных с ведущего устройства) и ничего не возвращать, например: void MyHandler(int numBytes)

Я предлагаю вам в будущем ознакомиться со справочными страницами для этих функций, прежде чем спрашивать, что они делают.

,