Really thanks for your help, at least i could understand some tips i was doint wrong, but did not solve my problem.
The main problem is that i can't even store a value in a array, and i don't know why. Another problem is that i don't know how to set the time of the clock.
I'm trying to create a For cicle, like "For i to 7" store the "temperature" values in a array, with a delay of 50ms in the cicle, so i can't store diferent values, but the vector stays [0,0,0,0,0,0,0,].
I'll put here my code without my "experiments" so you can see it. If you have any better idea i'll be really grateful to you!
int SHT_clockPin = 3;
int SHT_dataPin = 2;
void setup(){
Serial.begin(9600);
}
void loop(){
float Temperature = getTemperature();
float Humidity = getHumidity();
float DewPoint = getDewPoint(Temperature, Humidity);
Serial.print("Temperature = "); Serial.print(Temperature); Serial.print(" C");
Serial.print(" | ");
Serial.print("Relative Humidity = "); Serial.print(Humidity); Serial.print(" %");
Serial.print(" | ");
Serial.print("Dew Point = "); Serial.print(DewPoint); Serial.println(" C");
}
float getTemperature(){
SHT_sendCommand(B00000011, SHT_dataPin, SHT_clockPin);
SHT_waitForResult(SHT_dataPin);
int val = SHT_getData(SHT_dataPin, SHT_clockPin);
SHT_skipCrc(SHT_dataPin, SHT_clockPin);
return (float)val * 0.01 - 40;
}
float getHumidity(){
SHT_sendCommand(B00000101, SHT_dataPin, SHT_clockPin);
SHT_waitForResult(SHT_dataPin);
int val = SHT_getData(SHT_dataPin, SHT_clockPin);
SHT_skipCrc(SHT_dataPin, SHT_clockPin);
return -4.0 + 0.0405 * val + -0.0000028 * val * val;
}
float getDewPoint(float Temperature, float Humidity){
// From: http://wahiduddin.net/calc/density_algorithms.htm
double A0= 373.15/(273.15 + Temperature);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * Humidity;
double T = log(VP/0.61078);
return (241.88 * T) / (17.558-T);
}
void SHT_sendCommand(int command, int dataPin, int clockPin){
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, LOW);
digitalWrite(clockPin, LOW);
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, command);
digitalWrite(clockPin, HIGH);
pinMode(dataPin, INPUT);
if (digitalRead(dataPin)) Serial.println("ACK error 0");
digitalWrite(clockPin, LOW);
if (!digitalRead(dataPin)) Serial.println("ACK error 1");
}
void SHT_waitForResult(int dataPin){
pinMode(dataPin, INPUT);
int ack;
for (int i = 0; i < 1000; ++i){
delay(2);
ack = digitalRead(dataPin);
if (ack == LOW) break;
}
if (ack == HIGH) Serial.println("ACK error 2");
}
int SHT_getData(int dataPin, int clockPin){
pinMode(dataPin, INPUT);
pinMode(clockPin, OUTPUT);
byte MSB = shiftIn(dataPin, clockPin, MSBFIRST);
pinMode(dataPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(dataPin, LOW);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
pinMode(dataPin, INPUT);
byte LSB = shiftIn(dataPin, clockPin, MSBFIRST);
return ((MSB << 8) | LSB); //combine bits
}
void SHT_skipCrc(int dataPin, int clockPin){
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
digitalWrite(dataPin, HIGH);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}