FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:35:07 2017 +0000
Revision:
0:a2cb7295a1f7
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:a2cb7295a1f7 1 #include "mbed.h"
ram54288 0:a2cb7295a1f7 2 #include "utils.hpp"
ram54288 0:a2cb7295a1f7 3 #include "stdio.h"
ram54288 0:a2cb7295a1f7 4
ram54288 0:a2cb7295a1f7 5 #include "EthernetInterface.h"
ram54288 0:a2cb7295a1f7 6 #include "frdm_client.hpp"
ram54288 0:a2cb7295a1f7 7
ram54288 0:a2cb7295a1f7 8 #include "metronome.hpp"
ram54288 0:a2cb7295a1f7 9
ram54288 0:a2cb7295a1f7 10
ram54288 0:a2cb7295a1f7 11
ram54288 0:a2cb7295a1f7 12 #define IOT_ENABLED
ram54288 0:a2cb7295a1f7 13
ram54288 0:a2cb7295a1f7 14 namespace active_low
ram54288 0:a2cb7295a1f7 15 {
ram54288 0:a2cb7295a1f7 16 const bool on = false;
ram54288 0:a2cb7295a1f7 17 const bool off = true;
ram54288 0:a2cb7295a1f7 18 }
ram54288 0:a2cb7295a1f7 19
ram54288 0:a2cb7295a1f7 20 RawSerial pc(USBTX, USBRX);
ram54288 0:a2cb7295a1f7 21
ram54288 0:a2cb7295a1f7 22 DigitalOut g_led_red(LED1);
ram54288 0:a2cb7295a1f7 23 DigitalOut g_led_green(LED2);
ram54288 0:a2cb7295a1f7 24 DigitalOut g_led_blue(LED3);
ram54288 0:a2cb7295a1f7 25
ram54288 0:a2cb7295a1f7 26 InterruptIn g_button_mode(SW3);
ram54288 0:a2cb7295a1f7 27 InterruptIn g_button_tap(SW2);
ram54288 0:a2cb7295a1f7 28
ram54288 0:a2cb7295a1f7 29 size_t prev_bpm =0,max_bpm=0, min_bpm=INT_MAX;
ram54288 0:a2cb7295a1f7 30 bool min_changed = 0, max_changed =0, bpm_changed =0;
ram54288 0:a2cb7295a1f7 31 uint8_t* buffIn = NULL;
ram54288 0:a2cb7295a1f7 32 uint32_t sizeIn;
ram54288 0:a2cb7295a1f7 33
ram54288 0:a2cb7295a1f7 34 Semaphore updates(0);
ram54288 0:a2cb7295a1f7 35
ram54288 0:a2cb7295a1f7 36 Ticker status_ticker;
ram54288 0:a2cb7295a1f7 37 void blinky(){
ram54288 0:a2cb7295a1f7 38
ram54288 0:a2cb7295a1f7 39 g_led_green = !g_led_green;
ram54288 0:a2cb7295a1f7 40
ram54288 0:a2cb7295a1f7 41 }
ram54288 0:a2cb7295a1f7 42 metronome metronome_object;
ram54288 0:a2cb7295a1f7 43
ram54288 0:a2cb7295a1f7 44
ram54288 0:a2cb7295a1f7 45 void metronome::start_timing(){
ram54288 0:a2cb7295a1f7 46 m_timing = true;
ram54288 0:a2cb7295a1f7 47 m_beat_count = 0;
ram54288 0:a2cb7295a1f7 48 m_timer.start();
ram54288 0:a2cb7295a1f7 49
ram54288 0:a2cb7295a1f7 50 }
ram54288 0:a2cb7295a1f7 51
ram54288 0:a2cb7295a1f7 52 void metronome::stop_timing(){
ram54288 0:a2cb7295a1f7 53
ram54288 0:a2cb7295a1f7 54 m_timing = false;
ram54288 0:a2cb7295a1f7 55 m_timer.stop();
ram54288 0:a2cb7295a1f7 56 size_t curr_bpm=0;
ram54288 0:a2cb7295a1f7 57 curr_bpm = metronome_object.get_bpm();
ram54288 0:a2cb7295a1f7 58 pc.printf("BPM:- %d",curr_bpm);
ram54288 0:a2cb7295a1f7 59 bpm_changed = 1;
ram54288 0:a2cb7295a1f7 60 if(curr_bpm < min_bpm){
ram54288 0:a2cb7295a1f7 61 min_bpm = curr_bpm;
ram54288 0:a2cb7295a1f7 62 min_changed =1;
ram54288 0:a2cb7295a1f7 63 }
ram54288 0:a2cb7295a1f7 64 if(curr_bpm > max_bpm){
ram54288 0:a2cb7295a1f7 65 max_bpm = curr_bpm;
ram54288 0:a2cb7295a1f7 66 max_changed = 1;
ram54288 0:a2cb7295a1f7 67 }
ram54288 0:a2cb7295a1f7 68 if (curr_bpm == 0){
ram54288 0:a2cb7295a1f7 69 g_led_green = active_low::off;
ram54288 0:a2cb7295a1f7 70 }else{
ram54288 0:a2cb7295a1f7 71 //pc.printf("Blinky Call");
ram54288 0:a2cb7295a1f7 72 size_t tempo = 60/curr_bpm;
ram54288 0:a2cb7295a1f7 73 status_ticker.attach(blinky,tempo);
ram54288 0:a2cb7295a1f7 74 }
ram54288 0:a2cb7295a1f7 75 }
ram54288 0:a2cb7295a1f7 76 void metronome::tap(){
ram54288 0:a2cb7295a1f7 77
ram54288 0:a2cb7295a1f7 78 m_beats[m_beat_count++] = m_timer.read_us();
ram54288 0:a2cb7295a1f7 79 pc.printf("%d\n",m_timer.read_us());
ram54288 0:a2cb7295a1f7 80
ram54288 0:a2cb7295a1f7 81
ram54288 0:a2cb7295a1f7 82 }
ram54288 0:a2cb7295a1f7 83 size_t metronome::get_bpm() const {
ram54288 0:a2cb7295a1f7 84 int i=0;
ram54288 0:a2cb7295a1f7 85 size_t bpm=0;
ram54288 0:a2cb7295a1f7 86 if(m_beat_count < 4){
ram54288 0:a2cb7295a1f7 87 return prev_bpm;
ram54288 0:a2cb7295a1f7 88 }else{
ram54288 0:a2cb7295a1f7 89 for(i=0;i<m_beat_count-1;i++){
ram54288 0:a2cb7295a1f7 90 bpm = bpm + m_beats[i+1]-m_beats[i];
ram54288 0:a2cb7295a1f7 91 }
ram54288 0:a2cb7295a1f7 92 bpm = (size_t) bpm/(m_beat_count-1);
ram54288 0:a2cb7295a1f7 93 prev_bpm = (bpm * 0.00006);
ram54288 0:a2cb7295a1f7 94 pc.printf("BPM Calc:- %d",prev_bpm);
ram54288 0:a2cb7295a1f7 95 return prev_bpm;
ram54288 0:a2cb7295a1f7 96 }
ram54288 0:a2cb7295a1f7 97 }
ram54288 0:a2cb7295a1f7 98
ram54288 0:a2cb7295a1f7 99 void on_mode()
ram54288 0:a2cb7295a1f7 100 {
ram54288 0:a2cb7295a1f7 101
ram54288 0:a2cb7295a1f7 102 if(metronome_object.is_timing()){
ram54288 0:a2cb7295a1f7 103 //Go to play mode
ram54288 0:a2cb7295a1f7 104 //printf("playmode");
ram54288 0:a2cb7295a1f7 105 g_led_red = active_low::off;
ram54288 0:a2cb7295a1f7 106 g_led_green = active_low::on;
ram54288 0:a2cb7295a1f7 107 metronome_object.stop_timing();
ram54288 0:a2cb7295a1f7 108
ram54288 0:a2cb7295a1f7 109 }else{
ram54288 0:a2cb7295a1f7 110 //Go to learn mode
ram54288 0:a2cb7295a1f7 111 // printf("learnmode");
ram54288 0:a2cb7295a1f7 112 g_led_green = active_low::off;
ram54288 0:a2cb7295a1f7 113 g_led_red = active_low::on;
ram54288 0:a2cb7295a1f7 114 status_ticker.detach();
ram54288 0:a2cb7295a1f7 115 metronome_object.start_timing();
ram54288 0:a2cb7295a1f7 116
ram54288 0:a2cb7295a1f7 117 }
ram54288 0:a2cb7295a1f7 118 }
ram54288 0:a2cb7295a1f7 119
ram54288 0:a2cb7295a1f7 120 void on_tap()
ram54288 0:a2cb7295a1f7 121 {
ram54288 0:a2cb7295a1f7 122 // Receive a tempo tap
ram54288 0:a2cb7295a1f7 123 if(metronome_object.is_timing()){
ram54288 0:a2cb7295a1f7 124 metronome_object.tap();
ram54288 0:a2cb7295a1f7 125 }
ram54288 0:a2cb7295a1f7 126 }
ram54288 0:a2cb7295a1f7 127
ram54288 0:a2cb7295a1f7 128
ram54288 0:a2cb7295a1f7 129 /*Frequency Class and related resources*/
ram54288 0:a2cb7295a1f7 130 class FreqResource {
ram54288 0:a2cb7295a1f7 131 public:
ram54288 0:a2cb7295a1f7 132 FreqResource() {
ram54288 0:a2cb7295a1f7 133
ram54288 0:a2cb7295a1f7 134 // M2MObject* freq_object;
ram54288 0:a2cb7295a1f7 135 freq_object = M2MInterfaceFactory::create_object("3318");
ram54288 0:a2cb7295a1f7 136 M2MObjectInstance* freq_inst = freq_object->create_object_instance();
ram54288 0:a2cb7295a1f7 137
ram54288 0:a2cb7295a1f7 138
ram54288 0:a2cb7295a1f7 139 // Why is it blinking only 4 time? - Ram
ram54288 0:a2cb7295a1f7 140 // there's not really an execute LWM2M ID that matches... hmm...
ram54288 0:a2cb7295a1f7 141 M2MResource* setValue_res = freq_inst->create_dynamic_resource("5900", "Set Value",
ram54288 0:a2cb7295a1f7 142 M2MResourceInstance::FLOAT, true);
ram54288 0:a2cb7295a1f7 143 // we allow executing a function here...
ram54288 0:a2cb7295a1f7 144 setValue_res->set_operation(M2MBase::GET_PUT_ALLOWED);
ram54288 0:a2cb7295a1f7 145 //setValue_res->set_value_updated_function(value_updated_callback2(this, &FreqResource::handle_put_bpm));
ram54288 0:a2cb7295a1f7 146 setValue_res->set_execute_function(execute_callback(this, &FreqResource::handle_put_bpm));
ram54288 0:a2cb7295a1f7 147 // Completion of execute function can take a time, that's why delayed response is used
ram54288 0:a2cb7295a1f7 148 setValue_res->set_delayed_response(true);
ram54288 0:a2cb7295a1f7 149
ram54288 0:a2cb7295a1f7 150 //Max BPM
ram54288 0:a2cb7295a1f7 151 M2MResource* maxBPM_res = freq_inst->create_dynamic_resource("5602", "Max BPM",
ram54288 0:a2cb7295a1f7 152 M2MResourceInstance::FLOAT, true);
ram54288 0:a2cb7295a1f7 153
ram54288 0:a2cb7295a1f7 154 // we allow executing a function here...
ram54288 0:a2cb7295a1f7 155 maxBPM_res->set_operation(M2MBase::GET_ALLOWED);
ram54288 0:a2cb7295a1f7 156
ram54288 0:a2cb7295a1f7 157 // Completion of execute function can take a time, that's why delayed response is used
ram54288 0:a2cb7295a1f7 158 // maxBPM_res->set_delayed_response(true);
ram54288 0:a2cb7295a1f7 159
ram54288 0:a2cb7295a1f7 160 //Min BPM
ram54288 0:a2cb7295a1f7 161 M2MResource* minBPM_res = freq_inst->create_dynamic_resource("5601", "Min BPM",
ram54288 0:a2cb7295a1f7 162 M2MResourceInstance::FLOAT, true);
ram54288 0:a2cb7295a1f7 163 // we allow executing a function here...
ram54288 0:a2cb7295a1f7 164 minBPM_res->set_operation(M2MBase::GET_ALLOWED);
ram54288 0:a2cb7295a1f7 165
ram54288 0:a2cb7295a1f7 166 // Completion of execute function can take a time, that's why delayed response is used
ram54288 0:a2cb7295a1f7 167 //minBPM_res->set_delayed_response(true);
ram54288 0:a2cb7295a1f7 168
ram54288 0:a2cb7295a1f7 169 //Reset Min/Max
ram54288 0:a2cb7295a1f7 170 M2MResource* resetBPM_res = freq_inst->create_dynamic_resource("5605", "Reset Min/Max BPM",
ram54288 0:a2cb7295a1f7 171 M2MResourceInstance::STRING, true);
ram54288 0:a2cb7295a1f7 172 // we allow executing a function here...
ram54288 0:a2cb7295a1f7 173 resetBPM_res->set_operation(M2MBase::POST_ALLOWED);
ram54288 0:a2cb7295a1f7 174 resetBPM_res->set_execute_function(execute_callback(this, &FreqResource::handle_reset_minMax_bpm));
ram54288 0:a2cb7295a1f7 175 // Completion of execute function can take a time, that's why delayed response is used
ram54288 0:a2cb7295a1f7 176 resetBPM_res->set_delayed_response(true);
ram54288 0:a2cb7295a1f7 177
ram54288 0:a2cb7295a1f7 178 //Units
ram54288 0:a2cb7295a1f7 179 M2MResource* unitsBPM_res = freq_inst->create_dynamic_resource("5701", "Units",
ram54288 0:a2cb7295a1f7 180 M2MResourceInstance::STRING, true);
ram54288 0:a2cb7295a1f7 181 // we allow executing a function here...
ram54288 0:a2cb7295a1f7 182 unitsBPM_res->set_operation(M2MBase::GET_ALLOWED);
ram54288 0:a2cb7295a1f7 183 // Completion of execute function can take a time, that's why delayed response is used
ram54288 0:a2cb7295a1f7 184 //unitsBPM_res->set_delayed_response(true);
ram54288 0:a2cb7295a1f7 185 unitsBPM_res->set_value((uint8_t*)"BPM",3);
ram54288 0:a2cb7295a1f7 186 }
ram54288 0:a2cb7295a1f7 187
ram54288 0:a2cb7295a1f7 188
ram54288 0:a2cb7295a1f7 189 ~FreqResource() {
ram54288 0:a2cb7295a1f7 190
ram54288 0:a2cb7295a1f7 191 }
ram54288 0:a2cb7295a1f7 192
ram54288 0:a2cb7295a1f7 193 void handle_put_bpm(void *argument){
ram54288 0:a2cb7295a1f7 194
ram54288 0:a2cb7295a1f7 195 status_ticker.detach();
ram54288 0:a2cb7295a1f7 196 M2MObjectInstance* inst = freq_object->object_instance();
ram54288 0:a2cb7295a1f7 197 M2MResource* setValue_res = inst->resource("5900");
ram54288 0:a2cb7295a1f7 198
ram54288 0:a2cb7295a1f7 199 // values in mbed Client are all buffers, and we need a vector of int's
ram54288 0:a2cb7295a1f7 200 setValue_res->get_value(buffIn, sizeIn);
ram54288 0:a2cb7295a1f7 201
ram54288 0:a2cb7295a1f7 202 int temp=0;
ram54288 0:a2cb7295a1f7 203 for(int i=0;i<sizeIn;i++){
ram54288 0:a2cb7295a1f7 204 temp=temp*10+(int)buffIn[i]-48;
ram54288 0:a2cb7295a1f7 205 }
ram54288 0:a2cb7295a1f7 206 prev_bpm=temp;
ram54288 0:a2cb7295a1f7 207
ram54288 0:a2cb7295a1f7 208 if(prev_bpm < min_bpm)
ram54288 0:a2cb7295a1f7 209 {
ram54288 0:a2cb7295a1f7 210 min_bpm = prev_bpm;
ram54288 0:a2cb7295a1f7 211 min_changed =1;
ram54288 0:a2cb7295a1f7 212 }
ram54288 0:a2cb7295a1f7 213 if(prev_bpm > max_bpm)
ram54288 0:a2cb7295a1f7 214 {
ram54288 0:a2cb7295a1f7 215 max_bpm = prev_bpm;
ram54288 0:a2cb7295a1f7 216 max_changed = 1;
ram54288 0:a2cb7295a1f7 217 }
ram54288 0:a2cb7295a1f7 218 size_t tempo = 60/prev_bpm;
ram54288 0:a2cb7295a1f7 219 status_ticker.attach(blinky,tempo);
ram54288 0:a2cb7295a1f7 220
ram54288 0:a2cb7295a1f7 221 bpm_changed = 1;
ram54288 0:a2cb7295a1f7 222 }
ram54288 0:a2cb7295a1f7 223
ram54288 0:a2cb7295a1f7 224 void handle_set_bpm(){
ram54288 0:a2cb7295a1f7 225
ram54288 0:a2cb7295a1f7 226 M2MObjectInstance* inst = freq_object->object_instance();
ram54288 0:a2cb7295a1f7 227 M2MResource* setValue_res = inst->resource("5900");
ram54288 0:a2cb7295a1f7 228
ram54288 0:a2cb7295a1f7 229 char buffer[20];
ram54288 0:a2cb7295a1f7 230 int size = sprintf(buffer,"%d",prev_bpm);
ram54288 0:a2cb7295a1f7 231 setValue_res->set_value((uint8_t*)buffer, size);
ram54288 0:a2cb7295a1f7 232
ram54288 0:a2cb7295a1f7 233 }
ram54288 0:a2cb7295a1f7 234
ram54288 0:a2cb7295a1f7 235 void handle_set_min_bpm(){
ram54288 0:a2cb7295a1f7 236 //Send a notification
ram54288 0:a2cb7295a1f7 237 M2MObjectInstance* inst = freq_object->object_instance();
ram54288 0:a2cb7295a1f7 238 M2MResource* minBPM_res = inst->resource("5601");
ram54288 0:a2cb7295a1f7 239 pc.printf("%d",min_bpm);
ram54288 0:a2cb7295a1f7 240 char buffer[20];
ram54288 0:a2cb7295a1f7 241 int size = sprintf(buffer,"%d",min_bpm);
ram54288 0:a2cb7295a1f7 242 minBPM_res->set_value((uint8_t*)buffer, size);
ram54288 0:a2cb7295a1f7 243
ram54288 0:a2cb7295a1f7 244
ram54288 0:a2cb7295a1f7 245 }
ram54288 0:a2cb7295a1f7 246 void handle_set_max_bpm(){
ram54288 0:a2cb7295a1f7 247 //Send a notification
ram54288 0:a2cb7295a1f7 248 M2MObjectInstance* inst = freq_object->object_instance();
ram54288 0:a2cb7295a1f7 249 M2MResource* maxBPM_res = inst->resource("5602");
ram54288 0:a2cb7295a1f7 250
ram54288 0:a2cb7295a1f7 251 char buffer[20];
ram54288 0:a2cb7295a1f7 252 int size = sprintf(buffer,"%d",max_bpm);
ram54288 0:a2cb7295a1f7 253 maxBPM_res->set_value((uint8_t*)buffer, size);
ram54288 0:a2cb7295a1f7 254
ram54288 0:a2cb7295a1f7 255
ram54288 0:a2cb7295a1f7 256 }
ram54288 0:a2cb7295a1f7 257
ram54288 0:a2cb7295a1f7 258 void handle_reset_minMax_bpm(void *argument){
ram54288 0:a2cb7295a1f7 259 //Handle request to reset the min_max values to zero and 1000000 each
ram54288 0:a2cb7295a1f7 260
ram54288 0:a2cb7295a1f7 261 M2MObjectInstance* inst = freq_object->object_instance();
ram54288 0:a2cb7295a1f7 262 M2MResource* minBPM_res = inst->resource("5601");
ram54288 0:a2cb7295a1f7 263 M2MResource* maxBPM_res = inst->resource("5602");
ram54288 0:a2cb7295a1f7 264
ram54288 0:a2cb7295a1f7 265 minBPM_res->set_value(0);
ram54288 0:a2cb7295a1f7 266 maxBPM_res->set_value(0);
ram54288 0:a2cb7295a1f7 267 }
ram54288 0:a2cb7295a1f7 268
ram54288 0:a2cb7295a1f7 269 M2MObject* get_object() {
ram54288 0:a2cb7295a1f7 270 return freq_object;
ram54288 0:a2cb7295a1f7 271 }
ram54288 0:a2cb7295a1f7 272
ram54288 0:a2cb7295a1f7 273 private:
ram54288 0:a2cb7295a1f7 274 M2MObject* freq_object;
ram54288 0:a2cb7295a1f7 275 };
ram54288 0:a2cb7295a1f7 276
ram54288 0:a2cb7295a1f7 277 int main()
ram54288 0:a2cb7295a1f7 278 {
ram54288 0:a2cb7295a1f7 279 // Seed the RNG for networking purposes
ram54288 0:a2cb7295a1f7 280 unsigned seed = utils::entropy_seed();
ram54288 0:a2cb7295a1f7 281 srand(seed);
ram54288 0:a2cb7295a1f7 282
ram54288 0:a2cb7295a1f7 283 // LEDs are active LOW - true/1 means off, false/0 means on
ram54288 0:a2cb7295a1f7 284 // Use the constants for easier reading
ram54288 0:a2cb7295a1f7 285 g_led_red = active_low::off;
ram54288 0:a2cb7295a1f7 286 g_led_green = active_low::off;
ram54288 0:a2cb7295a1f7 287 g_led_blue = active_low::off;
ram54288 0:a2cb7295a1f7 288
ram54288 0:a2cb7295a1f7 289
ram54288 0:a2cb7295a1f7 290 // Button falling edge is on push (rising is on release)
ram54288 0:a2cb7295a1f7 291 g_button_mode.fall(&on_mode);
ram54288 0:a2cb7295a1f7 292 g_button_tap.fall(&on_tap);
ram54288 0:a2cb7295a1f7 293
ram54288 0:a2cb7295a1f7 294 #ifdef IOT_ENABLED
ram54288 0:a2cb7295a1f7 295 // Turn on the blue LED until connected to the network
ram54288 0:a2cb7295a1f7 296 // g_led_blue = active_low::off;
ram54288 0:a2cb7295a1f7 297
ram54288 0:a2cb7295a1f7 298
ram54288 0:a2cb7295a1f7 299 // Need to be connected with Ethernet cable for success
ram54288 0:a2cb7295a1f7 300 EthernetInterface ethernet;
ram54288 0:a2cb7295a1f7 301 if (ethernet.connect() != 0)
ram54288 0:a2cb7295a1f7 302 return 1;
ram54288 0:a2cb7295a1f7 303
ram54288 0:a2cb7295a1f7 304 // Pair with the device connector
ram54288 0:a2cb7295a1f7 305 frdm_client client("coap://api.connector.mbed.com:5684", &ethernet);
ram54288 0:a2cb7295a1f7 306 if (client.get_state() == frdm_client::state::error)
ram54288 0:a2cb7295a1f7 307 return 1;
ram54288 0:a2cb7295a1f7 308
ram54288 0:a2cb7295a1f7 309 // The REST endpoints for this device
ram54288 0:a2cb7295a1f7 310 // Add your own M2MObjects to this list with push_back before client.connect()
ram54288 0:a2cb7295a1f7 311 M2MObjectList objects;
ram54288 0:a2cb7295a1f7 312
ram54288 0:a2cb7295a1f7 313 //Frequency device definition and instance definition
ram54288 0:a2cb7295a1f7 314 FreqResource freq_resource;
ram54288 0:a2cb7295a1f7 315
ram54288 0:a2cb7295a1f7 316 M2MDevice* device = frdm_client::make_device();
ram54288 0:a2cb7295a1f7 317 objects.push_back(device);
ram54288 0:a2cb7295a1f7 318 objects.push_back(freq_resource.get_object());
ram54288 0:a2cb7295a1f7 319
ram54288 0:a2cb7295a1f7 320 // Publish the RESTful endpoints
ram54288 0:a2cb7295a1f7 321 client.connect(objects);
ram54288 0:a2cb7295a1f7 322
ram54288 0:a2cb7295a1f7 323 // Connect complete; turn off blue LED forever
ram54288 0:a2cb7295a1f7 324 //g_led_blue = active_low::on;
ram54288 0:a2cb7295a1f7 325
ram54288 0:a2cb7295a1f7 326 #endif
ram54288 0:a2cb7295a1f7 327
ram54288 0:a2cb7295a1f7 328 while (true)
ram54288 0:a2cb7295a1f7 329 {
ram54288 0:a2cb7295a1f7 330 //updates.wait(25000);
ram54288 0:a2cb7295a1f7 331 #ifdef IOT_ENABLED
ram54288 0:a2cb7295a1f7 332 if (client.get_state() == frdm_client::state::error)
ram54288 0:a2cb7295a1f7 333 break;
ram54288 0:a2cb7295a1f7 334 #endif
ram54288 0:a2cb7295a1f7 335
ram54288 0:a2cb7295a1f7 336 // Insert any code that must be run continuously here
ram54288 0:a2cb7295a1f7 337 if(bpm_changed){
ram54288 0:a2cb7295a1f7 338 bpm_changed = 0;
ram54288 0:a2cb7295a1f7 339 freq_resource.handle_set_bpm();
ram54288 0:a2cb7295a1f7 340 }
ram54288 0:a2cb7295a1f7 341
ram54288 0:a2cb7295a1f7 342 if(min_changed) {
ram54288 0:a2cb7295a1f7 343 min_changed = 0;
ram54288 0:a2cb7295a1f7 344 freq_resource.handle_set_min_bpm();
ram54288 0:a2cb7295a1f7 345 }
ram54288 0:a2cb7295a1f7 346 if(max_changed) {
ram54288 0:a2cb7295a1f7 347 max_changed = 0;
ram54288 0:a2cb7295a1f7 348 freq_resource.handle_set_max_bpm();
ram54288 0:a2cb7295a1f7 349 }
ram54288 0:a2cb7295a1f7 350
ram54288 0:a2cb7295a1f7 351 }
ram54288 0:a2cb7295a1f7 352
ram54288 0:a2cb7295a1f7 353 #ifdef IOT_ENABLED
ram54288 0:a2cb7295a1f7 354 client.disconnect();
ram54288 0:a2cb7295a1f7 355 #endif
ram54288 0:a2cb7295a1f7 356 return 1;
ram54288 0:a2cb7295a1f7 357 }