I2C Wire.onRequest не обнаружен
Я хочу знать, почему Wire.onRequest
не может обнаружить сообщение ниже и что я могу сделать для его обнаружения. (Я не могу изменить сообщение I2C)
Я смог прочитать эту часть сообщения с помощью wire.onReceive
:
Но я вообще не могу прочитать это сообщение, которое требует:
#include <Wire.h>
byte val = 170;
int sendv;
char c;
byte dataArray[16];
void setup() {
Wire.begin(0x77); // присоединяемся к шине i2c с адресом #8
Wire.onReceive(receiveEvent); // регистрируем событие
Wire.onRequest(requestEvent); // регистрируем событие
Serial.begin(9600); // запускаем сериал для вывода
}
void loop() { }
void receiveEvent(int howMany) {
Serial.println(howMany);
if (howMany >= 2) {
for (int i = 0 ; i < howMany; i++) {
dataArray[i] = Wire.read();
Serial.println(dataArray[i], HEX);
}
} else {
c = Wire.read();
Serial.println(c, HEX);
}
}
void requestEvent() {
Serial.println("REqEVENT");
}
@Shahreza, 👍0
Обсуждение1 ответ
▲ 1
Мне удалось решить проблему, добавив twi_stop(); на twi.c
база на этом сайте введите здесь описание ссылки
,
@Shahreza
Смотрите также:
- Отправка и получение различных типов данных через I2C в Arduino
- Как выбрать альтернативные контакты I2C на ESP32?
- Альтернативы библиотеке Wire для I2C
- Библиотека Wire.h работает на Uno, но не компилируется для ATtiny85
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- Как обнаружить ошибки I2C с помощью requestFrom()
- Проблемы с I2C и Wire.Available()
- Считывание значений с емкостного сенсорного датчика TTP229 на arduino
То есть вы имеете в виду, что в своем коде вы никогда не видите REqEVENT в последовательном мониторе? Обычно в обратном вызове
onRequest
вы записываете данные в буфер I2C, чтобы их можно было отправить., @chrislДа, когда я запускаю код, я никогда не захожу внутрь события запроса и не вижу REqEVENT, который должен быть, потому что 0xEFm или 0xEE - правильный адрес., @Shahreza
Являются ли изображения из передачи из вашего кода? Это будет соответствовать вашему коду, поскольку вы не отправляете данные по запросу. Возможно, отправка через последовательный порт здесь не является хорошим тестом, поскольку функция get вызывается из ISR. Попробуйте зажечь светодиод внутри функции, чтобы проверить, попал ли туда код. Также попробуйте на самом деле отправить данные и посмотрите, действительно ли эти данные отправляются, наблюдая за своим логическим анализатором., @chrisl
Я пытался отправить сообщение, но это не сработало, я просто попробовал светодиод и не включился. Также вы можете видеть, что логический анализатор получает 0xFF., @Shahreza