Using an HS1101 humidity sensor

(using UNO)
Got this circuit working with code below. Used a storebought humidity gauge to calibrate, according to Parallax datasheet, the function is linear. Could have tried to calibrate using the result++, but I found the micros() method gave me better results. Is this off base? i am a newb.

Regardless, using a 2M pull down resistor, I get spot on humidity readings using a script that averages mulitple readings of the capacitor decay time in microseconds and is calibrated using a slope of .1667 and offset of -67.00. -- The averaging gives much more consistent readings than one-off reads.

don't make readDelay too small or it will affect the sensor readings. An accurate read could take a few seconds if your sample size is large.

thoughts? i am sure this script could be tidied up a bit... would love feedback, I am just happy I am getting accurate reads!

int sensorPin1 = 4;

long result = 0;
unsigned long time1=0;
unsigned long time2=0;

long readingsPer=20.0;
long readDelay=200.0;

#define RH1(time) ((.1667*time)-67)

void setup() // run once, when the sketch starts
{

Serial.begin(9600);
Serial.println("start"); // a personal quirk
}
void loop() // run over and over again
{
long H=RH1(evalHumid(readingsPer, sensorPin1));
Serial.println("");
Serial.println(H);
Serial.println("
");
delay(1000);

}

long evalHumid(long samples, int sPin){
long avgtime=0;
for (int i=0;i<samples;i++){
RCtime(sPin);
avgtime+= decayTime(3);
}
avgtime=avgtime/samples;
return(avgtime);

}

long RCtime(int sensPin){
long result = 0;
pinMode(sensPin, OUTPUT); // make pin OUTPUT
digitalWrite(sensPin, HIGH); // make pin HIGH to discharge capacitor - study the schematic
delay(1); // wait a ms to make sure cap is discharged

pinMode(sensPin, INPUT); // turn pin into an input and time till pin goes low
digitalWrite(sensPin, LOW);// turn pullups off - or it won't work
decayTime(1);
while(digitalRead(sensPin)){ // wait for pin to go low
//result++;
}
decayTime(2);
delay(readDelay);
//return result; // report results
}

long decayTime(int input){
if (input==1){
time1=micros();
}
if (input==2 ){
time2=micros();
}
if (input==3){
return (time2-time1);
}
}