Étape 4: Communiquer avec la sonde de température
Résumé : Le capteur de température à infrarouge est un composant I2C. Normalement cela signifie juste appeler sur quelques commandes de la bibliothèque de « Fil » Arduino pour obtenir les données, mais malheureusement, ce capteur de température nécessite quelques ajustements d’horloge particulière qui ne sont pas possibles à l’aide de la bibliothèque de fils. Le code que j’utilise consiste à une bibliothèque personnalisée « i2cmaster », vous devez importer selon les étapes suivantes. Faire des recherches supplémentaires si vous rencontrez des difficultés à trouver le dossier bibliothèques sur votre système d’exploitation particulier.Source : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1214872633
1) importez la bibliothèque de Custom "i2cmaster" :
A) aller à :
homepage.hispeed.ch/peterfleury/avr-Software.html
et télécharger le i2cmaster.zip
Créez un dossier dans / {arduino racine} / hardware/bibliothèques et extraire la
fichiers i2cmaster.h et twimaster.c. Maintenant, renommez le fichier .c de twimaster à .cpp (faire sûr à renommer et mettre ces fichiers dans le droit emplacement c'est-À-dire IN THE bibliothèques dossier du ARDUINO CODE)
Vérifiez que vous redémarrez si vous chargez une nouvelle bibliothèque dedans, donc on peut le trouver lorsqu’elle est appelée.
B) maintenant, vous devez modifier twimaster.c
Ouvrez-le dans un éditeur de texte simple et changer ce qui suit si vous utilisez un Arduino Uno
Modifiez la twimaster.c afin de tenir compte de l’horloge de 16MHz et changer la fréquence de bus à 50Khz en changeant le code au début pour :
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
/ * Horloge I2C en Hz * /
#define SCL_CLOCK 50000L
2) tester le capteur de température :
Voici un code de test qui imprime à la série surveillance la température en degrés Celsius à deux chiffres. Si cela fonctionne, vous avez votre capteur accroché correctement et la bibliothèque correctement importés.
#include
void setup()
{
Serial.Begin(9600) ;
i2c_init() ; Initialiser le bus i2c
PORTC = (1 << PORTC4) | (1 << PORTC5); //enable tractions
}
void loop()
{
dev int = 0x5A << 1 ;
int data_low = 0 ;
int data_high = 0 ;
pec int = 0 ;
i2c_start_wait(dev+I2C_WRITE) ;
i2c_write(0x07) ;
i2c_rep_start(dev+I2C_READ) ;
data_low = i2c_readAck() ; Lu 1 octet et ensuite envoyer ack
data_high = i2c_readAck() ; Lu 1 octet et ensuite envoyer ack
PEC = i2c_readNak() ;
i2c_stop() ;
Ceci convertit haute et basse octets ensemble et traite les température, MSB est un peu d’erreur et est ignoré pour les temps
double tempFactor = 0,02 ; 0,02 degrés par LSB
double tempData = 0 x 0000 ;
int frac ;
Ce masque au large de l’erreur de bit de l’octet haut, se déplace alors il a laissé 8 bits et ajoute l’octet de poids faible.
tempData = (double) (((data_high & 0x007F) << 8) + data_low) ;
tempData = (tempData * tempFactor) -0,01 ;
tempData = tempData - 273.15 ;
Serial.Print((int)tempData) ; Imprimer la température en degrés C et série
Serial.Print(".") ;
tempData = tempData-(int) tempData ;
FRAC = tempData * 100 ;
Serial.println(FRAC) ;
Delay(500) ;
}