Kann mir jemand helfen. Ich will die Daten des Sensors über I2c analog oder digital in der Konsole auszugeben. Verwende Visual Studio Code, C++, wäre dringen, danke
Datenblatt: https://docs.rs-online.com/674e/0900766b815e9b5c.pdf
#include <Wire.h>
#include <Arduino.h>
#define SI7210_ADDRESS 0x30
#define SI7210_REGISTER 0xC1
#define OUT_PIN 33
#define V_REF 5.0
void scanI2CDevices();
int16_t readSensorData();
float convertToVoltage(int16_t);
void setup() {
Serial.begin(9600);
delay(50);
Wire.begin();
Serial.println("\nI2C Scanner: Suche nach I2C Geräten...");
scanI2CDevices();
}
void loop() {
int analogValue = analogRead(OUT_PIN);
float analogVoltage = (analogValue / 4095.0) * V_REF;
int16_t sensorValueI2C = readSensorData();
float digitalVoltage = convertToVoltage(sensorValueI2C);
Serial.print("Analog OUT-Pin Spannung: ");
Serial.print(analogVoltage);
Serial.println(" V");
Serial.print("Digital I2C Spannung: ");
Serial.print(digitalVoltage);
Serial.println(" V");
delay(1000);
}
void scanI2CDevices() {
byte error, address;
int devicesFound = 0;
for (address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C Gerät gefunden an Adresse 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
devicesFound++;
} else if (error == 4) {
Serial.print("Fehler an Adresse 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
}
}
if (devicesFound == 0) {
Serial.println("Keine I2C Geräte gefunden\n");
}
}
int16_t readSensorData() {
Wire.beginTransmission(SI7210_ADDRESS);
Wire.write(SI7210_REGISTER);
Wire.endTransmission();
Wire.requestFrom(SI7210_ADDRESS, 2);
if (Wire.available() == 2) {
uint8_t highByte = Wire.read();
uint8_t lowByte = Wire.read();
return (highByte << 8) | lowByte;
}
return 0;
}
float convertToVoltage(int16_t sensorValue) {
const int maxValue = 8192;
return (sensorValue / (float)maxValue) * V_REF;
}