I am having problems using a humidity sensor SHT31-D with wire and wire1. I stripped out code from the Adafruit_SHT31 library and to find the issue and it works great with arduino. Whenever endTransmission is called, it puts the Electron into a usage fault (5 flashes). Problem on both wire and wire1 pins.
I want to use wire1 (pins C4 & c5) so I set SLC pin to INPUT as discussed.
I checked for DIV/0 by printing all the wite() commands.
I have the pull-up resistors as discussed.
Code -
void writeCommand(uint16_t cmd) {
Serial.println("writeCommand input cmd = ");
Serial.println(cmd);
delay(100);
Wire1.beginTransmission(0x44);
Serial.println("writeCommand cmd >> 8");
Serial.println(cmd >> 8);
delay(100);
Wire1.write(cmd >> 8);
Serial.println("writeCommand cmd & 0xFF");
Serial.println(cmd & 0xFF);
delay(100);
Wire1.write(cmd & 0xFF);
Serial.println("writeCommand end Transmission");
delay(100);
Wire1.endTransmission();
Serial.println("writeCommand Done");
delay(100);
}
void setup(){
Serial.begin(9600); // connect serial
pinMode(C5, INPUT);
delay(10000); //so I have time to start serial monitor
writeCommand(0x30A2); ///SHT31_SOFTRESET);
delay(10);
}
bool CheckHumidity(float &hum){
Serial.println("Here 1");
delay(100);
writeCommand(0x2400); ///SHT31_MEAS_HIGHREP
uint8_t readbuffer[6];
Serial.println("Here 2");
delay(100);
Wire1.requestFrom(0x44, (uint8_t)6); //(_i2caddr,
if (Wire1.available() != 6)
return false;
for (uint8_t i=0; i<6; i++) {
readbuffer[i] = Wire1.read();
}
uint16_t SRH;
SRH = readbuffer[3];
SRH <<= 8;
SRH |= readbuffer[4];
Serial.println("Here 3");
delay(100);
uint8_t *data = readbuffer+3;
int len = 2;
const uint8_t POLYNOMIAL(0x31);
uint8_t crc(0xFF);
for ( int j = len; j; --j ) {
crc ^= *data++;
for ( int i = 8; i; --i ) {
crc = ( crc & 0x80 )
? (crc << 1) ^ POLYNOMIAL
: (crc << 1);
}
}
Serial.println("Here 4");
delay(100);
if (readbuffer[5] != crc) return false;
double shum = SRH;
shum *= 100;
shum /= 0xFFFF;
hum = shum;
Serial.print("humidity = ");
Serial.println(hum);
return true;
}
void loop(){
float curHum = 0.0;
CheckHumidity(curHum);
Serial.print("humidity = ");
Serial.println(curHum);
delay(1000);
}