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

Dependencies:   EthernetNetIf NTPClient_NetServices GPS mbed HTTPServer SDFileSystem

Committer:
kadams6
Date:
Tue Oct 05 19:34:40 2010 +0000
Revision:
0:dfd0841721d5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadams6 0:dfd0841721d5 1 #ifndef _SCP1000_H
kadams6 0:dfd0841721d5 2 #define _SCP1000_H
kadams6 0:dfd0841721d5 3
kadams6 0:dfd0841721d5 4 #include "mbed.h"
kadams6 0:dfd0841721d5 5
kadams6 0:dfd0841721d5 6 class SCP1000 {
kadams6 0:dfd0841721d5 7 public:
kadams6 0:dfd0841721d5 8 SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs)
kadams6 0:dfd0841721d5 9 : m_spi(mosi, miso, sclk)
kadams6 0:dfd0841721d5 10 , m_cs(cs) {
kadams6 0:dfd0841721d5 11 m_cs=1;
kadams6 0:dfd0841721d5 12 m_spi.frequency(500000); // the fastest of the sensor
kadams6 0:dfd0841721d5 13 m_spi.format(8, 0); // duda son dos palabras de 8 bits?
kadams6 0:dfd0841721d5 14 wait(0.5);
kadams6 0:dfd0841721d5 15 //------------------------------------------------
kadams6 0:dfd0841721d5 16 // pc.printf("RESET\r\n");
kadams6 0:dfd0841721d5 17 write_register(0x06,0x01);
kadams6 0:dfd0841721d5 18 wait(0.5);
kadams6 0:dfd0841721d5 19
kadams6 0:dfd0841721d5 20 // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
kadams6 0:dfd0841721d5 21 write_register(0x03,0x0A);
kadams6 0:dfd0841721d5 22 wait(0.5);
kadams6 0:dfd0841721d5 23 };
kadams6 0:dfd0841721d5 24
kadams6 0:dfd0841721d5 25 ~SCP1000() { /* empty */ };
kadams6 0:dfd0841721d5 26
kadams6 0:dfd0841721d5 27 unsigned long readPressure() {
kadams6 0:dfd0841721d5 28 unsigned long pressure_msb = read_register(PRESSURE);
kadams6 0:dfd0841721d5 29 pressure_msb &= 0x07;
kadams6 0:dfd0841721d5 30 unsigned long pressure_lsb = read_register16(PRESSURE_LSB);
kadams6 0:dfd0841721d5 31 unsigned long pressure = ((pressure_msb<<16)| pressure_lsb);
kadams6 0:dfd0841721d5 32 pressure /= 4;
kadams6 0:dfd0841721d5 33
kadams6 0:dfd0841721d5 34 return pressure;
kadams6 0:dfd0841721d5 35 };
kadams6 0:dfd0841721d5 36
kadams6 0:dfd0841721d5 37 float readTemperature() {
kadams6 0:dfd0841721d5 38 float temp_in = read_register16(TEMP);
kadams6 0:dfd0841721d5 39 temp_in /= 20;
kadams6 0:dfd0841721d5 40 return temp_in;
kadams6 0:dfd0841721d5 41 };
kadams6 0:dfd0841721d5 42
kadams6 0:dfd0841721d5 43
kadams6 0:dfd0841721d5 44 private:
kadams6 0:dfd0841721d5 45 static const char PRESSURE = 0x1F; //Pressure 3 MSB
kadams6 0:dfd0841721d5 46 static const char PRESSURE_LSB = 0x20; //Pressure 16 LSB
kadams6 0:dfd0841721d5 47 static const char TEMP = 0x21; //16 bit temp
kadams6 0:dfd0841721d5 48 SPI m_spi;
kadams6 0:dfd0841721d5 49 DigitalOut m_cs;
kadams6 0:dfd0841721d5 50
kadams6 0:dfd0841721d5 51 char read_register(char register_name) {
kadams6 0:dfd0841721d5 52 register_name <<=2;
kadams6 0:dfd0841721d5 53 register_name &= 0xFC;
kadams6 0:dfd0841721d5 54 m_cs=0; //Select SPI device
kadams6 0:dfd0841721d5 55 m_spi.write(register_name); //Send register location
kadams6 0:dfd0841721d5 56 char register_value=m_spi.write(0x00);
kadams6 0:dfd0841721d5 57 m_cs=1;
kadams6 0:dfd0841721d5 58 return register_value;
kadams6 0:dfd0841721d5 59 };
kadams6 0:dfd0841721d5 60
kadams6 0:dfd0841721d5 61 void write_register(char register_name, char register_value) {
kadams6 0:dfd0841721d5 62 register_name <<= 2;
kadams6 0:dfd0841721d5 63 register_name |= 0x02; //le estamos diciendo que escriba
kadams6 0:dfd0841721d5 64 m_cs=0; //Select SPI device
kadams6 0:dfd0841721d5 65 m_spi.write(register_name); //Send register location
kadams6 0:dfd0841721d5 66 m_spi.write(register_value); //Send value to record into register
kadams6 0:dfd0841721d5 67 m_cs=1;
kadams6 0:dfd0841721d5 68 };
kadams6 0:dfd0841721d5 69
kadams6 0:dfd0841721d5 70 float read_register16(char register_name) {
kadams6 0:dfd0841721d5 71 register_name <<= 2;
kadams6 0:dfd0841721d5 72 register_name &= 0xFC; //Read command
kadams6 0:dfd0841721d5 73 m_cs=0; //Select SPI Device
kadams6 0:dfd0841721d5 74 m_spi.write(register_name); //Write byte to device
kadams6 0:dfd0841721d5 75 int in_byte1 = m_spi.write(0x00);
kadams6 0:dfd0841721d5 76 int in_byte2 = m_spi.write(0x00);
kadams6 0:dfd0841721d5 77 m_cs=1;
kadams6 0:dfd0841721d5 78 float in_word= (in_byte1<<=8) | (in_byte2);
kadams6 0:dfd0841721d5 79 return(in_word);
kadams6 0:dfd0841721d5 80 };
kadams6 0:dfd0841721d5 81
kadams6 0:dfd0841721d5 82 };
kadams6 0:dfd0841721d5 83
kadams6 0:dfd0841721d5 84 #endif // _SCP1000_H