AM2321 library

Dependents:   mbed_AM2321_copy mbed_AM2321

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers AM2321.cpp Source File

AM2321.cpp

00001 //**********************
00002 // AM2321.cpp for mbed
00003 //
00004 // AM2321 am2321(P0_5,P0_4);
00005 // or
00006 // I2C i2c(P0_5,P0_4);
00007 // AM2321 am2321(i2c);
00008 //
00009 // (C)Copyright 2014 All rights reserved by Y.Onodera
00010 // http://einstlab.web.fc2.com
00011 //**********************
00012 
00013 #include "mbed.h"
00014 #include "AM2321.h"
00015 
00016 AM2321::AM2321 (PinName sda, PinName scl) : _i2c(sda, scl) {
00017 }
00018 AM2321::AM2321 (I2C& p_i2c) : _i2c(p_i2c) {
00019 }
00020 
00021 
00022 void AM2321::get()
00023 {
00024     // step 1:wakeup
00025     _i2c.write(AM2321_ADDR, NULL, 0);
00026     wait_us(800);   // 800us - 3ms
00027 
00028     // step 2:command
00029     buf[0] = 0x03;  // Get Humidity and Temperature
00030     buf[1] = 0x00;  // Start address
00031     buf[2] = 0x04;  // Length
00032     _i2c.write(AM2321_ADDR, buf, 3);
00033     wait_us(1500);  // 1.5ms
00034 
00035     // step 3:data
00036     _i2c.read( AM2321_ADDR, buf, 8);
00037 
00038 }
00039 
00040 unsigned short AM2321::humidity()
00041 {
00042 
00043     // get hum
00044     get();
00045     hum.byte.HB=buf[2];
00046     hum.byte.LB=buf[3];
00047     return hum.Val;
00048     
00049 }
00050 
00051 signed short AM2321::temperature()
00052 {
00053 
00054     // get temp
00055     get();
00056     temp.byte.HB=buf[4];
00057     temp.byte.LB=buf[5];
00058     if(temp.Val&0x8000){
00059         temp.Val&=0x7FFF;
00060         temp.Val=0xFFFF-temp.Val+1;
00061     }
00062     return temp.S;
00063     
00064 }
00065