Cintillo Institucional

/*
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);
  
  
  
}

hapa06 (última edición 2011-03-23 16:01:31 efectuada por _desactivada_csoto)