hx711 adc、nRF52832 DK、および Segger 組み込みスタジオを使用しています。問題は、最新の adc 値を格納するローカル変数を hx711 コールバック関数のグローバル変数にコピーしてから、このグローバル変数を読み取りたいということです。コールバック関数内でこの値を読み取ると、すべて問題ありません。グローバル変数とローカルは同じです。しかし、main() の先頭でこのグローバル変数を読み取ると、グローバル変数は常に 0 になります。添付のコードを参照してください。ありがとう
#include "hx711.h"
#include "nrf_delay.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
int hx_test_val;
void hx711_callback(hx711_evt_t evt, int value) // hx711 runs on continous sampling mode, so this function is called on rate 10 or 80Hz, depending on hardware design
{
hx_test_val = value; // local value is copied to global variable hx_test_val
if(evt == DATA_READY)
{
NRF_LOG_INFO("ADC measuremement %d", hx_test_val); // here, the global variable is equal to local variable "value" (input of hx711_callback())
}
else
{
NRF_LOG_INFO("ADC readout error. %d 0x%x", value, hx_test_val);
}
}
/**@brief Function for initializing the nrf log module.
*/
static void log_init(void)
{
ret_code_t err_code = NRF_LOG_INIT(NULL);
APP_ERROR_CHECK(err_code);
NRF_LOG_DEFAULT_BACKENDS_INIT();
}
/**@brief Application main function.
*/
int main(void)
{
hx711_init(INPUT_CH_A_128, hx711_callback);
log_init();
/* Start continous sampling. Sampling rate is either
10Hz or 80 Hz, depending on hx711 HW configuration*/
hx711_start(false);
nrf_delay_ms(50);
NRF_LOG_INFO("hx_copy: %d",hx_test_val); // here, the global variable is equal to 0
}
/**
* @}
*/