Lab3 - Pressure, temperature, and humidity sensors displayed on a webpage.
Dependencies: EthernetNetIf NTPClient_NetServices GPS mbed HTTPServer SDFileSystem
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
Generated on Tue Jul 19 2022 00:59:33 by 1.7.2