App for BLE Nano to monitor the power consumption for a specific location, by intercepting the led flashes of a standard power meter. It counts and log the flashes for each second. It works with RedBear App for smart phone (Simple Chat App).

Dependencies:   BLE_API lib_mma8451q mbed nRF51822

Fork of nRF51822_DataLogger_with_Chat by Valentin Tanasa

Committer:
tanasaro10
Date:
Sun Aug 14 14:57:09 2016 +0000
Revision:
12:27e9c3db28b9
Parent:
11:baafa4f7a15e
First release for counting and logging power impulses of a power meter. Useful to track the power consumption for a specific location.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tanasaro10 9:303d3628986a 1 #include "ble_flash.h"
tanasaro10 9:303d3628986a 2 #include "mbed.h"
tanasaro10 9:303d3628986a 3
tanasaro10 12:27e9c3db28b9 4 //#define MAXBUFFER 99u //(((BLE_FLASH_PAGE_SIZE - 4 - sizeof(myData_t))/sizeof(myDataL_t))
tanasaro10 12:27e9c3db28b9 5 #define MAXBUFFER 251u //(((BLE_FLASH_PAGE_SIZE - 4 - sizeof(myData_t))/sizeof(myDataL_t))
tanasaro10 12:27e9c3db28b9 6 //#define MAX_WORD_PAGE_DATA 254u // to be computed as round_next_int(MAXBUFFER*sizeof(myDataL_t)+sizeof(myData_t))
tanasaro10 9:303d3628986a 7
tanasaro10 9:303d3628986a 8 #define MAX_PAGE_NUM (NRF_FICR->CODESIZE - 1) // 255
tanasaro10 12:27e9c3db28b9 9 #define MIN_PAGE_NUM 151u
tanasaro10 8:f28ad4600b0f 10
tanasaro10 8:f28ad4600b0f 11
tanasaro10 8:f28ad4600b0f 12 typedef struct{
tanasaro10 9:303d3628986a 13 uint8_t year; // 20_XX, 2016 => 16;
tanasaro10 8:f28ad4600b0f 14 uint8_t month; // 1..12
tanasaro10 9:303d3628986a 15 uint8_t day; // 1..31
tanasaro10 11:baafa4f7a15e 16 uint8_t hours;
tanasaro10 11:baafa4f7a15e 17 uint8_t minutes;
tanasaro10 11:baafa4f7a15e 18 uint8_t seconds;
tanasaro10 11:baafa4f7a15e 19 } mdate_time_t;
tanasaro10 8:f28ad4600b0f 20
tanasaro10 8:f28ad4600b0f 21
tanasaro10 8:f28ad4600b0f 22 typedef struct{
tanasaro10 11:baafa4f7a15e 23 mdate_time_t currentDateTime;
tanasaro10 11:baafa4f7a15e 24 mdate_time_t newDateTime;
tanasaro10 11:baafa4f7a15e 25 bool updateDateTime; // true if currentTime needs to be updated with newTime;
tanasaro10 11:baafa4f7a15e 26 } mdatetime_manager_t;
tanasaro10 11:baafa4f7a15e 27
tanasaro10 8:f28ad4600b0f 28
tanasaro10 9:303d3628986a 29 typedef enum {
tanasaro10 9:303d3628986a 30 eStartAdvertising =0,
tanasaro10 9:303d3628986a 31 eStopAdvertising =1,
tanasaro10 9:303d3628986a 32 eDisconnect =2
tanasaro10 9:303d3628986a 33 } connection_update_t;
tanasaro10 8:f28ad4600b0f 34
tanasaro10 8:f28ad4600b0f 35 typedef struct {
tanasaro10 12:27e9c3db28b9 36 uint16_t hits;
tanasaro10 9:303d3628986a 37 } myPayload_t;
tanasaro10 9:303d3628986a 38
tanasaro10 9:303d3628986a 39
tanasaro10 9:303d3628986a 40 typedef struct {
tanasaro10 9:303d3628986a 41 myPayload_t data;
tanasaro10 11:baafa4f7a15e 42 uint8_t seconds;
tanasaro10 11:baafa4f7a15e 43 uint8_t minutes;
tanasaro10 9:303d3628986a 44 } myDataL_t;
tanasaro10 9:303d3628986a 45
tanasaro10 9:303d3628986a 46 typedef struct {
tanasaro10 11:baafa4f7a15e 47 mdate_time_t datetime; // 6 bytes length
tanasaro10 12:27e9c3db28b9 48 myPayload_t data; // 2 bytes lenth
tanasaro10 8:f28ad4600b0f 49 } myData_t;
tanasaro10 8:f28ad4600b0f 50
tanasaro10 9:303d3628986a 51 typedef struct {
tanasaro10 9:303d3628986a 52 myData_t startData;
tanasaro10 9:303d3628986a 53 myDataL_t myData[MAXBUFFER];
tanasaro10 9:303d3628986a 54 } myDataLog_t;
tanasaro10 9:303d3628986a 55
tanasaro10 9:303d3628986a 56 typedef struct {
tanasaro10 12:27e9c3db28b9 57 myData_t startData; // 8 bytes
tanasaro10 12:27e9c3db28b9 58 myDataL_t myData; // 4 bytes
tanasaro10 9:303d3628986a 59 } myDataLogShort_t;
tanasaro10 9:303d3628986a 60
tanasaro10 9:303d3628986a 61 /* Return current page to be written in Flash */
tanasaro10 9:303d3628986a 62 uint8_t flash_currPage();
tanasaro10 9:303d3628986a 63
tanasaro10 9:303d3628986a 64 /* Return next page to be written in Flash */
tanasaro10 9:303d3628986a 65 uint8_t flash_go_nextPage();
tanasaro10 9:303d3628986a 66
tanasaro10 9:303d3628986a 67 /* Return page-N (thas has been written in Flash) */
tanasaro10 9:303d3628986a 68 uint8_t flash_prev_N_Page(uint8_t nr_of_pages);
tanasaro10 8:f28ad4600b0f 69
tanasaro10 9:303d3628986a 70 /*search the latest page written and extract the page_nr, date, and time*/
tanasaro10 11:baafa4f7a15e 71 void search_latest_in_flash(mdate_time_t * outDateTime);
tanasaro10 9:303d3628986a 72
tanasaro10 9:303d3628986a 73 /* Update current date and time with tseconds and also if there is a new date/time given */
tanasaro10 11:baafa4f7a15e 74 void update_time(mdatetime_manager_t* myDateTimeVar, uint16_t tseconds);
tanasaro10 9:303d3628986a 75
tanasaro10 9:303d3628986a 76 /* Update buzzer with period in ms =0..9 and duty cycle = 0..9*/
tanasaro10 9:303d3628986a 77 int buzz_int(PwmOut* buzzer, uint8_t period, uint8_t duty_cycle);
tanasaro10 9:303d3628986a 78
tanasaro10 9:303d3628986a 79 /* Print on serial some error from main app*/
tanasaro10 9:303d3628986a 80 void assert_error_app(bool condition, Serial *pc, uint16_t error, uint16_t line, const char* file);