Paso 4: Comunicación con el Sensor de temperatura
Resumen: El sensor de temperatura infrarrojo es un componente de I2C. Normalmente esto significa sólo a unos pocos comandos de la biblioteca de "Alambre" de Arduino para obtener datos, pero por desgracia, este sensor de temperatura requiere de algunos ajustes de sincronización especial que no son posibles usando la biblioteca de hilos. El código que utiliza consiste en una biblioteca personalizada "i2cmaster", que debe importar según los siguientes pasos. Hacer una investigación adicional si usted está teniendo problemas para encontrar la carpeta de las bibliotecas en su sistema operativo particular.Fuente: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1214872633
1) importar la biblioteca personalizada "i2cmaster":
A) ir a:
Homepage.HiSpeed.ch/peterfleury/AVR-software.html
y descargar el i2cmaster.zip
Crear una carpeta en / {arduino raíz} / hardware y las bibliotecas y extraer el
archivos i2cmaster.h y twimaster.c. Ahora, cambie el archivo .c de twimaster .cpp (hacer que al renombrar y poner estos archivos en el derecho ubicación es decir en el bibliotecas carpeta de ARDUINO código)
Asegúrese de que reiniciar si carga una nueva biblioteca en él por lo que se puede encontrar cuando se le llama.
B) ahora es necesario modificar twimaster.c
Abra en un editor de texto simple y cambiar lo siguiente si está utilizando un Arduino Uno
Editar el twimaster.c para reflejar el reloj de 16MHz y cambiar la frecuencia del bus a 50Khz cambiando el código al principio de:
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
/ * Reloj I2C en Hz * /
#define SCL_CLOCK 50000L
2) prueba el Sensor de temperatura:
Aquí es un código de prueba que imprime a la serie de controlar la temperatura en grados Celsius a dos dígitos. Si funciona, usted tiene el sensor conectado correctamente y la biblioteca debidamente importados.
#include
void setup()
{
Serial.Begin(9600);
i2c_init(); Inicializar el bus i2c
PORTC = (1 << PORTC4) | (1 << PORTC5); //enable finalizar
}
void loop()
{
int dev = 0x5A << 1;
int data_low = 0;
int data_high = 0;
pec de int = 0;
i2c_start_wait(dev+I2C_WRITE);
i2c_write(0x07);
i2c_rep_start(dev+I2C_READ);
data_low = i2c_readAck(); Lee 1 byte y luego enviar ack
data_high = i2c_readAck(); Lee 1 byte y luego enviar ack
PEC = i2c_readNak();
i2c_stop();
Esto convierte alta y baja bytes juntos y los procesos de temperatura, MSB es un error y se omite en temps
doble tempFactor = 0,02; 0,02 grados por LSB
tempData doble = 0 x 0000;
int frac;
Esta máscaras off el bit de error de byte alto, entonces se mueve 8 bits a la izquierda y añade el byte bajo.
tempData = (doble) (((data_high & 0x007F) << 8) + data_low);
tempData = (tempData * tempFactor) -0.01;
tempData = tempData - 273.15;
Serial.Print((int)tempData); Temperatura en grados C a serie de impresión
Serial.Print(".");
tempData = tempData-(int) tempData;
frac = tempData * 100;
Serial.println(frac);
Delay(500);
}