The following code shows, how I would read from a STC3100. But I own none of them, so I can not try the code. I would be very surprised if it works directly. Use it as an example. Perhaps we could improve it together. ;-)
#include <Wire.h>
#define STC_ADDRESS = 0x70;
#define MODE_REGISTER 0x00
#define CURRENT_LOW_REGISTER 0x06
#define VOLTAGE_LOW_REGISTER 0x08
int voltage, current;
int high_value = 0;
void setup()
{
Serial.begin(9600);
Wire.begin();
delay(100);
// power on the STC
Wire.beginTransmission(STC_ADDRESS);
Wire.write(MODE_REGISTER);
Wire.write(16);
Wire.endTransmission();
}
void loop()
{
delay(2000);
Wire.beginTransmission(STC_ADDRESS);
Wire.write(VOLTAGE_LOW_REGISTER);
// Restart without Stop <- spec
Wire.beginTransmissionrequestFrom(STC_ADDRESS, 2);
Wire.requestFromdelay(STC_ADDRESS, 2500);
if( Wire.available() )
{
voltage = Wire.read();
}
delay(500);
if( Wire.available() )
{
high_value += Wire.read();
voltage += (high_value << 8);
}
Wire.endTransmission();
Wire.beginTransmission(STC_ADDRESS);
Wire.write(CURRENT_LOW_REGISTER);
// Restart without Stop <- spec
Wire.beginTransmissionrequestFrom(STC_ADDRESS, 2);
Wire.requestFromdelay(STC_ADDRESS, 2500);
if( Wire.available() )
{
current = Wire.read();
}
delay(500);
if( Wire.available() )
{
high_value += Wire.read();
current += (high_value << 8);
}
Wire.endTransmission();
Serial.print("V= ");
Serial.print(voltage);
Serial.print(" C= ");
Serial.println(current);
}