Получить данные от одного ИДУ и Arduino одновременно используя связь I2c
Я хочу получить данные от другого Arduino и IMU используя связь I2c и написал код приведенный ниже но он не работает для меня ,
#include<Wire.h>
// Определить ведомый адрес I2C
#define SLAVE_ADDR 9
// Переменная для полученных данных
int x;
const int MPU=0x68;
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(115200);
}
void loop(){
Wire.beginTransmission(MPU); //Отправить запрос на начало связи с устройством по указанному адресу
Wire.write(0); //Посылает бит, запрашивающий регистр 0, регистр данных датчика TC74
Wire.endTransmission(); //это завершает передачу данных с arduino на датчик температуры
//это теперь считывает температуру с датчика TC74
Wire.requestFrom(MPU, 12);//запрашивает 1 байт с указанного адреса
while(Wire.available() == 0);
AcX=Wire.read()<<8|Wire.read();
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
GyX=Wire.read()<<8|Wire.read();
GyY=Wire.read()<<8|Wire.read();
GyZ=Wire.read()<<8|Wire.read();
Serial.print("Accelerometer: ");
Serial.print("X = "); Serial.print(AcX);
Serial.print(" | Y = "); Serial.print(AcY);
Serial.print(" | Z = "); Serial.println(AcZ);
Serial.print("Gyroscope: ");
Serial.print("X = "); Serial.print(GyX);
Serial.print(" | Y = "); Serial.print(GyY);
Serial.print(" | Z = "); Serial.println(GyZ);
Serial.println(" ");
/*Wire.begin(SLAVE_ADDR); //Отправить запрос на начало связи с устройством по указанному адресу
x= Wire.read();
Wire.end();
Serial.print(" angle = "); Serial.println(x);*/
delay(333);
}
нужны некоторые предложения, чтобы решить эту проблему . код arduino, который отправляет данные, выглядит следующим образом
/* Arduino Rotary Encoder Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
// Включить библиотеку проводов Arduino для I2C
#include <Wire.h>
// Определить ведомый адрес I2C
#define SLAVE_ADDR 9
#define outputA 2
#define outputB 3
int counter = 0;
int aState;
int aLastState;
int precounter;
void setup() {
pinMode (outputA,INPUT);
pinMode (outputB,INPUT);
Wire.begin();
Serial.begin (115200);
// Reads the initial state of the outputA
aLastState = digitalRead(outputA);
}
void loop() {
aState = digitalRead(outputA); // Считывает "текущее" состояние outputA
// Если предыдущее и текущее состояние outputA отличаются, это означает, что произошел импульс
if (aState != aLastState){
// Если состояние outputB отличается от состояния outputA, это означает, что кодер вращается по часовой стрелке
if (digitalRead(outputB) != aState)
{
counter ++;
}
else
{
counter --;
}
}
if(counter < 0)
{
counter=0;
}
Serial.print("Position: ");
Serial.println(counter);
aLastState = aState; // Обновляет предыдущее состояние outputA с текущим состоянием
Wire.beginTransmission(SLAVE_ADDR);
Wire.write(counter);
Wire.endTransmission();
}
@Sikandar Waqar, 👍0
Обсуждение0
Смотрите также:
- Как перевести Arduino Nano в спящий режим с низким энергопотреблением (<0,05 мА)
- Как подключить MPU9250 к NodeMCU с помощью SPI или I2C Slave?
- MAX30100 не работает
- Ведомое устройство Arduino с двумя мастерами, использующими одну и ту же шину I2C?
- Библиотека I2C MIFARE RC522
- Не удалось выделить SSD1306 при добавлении константы
- Сброс адреса I2c — MLX90614
- Arduino Nano IOT LSM6DS3 получить угол гироскопа в градусах
Пожалуйста, будьте более конкретны. "Это не работает" - очень неопределенная ошибка., @PMF