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
myData.h@12:27e9c3db28b9, 2016-08-14 (annotated)
- 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?
User | Revision | Line number | New 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); |