Presión y control de la temperatura (4 / 10 paso)

Paso 4: Explotación du BMP180

Pour lire les valeurs capté par le 180 BMP il faut modificador le projet précédemment importé. Il faut un faire ONU incluyen BMP085.h est le encabezado correspondant à la classe contenant les méthodes propre à notre liquides.

Le código est composé de 2 funciones principales:

  • WrittenHandler: iluminada le buffer envoyé par la frambuesa au RedBearLab afin de setter ONU booléen carrera de savoir quel módulo est solicité par la frambuesa
  • m_status_check_handle: Cette fonction est appelé périodiquement, elle verificador si une demande de relevé un été l au liquides si oui elle envoi la valeur lu par le capteur à la frambuesa a través de la la méthode updateCharacteristicValue

La périodicité d'appelle à la fonction m_status_check_handle est réglé par objeto ticker grâce à la méthode fijeestadounidense.


 #include "mbed.h" #include "ble/BLE.h" #include "ble/FunctionPointerWithContext.h" #include "Servo.h" #include "GattCallbackParamTypes.h" #include "BMP085.h"</p><p>#define BLE_UUID_TXRX_SERVICE 0x0000 /**< The UUID of the Nordic UART Service. */ #define BLE_UUID_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */ #define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */ #define TXRX_BUF_LEN 20 #define DIGITAL_OUT_PIN P0_17 //D7 #define DIGITAL_IN_PIN P0_5 //A4 #define PWM_PIN P0_16 //D6 #define SERVO_PIN P0_14 //D10 #define ANALOG_IN_PIN P0_1 //A0 BLE ble; DigitalOut LED_SET(DIGITAL_OUT_PIN); DigitalIn BUTTON(DIGITAL_IN_PIN); PwmOut PWM(PWM_PIN); AnalogIn ANALOG(ANALOG_IN_PIN); Servo MYSERVO(SERVO_PIN); BMP085 myCaptor(P0_29, P0_28); Serial pc(USBTX, USBRX); static uint8_t analog_enabled = 0; static uint8_t captor_enabled = 0; static uint8_t captor_enabled_for_pressure = 0; // The Nordic UART Service static const uint8_t uart_base_uuid[] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E}; static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71};</p><p>uint8_t txPayload[TXRX_BUF_LEN] = {0,}; uint8_t rxPayload[TXRX_BUF_LEN] = {0,}; GattCharacteristic txCharacteristic(uart_tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); GattCharacteristic rxCharacteristic(uart_rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); GattCharacteristic *uartChars[] = {&txCharacteristic, &rxCharacteristic}; GattService uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *)); void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { pc.printf("Disconnected \r\n"); pc.printf("Restart advertising \r\n"); ble.startAdvertising(); } void confirmationHandler(uint16_t Handler) { if (captor_enabled) captor_enabled = false; } void WrittenHandler(const GattWriteCallbackParams *Handler) { uint8_t buf[TXRX_BUF_LEN]; uint16_t bytesRead, index; if (Handler->handle == txCharacteristic.getValueAttribute().getHandle()) { ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead); memset(txPayload, 0, TXRX_BUF_LEN); memcpy(txPayload, buf, TXRX_BUF_LEN); for(index=0; index<bytesread; index++)="" pc.putc(buf[index]);="" if(buf[0]="=" 0x01)="" {="" if(buf[1]="=" 0x02)="" while(1)="" led_set="!LED_SET;" wait(0.25);="" }="" else="" 0xa0)="" analog_enabled="1;" captor_enabled="1;" 0x03)="" captor_enabled_for_pressure="1;" float="" value="(float)buf[1]/255;" pwm="value;" }<="" p=""></bytesread;></p><p>void m_status_check_handle(void) { uint8_t buf[4]; if (analog_enabled) // if analog reading enabled { // Read and send out float s = ANALOG; uint16_t value = s*1024; buf[0] = (0x0B); buf[1] = (value >> 8); buf[2] = (value); ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 3); } if (captor_enabled) // if analog reading enabled { // Read and send out captor_enabled = false; myCaptor.update(); float s = myCaptor.get_temperature() * 100; int value = s; buf[0] = (value >> 24); buf[1] = (value >> 16); buf[2] = (value >> 8); buf[3] = value; //for(int i = 0; i < 200000; ++i) ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 4); } // add to get pressure if (captor_enabled_for_pressure) { // Read and send out captor_enabled_for_pressure = false; myCaptor.update(); float s = myCaptor.get_pressure() * 100; uint32_t value = s; buf[0] = (value >> 24); buf[1] = (value >> 16); buf[2] = (value >> 8); buf[3] = value; ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 4); } }</p><p>int main(void) { Ticker ticker; ticker.attach_us(m_status_check_handle, 200000); ble.init(); ble.onDisconnection(disconnectionCallback); ble.onDataWritten(WrittenHandler); ble.onConfirmationReceived(confirmationHandler); pc.baud(9600); pc.printf("SimpleChat Init \r\n"); // setup advertising ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)"Mustafa", sizeof("Mustafa") - 1); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid)); // 100ms; in multiples of 0.625ms. ble.setAdvertisingInterval(160); ble.addService(uartService); ble.startAdvertising(); pc.printf("Advertising Start \r\n"); while(1) { ble.waitForEvent(); } } 

Artículos Relacionados

Múltiples Control de la temperatura del fermentador con Arduino

Múltiples Control de la temperatura del fermentador con Arduino

Control de la temperatura a menudo es considerado uno de los mejores cinco pasos hacia la cerveza mejor. (http://beerandwinejournal.com/10-better-1/) Existen numerosos métodos para mantener la fermentación del mosto a la temperatura óptima de envolve
Altitud, presión y medición de temperatura con junta de LinkitOne y BMP180

Altitud, presión y medición de temperatura con junta de LinkitOne y BMP180

Siempre se pregunta puede medir la presión, la altitud y la temperatura a la vez... sí, esto puede ser hecho con el famoso BMP180 Sensor y Mediatek LinkitOne Junta...Permite comenzar...Paso 1: requisitosBMP180Un tablero de MediaTek LinkItConexión de
Control de la temperatura de registro inalámbrico

Control de la temperatura de registro inalámbrico

por lo que este perezoso Geek (registro antiguo) ama los gadgets. Mi amigo me habló y me envió un par de módulos de NRF24L01 +.Por lo tanto, ser un friki, necesita una aplicación para ellos y me decidí por un montón de módulos de temperatura inalámbr
Junta de Intel® Edison: Control de la temperatura de la IoT

Junta de Intel® Edison: Control de la temperatura de la IoT

IoT ya no se limita a sólo el fabricante aficionados y entusiastas. Ha llamado la atención de las empresas que quieren iniciar una nueva revolución industrial mediante IoT. De puestos de trabajo inteligentes para aumentar la producción, IoT tiene un
LED + control de la temperatura

LED + control de la temperatura

Este proyecto viene con GUI es código de Microsoft C# y sketch de Arduino.Básicamente, tiene una GUI para encender y apagar el LED y un botón de temperatura para comprobar la temperatura del entorno.Paso 1: partes1 unidad de Arduino UNO1 unidad de LE
Control de temperatura para el congelador o el refrigerador

Control de temperatura para el congelador o el refrigerador

este instructable cubre la integración de un control de temperatura Johnson Controls en un cable de extensión con interruptor y toma eléctrica para el control de un congelador. Para fermentar cerveza, un congelador es una plataforma fantástica, pero
DIY AVR microcontrolador basado en monitoreo de temperatura y sistema de Control

DIY AVR microcontrolador basado en monitoreo de temperatura y sistema de Control

Microcontrolador AVR basado en controlador de temperatura, utiliza Sensor de temperatura LM35 para medir temperatura y 16 x 2 LCD se utiliza para mostrar el set point de temperatura, estado del calentador y la temperatura actual, controla temperatura
Control de temperatura

Control de temperatura

este proyecto es un sistema simple de control de la temperatura basado en un sensor LM35 muy barato, estoy todavía amateur y este código se basa en otro proyecto 2 de fritizing "http://fritzing.org/projects/how-to-connect-a-qy-1602a-lcd-to-arduino-co
Control de temperatura para aparatos de cocina

Control de temperatura para aparatos de cocina

en este Instructable, se paso a través del control de la temperatura de los artefactos de cocina. Como ejemplo, utilizo un viejo fabricante de las palomitas Westbend Poppery (aka. tostador de café), pero estas mismas técnicas serán aplicables a la ma
Registrador de temperatura para piel

Registrador de temperatura para piel

Como parte de CSCI 7000 computación CU Boulder física para el buen curso creé una temperatura de piel medida/registro de dispositivo usable y confort térmico del usuario (caliente, tibio, neutral, fresco, frío). La meta es eventualmente desarrollar u
Cómo utilizar una olla a presión (y elegir que comprar)

Cómo utilizar una olla a presión (y elegir que comprar)

Olla a presión es una de mis herramientas de cocina favorito absoluto! Tienen una mala reputación por ser destructores de cocina y cena - pero como todas las otras herramientas son perfectamente seguras como utilizarlos correctamente. Estos días las
Cómo utilizar el Sensor de temperatura DS18B20 - Arduino Tutorial

Cómo utilizar el Sensor de temperatura DS18B20 - Arduino Tutorial

En este tutorial usted aprenderá cómo usar el sensor de temperatura DS18B20 con Arduino.La temperatura se imprimirá en el serial monitor de Codebender o el IDE de Arduino.Video de presentación:Antes de empezar vamos a ver más información de este sens
Temperatura con DS18B20

Temperatura con DS18B20

es un pequeño proyecto sobre control de la temperatura. Usé un dispositivo digital DS18B20 para obtener la temperatura. El dispositivo utiliza el protocolo OneWire. Usted necesita solamente una placa Arduino, un DS18B20 y un 4.7KOhm resistor y un pro
Arduino Monitor portátil de tiempo, altímetro, temperatura, humedad, con LCD con sólo 3 pines DHT11 y BMP85

Arduino Monitor portátil de tiempo, altímetro, temperatura, humedad, con LCD con sólo 3 pines DHT11 y BMP85

hice este proyecto ya que a menudo escalar montañas como el de la foto y necesito saber la altitud, la temperatura y también cambios en el clima, a veces en cuestión de minutos el tiempo que muy mala, con granizo, la nieve y una niebla muy densa.Todo