Paso 3: código:
El código de partículas MPL3115A2 se puede descargar desde nuestro repositorio de github-ControlEverythingCommunity
Aquí está el enlace para el mismo:
https://github.com/ControlEverythingCommunity/MPL3...
La hoja de datos de MPL3115A2 se puede encontrar aquí:
https://S3.amazonaws.com/controleverything.Media/c...
Hemos utilizado dos bibliotecas para el código de la partícula, que son application.h y spark_wiring_i2c.h. Biblioteca de Spark_wiring_i2c es necesaria para facilitar la comunicación I2C con el sensor.
También puede copiar el código desde aquí, se da como sigue:
Distribuido con una licencia de libre albedrío.
Se usa cualquier forma desea, beneficio o libre, siempre cabe en las licencias de sus obras anexas.
MPL3115A2
Este código está diseñado para trabajar con el módulo de Mini de I2C MPL3115A2_I2CS de ControlEverything.com.
https://www.controleverything.com/content/Analog-...
#include < application.h >
#include < spark_wiring_i2c.h >
Dirección I2C MPL3115A2 es 0x60(96)
#define Addr 0x60
flotador cTemp = 0.0, fTemp = 0.0, presión = 0.0, altitud = 0.0;
int temp = 0, tHeight = 0; pres largo = 0;
void setup()
{
Establecer variable
Particle.variable ("i2cdevice", "MPL3115A2");
Particle.variable ("cTemp", cTemp);
Particle.variable ("pressure", presión);
Particle.variable ("altitud", altura);
Inicializar la comunicación I2C
Wire.Begin();
Inicializar la comunicación Serial, juego velocidad en baudios = 9600
Serial.Begin(9600);
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de control Select
Wire.Write(0x26);
Modo activo, OSR = 128, modo de altímetro
Wire.Write(0xB9);
Detener la transmisión I2C
Wire.endTransmission();
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de configuración de datos Seleccione
Wire.Write(0x13);
Datos listo evento habilitado para altitud, presión, temperatura
Wire.Write(0x07);
Detener la transmisión I2C
Wire.endTransmission();
Delay(300);
}
void loop()
{
unsigned int datos [6];
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de control Select
Wire.Write(0x26);
Modo activo, OSR = 128, modo de altímetro
Wire.Write(0xB9);
Detener la transmisión I2C
Wire.endTransmission();
Delay(1000);
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de datos Seleccione
Wire.Write(0x00);
Detener la transmisión I2C
Wire.endTransmission();
Solicitud de 6 bytes de datos
Wire.requestFrom (Addr, 6);
Leer 6 bytes de datos de la dirección 0x00(00)
Estado, tHeight msb1, tHeight msb, lsb tHeight, temp msb, lsb temp
if(Wire.Available() == 6)
{
datos [0] = Wire.read();
datos [1] = Wire.read();
datos [2] = Wire.read();
datos [3] = Wire.read();
datos [4] = Wire.read();
datos [5] = Wire.read();
}
Convertir los datos en 20 bits
tHeight = (((largos) datos [1] * 65536 (larga)) + (datos [2] * 256) + (datos [3] & 0xF0)) / 16);
Temp = ((datos [4] * 256) + (datos [5] & 0xF0)) / 16;
altitud = tHeight / 16.0;
cTemp = (temp / 16.0);
fTemp = cTemp * 1.8 + 32;
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de control Select
Wire.Write(0x26);
Modo activo, OSR = 128, modalidad de barómetro
Wire.Write(0x39);
Detener la transmisión I2C
Wire.endTransmission();
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de datos Seleccione
Wire.Write(0x00);
Detener la transmisión I2C
Wire.endTransmission();
Delay(1000);
Solicitud de 4 bytes de datos
Wire.requestFrom (Addr, 4);
Lee 4 bytes de datos
Estado, pres msb1, pres msb, lsb de pres
if(Wire.Available() == 4)
{
datos [0] = Wire.read();
datos [1] = Wire.read();
datos [2] = Wire.read();
datos [3] = Wire.read();
}
Convertir los datos en 20 bits
Pres = (((largos) datos [1] * 65536 (larga)) + (datos [2] * 256) + (datos [3] & 0xF0)) / 16;
presión = (pres / 4.0) / 1000.0;
Datos de salida al tablero
Particle.Publish ("altitud:", String(altitude));
Particle.Publish ("presión:", String(pressure));
Particle.Publish ("temperatura en grados Celsius:", String(cTemp));
Particle.Publish ("temperatura en grados Fahrenheit:", String(fTemp));
Delay(1000);
}