Lab3 - Pressure, temperature, and humidity sensors displayed on a webpage.

Dependencies:   EthernetNetIf NTPClient_NetServices GPS mbed HTTPServer SDFileSystem

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SCP1000.h Source File

SCP1000.h

00001 #ifndef _SCP1000_H
00002 #define _SCP1000_H
00003 
00004 #include "mbed.h"
00005 
00006 class SCP1000 {
00007     public:
00008         SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs)
00009             : m_spi(mosi, miso, sclk)
00010             , m_cs(cs) {
00011             m_cs=1;
00012             m_spi.frequency(500000); // the fastest of the sensor
00013             m_spi.format(8, 0); // duda son dos palabras de 8 bits? 
00014             wait(0.5);
00015             //------------------------------------------------
00016             // pc.printf("RESET\r\n");
00017             write_register(0x06,0x01);
00018             wait(0.5);
00019 
00020             // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
00021             write_register(0x03,0x0A);
00022             wait(0.5);
00023         };
00024         
00025         ~SCP1000() { /* empty */ };
00026         
00027         unsigned long readPressure() {
00028             unsigned long pressure_msb = read_register(PRESSURE);
00029             pressure_msb &= 0x07;
00030             unsigned long pressure_lsb = read_register16(PRESSURE_LSB);
00031             unsigned long pressure = ((pressure_msb<<16)| pressure_lsb);
00032             pressure /= 4;
00033             
00034             return pressure;
00035         };
00036         
00037         float readTemperature() {
00038             float temp_in = read_register16(TEMP);
00039             temp_in /= 20;
00040             return temp_in;
00041         };
00042         
00043         
00044     private:
00045         static const char PRESSURE = 0x1F;   //Pressure 3 MSB
00046         static const char PRESSURE_LSB = 0x20; //Pressure 16 LSB
00047         static const char TEMP = 0x21;       //16 bit temp
00048         SPI m_spi;
00049         DigitalOut m_cs;
00050         
00051         char read_register(char register_name) {
00052             register_name <<=2;
00053             register_name &= 0xFC;
00054             m_cs=0; //Select SPI device
00055             m_spi.write(register_name); //Send register location
00056             char register_value=m_spi.write(0x00);
00057             m_cs=1;
00058             return register_value;  
00059         };
00060 
00061         void write_register(char register_name, char register_value) {
00062             register_name <<= 2;
00063             register_name |= 0x02; //le estamos diciendo que escriba
00064             m_cs=0; //Select SPI device
00065             m_spi.write(register_name); //Send register location
00066             m_spi.write(register_value); //Send value to record into register
00067             m_cs=1;
00068         }; 
00069 
00070         float read_register16(char register_name) {   
00071             register_name <<= 2;
00072             register_name &= 0xFC; //Read command
00073             m_cs=0; //Select SPI Device
00074             m_spi.write(register_name); //Write byte to device
00075             int in_byte1 = m_spi.write(0x00);    
00076             int in_byte2 = m_spi.write(0x00);
00077             m_cs=1;
00078             float in_word= (in_byte1<<=8) | (in_byte2);   
00079             return(in_word);
00080         };
00081 
00082 };
00083 
00084 #endif // _SCP1000_H