/* Carlos Soto check 23/01/10 Manejo STH11 Con puerto serial y LCD */ #include "Wire.h" #include "LiquidCrystal.h" // Inicializar la libreria lcd definiendo los pines LiquidCrystal lcd(13, 12, 11, 10, 9, 8); #define comandoTemp 0x03 //Comando para obtener la temperatura del SHT15 #define comandoHume 0x04 //Comando para obtener la humedad del SHT15 #define pinDatos 3 #define pinReloj 2 float temperatura, humedad; ///////////SHT15//////////////////////// //Funciones para la lectura del SHT15/// int leerDatos (int numBits) //Función para leer datos en forma serial. { int deci = 0; for (int i=0; i<numBits; i++) { digitalWrite(pinReloj,HIGH); deci = (deci<<1) + digitalRead(pinDatos); digitalWrite(pinReloj,LOW); } return deci; } void iniciarTrans()//Rutina para iniciar la transmisión { digitalWrite(pinReloj,HIGH); pinMode(pinDatos,OUTPUT); digitalWrite(pinDatos,LOW); digitalWrite(pinReloj,LOW); digitalWrite(pinReloj,HIGH); digitalWrite(pinDatos,HIGH); digitalWrite(pinReloj,LOW); } void enviarComando(int comando) { //shiftOut(pinDatos, pinReloj, MSBFIRST, comando); for(int i=0;i<8;i++){ digitalWrite(pinDatos,!!(comando & (1<<(7-i)))); //Enviar datos en //forma serial. Tomado de la función shiftOut digitalWrite(pinReloj,HIGH); digitalWrite(pinReloj,LOW); } digitalWrite(pinReloj,HIGH); pinMode(pinDatos,INPUT); /*if (digitalRead(pinDatos)) Serial.println("Error del ACK bajo");*/ //PORTB&=~_BV(PB0);/* digitalWrite(pinReloj,LOW); /*if (!digitalRead(pinDatos)) Serial.println("Error del ACK alto");*/ } int recibirDato() { int datos; pinMode(pinDatos,INPUT); while(digitalRead(pinDatos)){ } datos = leerDatos(8) << 8; pinMode(pinDatos,OUTPUT); digitalWrite(pinDatos,LOW); digitalWrite(pinReloj,HIGH); digitalWrite(pinReloj,LOW); pinMode(pinDatos,INPUT); return datos |= leerDatos(8); } float tempe() { int dato; float medida; iniciarTrans(); enviarComando(comandoTemp); dato=recibirDato(); return medida=-40.1+0.01*dato; } float hume() { int dato; float medida; iniciarTrans(); enviarComando(comandoHume); dato=recibirDato(); return medida=-2.0468+0.0367*dato+-1.5955e-6*dato*dato; } // Fin configuracion SHT15 /////////////////// void setup() { Wire.begin(); pinMode(pinReloj,OUTPUT); Serial.begin(9600); // set up the LCD's number of rows and columns: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("HAPA 001"); } void loop() { temperatura=tempe(); delay(800); humedad=hume(); delay(1800); Serial.print("HAPA 001 "); Serial.print(temperatura,DEC); Serial.print(":"); Serial.print(humedad,DEC); delay(18000); lcd.setCursor(5, 1); // print the number of seconds since reset: lcd.print(temperatura,0); lcd.print(":"); // print the number of seconds since reset: lcd.print(humedad,0); }