Druk en temperatuur controle (4 / 10 stap)

Stap 4: Uitbuiting du BMP180

Giet lire les valeurs capté par le BMP 180 il faut modifier le projet précédemment importé. Il faut een faire un BMP085.h qui est le kop corespondent à la classe contenant les méthodes propre à notre-capteur omvatten.

Le code est composé de 2 fonctions opdrachtgever:

  • WrittenHandler: verlichte le buffer envoye par la Raspberry au RedBearLab to de setter un booléen permettant de savoir quel module est solicité par la framboos
  • m_status_check_handle: Cette fonction est opwekking périodiquement, elle verificateur si une demande de r.i.o. een été faite au capteur si oui elle voi la valeur lu par le capteur à la Raspberry via la la méthode updateCharacteristicValue

La Périodiciteit d'appelle à la fonction m_status_check_handle est réglé par l'objet ticker grâce à la méthode hechten_us.


 #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(); } } 

Gerelateerde Artikelen

Druk en temperatuur indicator van de Arduino

Druk en temperatuur indicator van de Arduino

Dit project leest de luchtdruk, de omgevingstemperatuur, de datum, de tijd en beheert de weergavekleur van een telefoon Siemens S55 ik ontdaan.Stap 1: SysteembeschrijvingZoals kan worden gezien in de foto's boven en in de bijgevoegde diagram, is het
Temperatuur controle voor vriezer of koelkast

Temperatuur controle voor vriezer of koelkast

dit instructable omvat de integratie van een temperatuurregeling van Johnson Controls in een verlengsnoer met schakelaar en stopcontact voor het beheersen van een vriezer. Voor het fermenteren van bier, een borstdiepvriezer is een fantastisch platfor
Kamer temperatuur controle Over WiFi

Kamer temperatuur controle Over WiFi

Hey iedereen! In dit instructable, ik zal u tonen hoe een apparaat waarmee de temperatuur van een kamer, via het internet kunt maken. Dit is handig voor tijden wanneer het buiten koud is en je bent op het werk of school, willen om thuis te komen naar
Temperatuur controle voor keukenapparatuur

Temperatuur controle voor keukenapparatuur

In dit Instructable, zal ik stap door het beheersen van de temperatuur van de meeste keukenapparatuur. Als voorbeeld zal ik gebruik maken van een oude Westbend Poppery popcorn maker (aka. koffie brander), maar deze dezelfde technieken zal gelden voor
Aquarium digitale temperatuur controle

Aquarium digitale temperatuur controle

een meer nauwkeurige en veiliger manier om te controleren uw aquaria temperatuur. De meeste controllers op de markt zijn dure, onbetrouwbare, en kunnen alleen met het besturingselement of de kachel een koeler niet beide. Kun je dit voor zo weinig zoa
Temperatuur controlesysteem met Labview (Atmega32)

Temperatuur controlesysteem met Labview (Atmega32)

ABSTRACTDit werk beschrijft een kader van ON/OFF, proportionele en lineaire temperatuur controlesystemen. Het ontwerp en de implementatie van dit proces gebeurt met LABVIEW, virtual workbench software. Het project omvat omvat data-acquisitie, gegeven
Hoe te automatiseren van elke temperatuur gecontroleerde proces

Hoe te automatiseren van elke temperatuur gecontroleerde proces

Ik ga u tonen hoe te bouwen en gebruiken van een apparaat dat u toelaten zal om het automatisch regelen van de temperatuur van een thermisch proces (verwarming of koeling) aan een zeer precieze graad.Precisie temperatuurregeling voor zowel warme en k
CRX Climate Control Plate Installation

CRX Climate Control Plate Installation

dit schrijf omvat de installatie van de klep van het klimaat zoals dat wordt verkocht door Todd (CRX Toad op Honda-Tech, stang65fst op Ebay. Hoedt u voor namaak, zijn we het origineel!). Het geeft uw gebroken klimaatcontrole een nieuwe look zonder de
Temperatuur gecontroleerde vak voor laboratorium metingen

Temperatuur gecontroleerde vak voor laboratorium metingen

Ik ben een plant wetenschapper die zich bezighoudt met wat gebeurt er met de planten bij verschillende temperaturen. Ik doe enkele experimenten waar ik moet meten de planten op 25 en 35 graden C (77 en 95 graden F) maar niet voortdurend toegang hebbe
Arduino Nano: Luchtdruk en temperatuur BMP180 Sensor met Visuino

Arduino Nano: Luchtdruk en temperatuur BMP180 Sensor met Visuino

BMP180 zijn zeer populaire gecombineerde temperatuur en barometrische druk Arduino sensoren. Ze kunnen worden gebruikt voor weerstations, evenals over het meten van de hoogte.In dit Instructable, ik zal je laten zien, hoe gemakkelijk het is om ze te
Arduino Nano: De BMP180 barometerdruk en de temperatuur I2C 2 X 16 LCD-scherm met Visuino

Arduino Nano: De BMP180 barometerdruk en de temperatuur I2C 2 X 16 LCD-scherm met Visuino

De BMP180 is een zeer populaire gecombineerde sensor voor temperatuur en barometrische druk Arduino. Ik heb reeds Instuctable met BMP180. Een aantal mensen gevraagd maar hoe kunt u een ander I2C apparaat op dezelfde I2C bus als de BMP180. Ik heb eind
BROEIKASGASSEN, RACK SERVERS, AQUARIUM en andere toestellen temperatuur SUPERVISOR met SMS ALARMSYSTEEM met behulp van Arduino, itbrainpower.net 3G / GSM shields en 1WIRE temperatuursensor

BROEIKASGASSEN, RACK SERVERS, AQUARIUM en andere toestellen temperatuur SUPERVISOR met SMS ALARMSYSTEEM met behulp van Arduino, itbrainpower.net 3G / GSM shields en 1WIRE temperatuursensor

Over het projectZelf uw eigen temperatuur controle systeem met MAXIMUM en MINIMUM temperatuur drempelsbouwen, houden levend massages en (oldies maar goldies als) SMS paging en externe ARM/DISARM systeem. U kunt een of meer 1WIRE temperatuur sensor (s
Arduino stappenteller horloge, met temperatuur, hoogte en kompas!

Arduino stappenteller horloge, met temperatuur, hoogte en kompas!

UPDATE: CHECK OUT mijn andere twee projecten >>SweeperBot - Roomba-achtige Robot met BluetoothWekker met infrarood- en Bluetooth-luidsprekersHallo mensen! Laatste paar dagen heb ik geobsedeerd door het idee te halen mijn eigen horloge van arduino de
Arduino Basic temperatuur Monitor - Exosite

Arduino Basic temperatuur Monitor - Exosite

Deze code Arduino leest een Dallas Semiconductor een-draads temperatuursensor en rapporteert aan een portaal van de Exosite via de Ethernet-Shield. Dit artikel beschrijft de hook-up informatie en de code voor een eenvoudig netwerk aangesloten tempera