This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Can not change a custom variable in ble_our_service_on_ble_evt()

Hi everyone, 

I completed tutorials and i tried to get a value from characteristic and i tried to do something extra. But i am encountering a problem which i could't understand. I will share my code with a screenshot.

1) I wrote "0x12" to characteristic on nRF Connect. LED 2 turned on and LED 3 turned off. 

2) I wrote "0x13" to characteristic on nRF Connect. LED 3 turned on and LED 2 turned off.

3) I tried to see "button_value" 's value while i was debugging but it shows nothing. If i add "button_value = 0;" in main function, "button_value" seems in Watch 1 as "0x00". I changed button_value manually "0x01" while i was debugging and LED 4  start to toggle.

So, the program entering if condition but it is not changing "button_value" by doing nRF Connect.

P.S : timer_timeout_handler function is in main.c file.(i forgot to point out in screenshot)

i declared the variable "static int button_value;" in our_service.h

Event Funciton (in our_service.c):

void ble_our_service_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context)
{       
        ble_gatts_evt_write_t * p_evt_write;
  	ble_os_t * p_our_service =(ble_os_t *) p_context;  
		// OUR_JOB: Step 3.D Implement switch case handling BLE events related to our service. 
                switch (p_ble_evt->header.evt_id)
                {
                    case BLE_GAP_EVT_CONNECTED:
                        p_our_service->conn_handle = p_ble_evt->evt.gap_evt.conn_handle;
                        break;
                    case BLE_GAP_EVT_DISCONNECTED:
                        p_our_service->conn_handle = BLE_CONN_HANDLE_INVALID;
                        break;
                    case  BLE_GATTS_EVT_WRITE:
                        p_evt_write = &p_ble_evt->evt.gatts_evt.params.write;
                        
                        if(p_evt_write->handle == p_our_service->char_handles_3.value_handle)
                        { 
                          if(*p_evt_write->data == 0x12)
                            {                             
                              button_value = 1;
                              nrf_gpio_pin_clear(14);
                              nrf_gpio_pin_set(15);
                              
                            }
                          else if(*p_evt_write->data == 0x13)
                            { 
                              button_value = 0;
                              nrf_gpio_pin_clear(15);
                              nrf_gpio_pin_set(14);
                            }

                        }
                        
                        break;
                    default:
                        // No implementation needed.
                        break;
                }
}


Time out handler function(in main.c):

static void timer_timeout_handler(void * p_context)
{
    // OUR_JOB: Step 3.F, Update temperature and characteristic value.
    int32_t temperature = 0;   
    sd_temp_get(&temperature);
    voltage = 0;
    voltage = saadc_measure();
      if(voltage < 0)
      voltage = 0;
    our_temperature_characteristic_update(&m_our_service, &voltage);
    our_temperature_characteristic_update_2(&m_our_service, &temperature);
//    our_temperature_characteristic_update_3(&m_our_service, &button_value);
//    nrf_gpio_pin_toggle(LED_4);
    if(button_value == 1)
    {
      nrf_gpio_pin_clear(LED_4);
    }

}

Parents Reply
  • Hi,

    Like  said, you cannot have the button_value as static. That will clearly not work since it will be two completely independent variables in both files, which just happens to have the same name. If you want the same variable in both files, then you need to declare it normally (without static!) in one .c file, and as extern in the other c file or header file.

    If you get a build error when you fix this, then you need to resolve it. We cannot help without knowing more about the error, though. What is the full error message?

Children
Related