0,0 → 1,118 |
/* |
MPL115A1 sparkfun breakout baropressure meter |
SDN : pin 7 |
CSN : pin 10 |
SDI/MOSI : pin 11 |
SDO/MISO : pin 12 |
SCK : pin 13 |
*/ |
|
// the sensor communicates using SPI, so include the library: |
#include <SPI.h> |
|
#define PRESH 0x80 |
#define PRESL 0x82 |
#define TEMPH 0x84 |
#define TEMPL 0x86 |
|
#define A0MSB 0x88 |
#define A0LSB 0x8A |
#define B1MSB 0x8C |
#define B1LSB 0x8E |
#define B2MSB 0x90 |
#define B2LSB 0x92 |
#define C12MSB 0x94 |
#define C12LSB 0x96 |
|
#define CONVERT 0x24 |
|
#define chipSelectPin 10 |
#define shutDown 7 |
|
float A0_; |
float B1_; |
float B2_; |
float C12_; |
|
void setup() { |
Serial.begin(115200); |
|
// start the SPI library: |
SPI.begin(); |
|
// initalize the data ready and chip select pins: |
pinMode(shutDown, OUTPUT); |
digitalWrite(shutDown, HIGH); |
pinMode(chipSelectPin, OUTPUT); |
digitalWrite(chipSelectPin, HIGH); |
delay (10); |
|
// read registers that contain the chip-unique parameters to do the math |
unsigned int A0H = readRegister(A0MSB); |
unsigned int A0L = readRegister(A0LSB); |
A0_ = (A0H << 5) + (A0L >> 3) + (A0L & 0x07) / 8.0; |
|
unsigned int B1H = readRegister(B1MSB); |
unsigned int B1L = readRegister(B1LSB); |
B1_ = ( ( ( (B1H & 0x1F) * 0x100)+B1L) / 8192.0) - 3 ; |
|
unsigned int B2H = readRegister(B2MSB); |
unsigned int B2L = readRegister(B2LSB); |
B2_ = ( ( ( (B2H - 0x80) << 8) + B2L) / 16384.0 ) - 2 ; |
|
unsigned int C12H = readRegister(C12MSB); |
unsigned int C12L = readRegister(C12LSB); |
C12_ = ( ( ( C12H * 0x100 ) + C12L) / 16777216.0 ) ; |
} |
|
void loop() { |
Serial.print("de druk is : "); |
Serial.println(baropPessure()); |
delay(1000); |
} |
|
//Read registers |
unsigned int readRegister(byte thisRegister ) { |
unsigned int result = 0; // result to return |
digitalWrite(chipSelectPin, LOW); |
delay(10); |
SPI.transfer(thisRegister); |
result = SPI.transfer(0x00); |
digitalWrite(chipSelectPin, HIGH); |
return(result); |
} |
|
//read pressure |
float baropPessure(){ |
digitalWrite(chipSelectPin, LOW); |
delay(3); |
SPI.transfer(0x24); |
SPI.transfer(0x00); |
digitalWrite(chipSelectPin, HIGH); |
delay(3); |
digitalWrite(chipSelectPin, LOW); |
SPI.transfer(PRESH); |
unsigned int presH = SPI.transfer(0x00); |
delay(3); |
SPI.transfer(PRESL); |
unsigned int presL = SPI.transfer(0x00); |
delay(3); |
SPI.transfer(TEMPH); |
unsigned int tempH = SPI.transfer(0x00); |
delay(3); |
SPI.transfer(TEMPL); |
unsigned int tempL = SPI.transfer(0x00); |
delay(3); |
SPI.transfer(0x00); |
delay(3); |
digitalWrite(chipSelectPin, HIGH); |
|
unsigned long press = ((presH *256) + presL)/64; |
unsigned long temp = ((tempH *256) + tempL)/64; |
|
float pressure = A0_+(B1_+C12_*temp)*press+B2_*temp; |
float preskPa = pressure* (65.0/1023.0)+50.0; |
|
return(preskPa); |
} |
|