This is my first time actually interfacing to a chip from scratch, so I am pretty sure it's something dumb.
I am trying to interface to the SHT15 with breakout chip from SparkFun
Chip: http://www.sparkfun.com/commerce/product_info.php?products_id=8257
DataSheet: http://www.sensirion.com/en/pdf/product_information/Data_Sheet_humidity_sensor_SHT1x_SHT7x_E.pdf
Example C Code: http://www.lucasvickers.com/upload/SHT15-Testing-v11.c
I have example C code, and the best I can tell I am doing the same thing.
I get to the point in my code where it says "Waiting for command ack" and the DATA line never drops to low.
Any help would be much appreciated!
My code:
int DATA = 0;
// DATA changes after the falling edge and is valid on the rising edge of the serial clock
int CLOCK = 1;
int myDelay = 1000;
byte readHumMask = B00000101;
byte readTempMask = B00000011;
byte clearMask = B00011110;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
delay(2000);
clearInterface();
}
void loop()
{
int i = 0;
Serial.println("Started");
transmissionStart();
Serial.println("Sent transmission start");
// pin modes are already set to output in transmissionStart
shiftOut(DATA, CLOCK, MSBFIRST, readTempMask);
pinMode(DATA, INPUT);
// Turn on pull-up
digitalWrite(DATA, HIGH);
Serial.println("Waiting for command ack");
while(digitalRead(DATA) == HIGH);
digitalWrite(CLOCK, HIGH);
digitalWrite(CLOCK, LOW);
// now wait for the measurement
Serial.println("Waiting for measurement.");
while(digitalRead(DATA) == LOW);
while(digitalRead(DATA) == HIGH) {
i++;
delay(10);
}
Serial.print("Completed measurement in ");
Serial.print(i*10);
Serial.println(" ms");
digitalWrite(13, HIGH);
delay(myDelay/2);
digitalWrite(13, LOW);
delay(myDelay/2);
}
void transmissionStart()
{
pinMode(DATA, OUTPUT);
pinMode(CLOCK, OUTPUT);
digitalWrite(DATA, HIGH);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, HIGH);
digitalWrite(CLOCK, LOW);
}
void clearInterface()
{
pinMode(DATA, OUTPUT);
pinMode(CLOCK, OUTPUT);
digitalWrite(DATA, HIGH);
for(int i=0; i<10; i++) {
digitalWrite(CLOCK, HIGH);
digitalWrite(CLOCK, LOW);
}
}