Stap 3: Code:
De code van de arduino voor MPL3115A2 kan worden gedownload van onze github archief-ControlEverythingCommunity
Hier is de link voor hetzelfde:
https://github.com/ControlEverythingCommunity/MPL3...
Het gegevensblad van MPL3115A2 kan hier worden gevonden:
https://S3.amazonaws.com/controleverything.Media/c...
We nemen de bibliotheek Wire.h om de I2c communicatie van de sensor met de Arduino board.
U kunt ook de code kopiëren vanaf hier, het wordt als volgt gegeven:
Gedistribueerd met een licentie van de vrije wil.
Gebruik het elke manier wilt u, op de winst of het gratis, mits het past in de licenties van de bijbehorende werken.
MPL3115A2
Deze code is ontworpen om te werken met de MPL3115A2_I2CS I2C Mini Module beschikbaar vanaf ControlEverything.com.
https://www.controleverything.com/content/Analog-...
#include < Wire.h >
MPL3115A2 I2C adres is 0x60(96)
#define Addr 0x60
VOID Setup
{
Initialiseren van de I2C communicatie
Wire.begin();
Initialiseren van seriële communicatie, set baud-rate = 9600
Serial.begin(9600);
I2C-overdracht starten
Wire.beginTransmission(Addr);
Besturingselement SELECT register
Wire.write(0x26);
Actieve modus OSR = 128, hoogtemeter modus
Wire.write(0xB9);
Stop I2C transmissie
Wire.endTransmission();
I2C-overdracht starten
Wire.beginTransmission(Addr);
Selecteer Configuratie gegevensregister
Wire.write(0x13);
Gegevens klaar gebeurtenis ingeschakeld voor hoogte, druk, temperatuur
Wire.write(0x07);
Stop I2C transmissie
Wire.endTransmission();
delay(300);
}
void loop
{
unsigned int gegevens [6];
I2C-overdracht starten
Wire.beginTransmission(Addr);
Besturingselement SELECT register
Wire.write(0x26);
Actieve modus OSR = 128, hoogtemeter modus
Wire.write(0xB9);
Stop I2C transmissie
Wire.endTransmission();
delay(1000);
I2C-overdracht starten
Wire.beginTransmission(Addr);
Selecteer gegevens registreren
Wire.write(0x00);
Stop I2C transmissie
Wire.endTransmission();
6 bytes aan gegevens aanvragen
Wire.requestFrom (Addr, 6);
6 bytes aan gegevens van adres 0x00(00) leest
status, tHeight msb1, tHeight msb, tHeight lsb, msb temp, temp lsb
Als (Wire.available() == 6)
{
gegevens [0] = Wire.read();
gegevens [1] = Wire.read();
gegevens [2] = Wire.read();
gegevens [3] = Wire.read();
gegevens [4] = Wire.read();
gegevens [5] = Wire.read();
}
De gegevens converteren naar 20-bits
int. tHeight = (((lange) (gegevens [1] * (lang) 65536) + (gegevens [2] * 256) + (gegevens [3] & 0xF0)) / 16);
int. temp = ((gegevens [4] * 256) + (gegevens [5] & 0xF0)) / 16;
hoogte zweven = tHeight / 16.0;
zweven cTemp = (temp / 16.0);
zweven fTemp = cTemp * 1.8 + 32;
I2C-overdracht starten
Wire.beginTransmission(Addr);
Besturingselement SELECT register
Wire.write(0x26);
Actieve modus OSR = 128, barometer modus
Wire.write(0x39);
Stop I2C transmissie
Wire.endTransmission();
delay(1000);
I2C-overdracht starten
Wire.beginTransmission(Addr);
Selecteer gegevens registreren
Wire.write(0x00);
Stop I2C transmissie
Wire.endTransmission();
4 bytes aan gegevens aanvragen
Wire.requestFrom (Addr, 4);
Lees 4 bytes aan gegevens
status, pres msb1, pres msb, pres lsb
Als (Wire.available() == 4)
{
gegevens [0] = Wire.read();
gegevens [1] = Wire.read();
gegevens [2] = Wire.read();
gegevens [3] = Wire.read();
}
De gegevens converteren naar 20-bits
lange pres = (((lange) gegevens [1] * (lang) 65536) + (gegevens [2] * 256) + (gegevens [3] & 0xF0)) / 16;
zweven druk = (pres / 4.0) / 1000.0;
Uitvoergegevens naar seriële monitor
Serial.Print ("hoogte:");
Serial.Print(Altitude);
Serial.println ("m");
Serial.Print ("druk:");
Serial.Print(Pressure);
Serial.println ("kPa");
Serial.Print ("temperatuur in Celsius:");
Serial.Print(cTemp);
Serial.println ("C");
Serial.Print ("temperatuur in Fahrenheit:");
Serial.Print(fTemp);
Serial.println ("F");
delay(500);
}