Partikel Photon - MPL3115A2 Precision höjdmätare Sensor handledning (3 / 4 steg)
Steg 3: kod:
Partikel koden för MPL3115A2 kan hämtas från vår github repository-ControlEverythingCommunity
Här är länken för samma:
https://github.com/ControlEverythingCommunity/MPL3...
Databladet för MPL3115A2 kan hittas här:
https://s3.amazonaws.com/controleverything.Media/c...
Vi har använt två bibliotek för partikel-koden, som är application.h och spark_wiring_i2c.h. Spark_wiring_i2c bibliotek krävs för att underlätta I2C kommunikationen med sensor.
Du kan också kopiera koden från här, det ges enligt följande:
Distribueras med en fri vilja licens.
Använda det något sätt du vill, vinst eller gratis, förutsatt att den passar i licenser av dess tillhörande arbeten.
MPL3115A2
Denna kod är utformad att fungera med MPL3115A2_I2CS I2C Mini modulen tillgänglig från ControlEverything.com.
https://www.controleverything.com/content/analog-...
#include < application.h >
#include < spark_wiring_i2c.h >
MPL3115A2 I2C adress är 0x60(96)
#define Addr 0x60
flyta cTemp = 0,0, fTemp = 0,0, tryck = 0,0, höjd = 0,0;
int temp = 0, tHeight = 0; lång pres = 0;
void setup()
{
Variabeln
Particle.Variable ("i2cdevice", "MPL3115A2");
Particle.Variable ("cTemp", cTemp);
Particle.Variable ("pressure", pressa);
Particle.Variable ("höjd", höjd);
Initialisera I2C kommunikation
Wire.BEGIN();
Initialisera seriell kommunikation, ange baudvärde = 9600
Serial.BEGIN(9600);
Starta I2C-överföring
Wire.beginTransmission(Addr);
SELECT-kontrollen register
Wire.write(0x26);
Aktivt läge, OSR = 128, höjdmätarläget
Wire.write(0xB9);
Stoppa I2C sändningen
Wire.endTransmission();
Starta I2C-överföring
Wire.beginTransmission(Addr);
Välj data konfiguration register
Wire.write(0x13);
Data redo händelse aktiverat för höjd, tryck, temperatur
Wire.write(0x07);
Stoppa I2C sändningen
Wire.endTransmission();
Delay(300);
}
void loop()
{
unsigned int data [6].
Starta I2C-överföring
Wire.beginTransmission(Addr);
SELECT-kontrollen register
Wire.write(0x26);
Aktivt läge, OSR = 128, höjdmätarläget
Wire.write(0xB9);
Stoppa I2C sändningen
Wire.endTransmission();
Delay(1000);
Starta I2C-överföring
Wire.beginTransmission(Addr);
Välj dataregister
Wire.write(0x00);
Stoppa I2C sändningen
Wire.endTransmission();
Begäran 6 byte data
Wire.requestFrom (Addr, 6);
Läst 6 byte från adress 0x00(00)
status, tHeight msb1, tHeight msb, tHeight lsb, temp msb, temp lsb
IF(Wire.available() == 6)
{
data [0] = Wire.read();
data [1] = Wire.read();
data [2] = Wire.read();
data [3] = Wire.read();
data [4] = Wire.read();
data [5] = Wire.read();
}
Konvertera data till 20-bitar
tHeight = (((långa) data [1] * (long) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16);
Temp = ((data [4] * 256) + (data [5] & 0xF0)) / 16;
höjd = tHeight / 16,0;
cTemp = (temp / 16,0);
fTemp = cTemp * 1,8 + 32.
Starta I2C-överföring
Wire.beginTransmission(Addr);
SELECT-kontrollen register
Wire.write(0x26);
Aktivt läge, OSR = 128, barometerläget
Wire.write(0x39);
Stoppa I2C sändningen
Wire.endTransmission();
Starta I2C-överföring
Wire.beginTransmission(Addr);
Välj dataregister
Wire.write(0x00);
Stoppa I2C sändningen
Wire.endTransmission();
Delay(1000);
Begäran 4 byte data
Wire.requestFrom (Addr, 4);
Läs 4 byte data
status, pres msb1, pres msb, pres lsb
IF(Wire.available() == 4)
{
data [0] = Wire.read();
data [1] = Wire.read();
data [2] = Wire.read();
data [3] = Wire.read();
}
Konvertera data till 20-bitar
Pres = (((långa) data [1] * (long) 65536) + (data [2] * 256) + (data [3] & 0xF0)) / 16;
Tryck = (pres / 4.0) / 1000.0;
Utdata till dashboard
Particle.publish ("höjd:", String(altitude));
Particle.publish ("tryck:", String(pressure));
Particle.publish ("temperaturen i Celsius:", String(cTemp));
Particle.publish ("temperaturen i Fahrenheit:", String(fTemp));
Delay(1000);
}