Sandwich IoT
Published © GPL3+

Empower Desk Lamp with Smart

The traditional desk lamp can illuminate your work area, but retrofitted with some sensors and circuits, it will help to boost your personal

BeginnerFull instructions provided23 hours323
Empower Desk Lamp with Smart

Things used in this project

Hardware components

CBU network module
A low-power Wi-Fi and Bluetooth Low Energy combo module developed by Tuya Smart. It can work with functional boards to implement your required device features.
×1
ISK1101 microwave radar sensor
It can detect the difference between the transmitted wave and reflection wave to judge whether there is an object moving over the microwave radar sensor. This radar sensor has a single-input and single-output (SISO) mmWave antenna, mmWave sensor chip from ICLEGEND MICRO, and MCU inside. It is also easy to be developed because of its debugging interface.
×1
BH1750 light sensor
It is used to detect light intensity and has a BH1750FVI, a digital ambient light sensor IC for the I2C bus interface. This sensor can accurately measure the LUX value of light up to 65535 lx.
×1
Capacitive touch switch module
The module is based on a touch-sensing IC (TTP223B) and outputs low in the normal state.
×1
Lithium battery
3.7V to 4.25V
×1
Lithium battery charger and protection module
This module can safely charge a lithium battery and provides necessary protection such as overcurrent protection.
×1
Voltage regulator module
It is used to provide a microprocessor with the appropriate supply voltage.
×1
0.91 inch OLED display
Display time and battery level
×1
Buzzer
Deliver timer prompts and low battery alerts.
×1

Software apps and online services

Sample code in GitHub
https://github.com/Tuya-Community/tuya-iotos-embeded-demo-wifi-ble-smart-lamp-with-motion-sensor
Tuya Smart app or Smart Life app
https://developer.tuya.com/en/docs/iot/tuya-smart-app-smart-life-app-advantages?id=K989rqa49rluq

Story

Read more

Code

Code snippet #1

Plain text
├── src
| ├── app_driver
| | ├── lamp_pwm.c           // Lamp PWM driver.
| | ├── sh1106.c             // OLED driver.
| | ├── bh1750.c             // Light sensor driver.
| | └── app_key.c            // Code of touch keys.
| ├── app_soc                // Interfaces of SoC layer.
| ├── tuya_device.c          // Entry file of the application layer.
| ├── app_lamp.c             // Main application layer.
| └── lamp_control.c         // Logic of key control.
|
├── include                  // Header files.
| ├── app_driver
| | ├── lamp_pwm.h
| | ├── sh1106.h
| | ├── bh1750.h
| | └── app_key.h
| ├── app_soc
| ├── tuya_device.h
| ├── app_lamp.h
| └── lamp_control.h
|
└── output                  // Production

Code snippet #10

Plain text
	op_ret = app_lamp_init(APP_LAMP_NORMAL);
	if(OPRT_OK != op_ret) {
		PR_ERR("app init err!");
		return op_ret;
	}

Code snippet #11

Plain text
OPERATE_RET app_lamp_init(IN APP_LAMP_MODE mode)
{
	OPERATE_RET op_ret = OPRT_OK;

	if(APP_LAMP_NORMAL == mode) {

		lamp_device_init();

		// Create ADC sensor data collection thread
		tuya_hal_thread_create(NULL, "thread_data_get", 512*4, TRD_PRIO_4, sensor_data_get_thread, NULL);

		tuya_hal_thread_create(NULL, "thread_data_deal", 512*4, TRD_PRIO_4, sensor_data_deal_thread, NULL);

		tuya_hal_thread_create(NULL, "key_scan_thread", 512*4, TRD_PRIO_4, key_scan_thread, NULL);

		tuya_hal_thread_create(NULL, "thread_data_report", 512*4, TRD_PRIO_4, sensor_data_report_thread, NULL);
	}else {
		  // Not in the factory test mode
	}

	return op_ret;
}

Code snippet #12

Plain text
OPERATE_RET app_lamp_init(IN APP_LAMP_MODE mode)
{
	OPERATE_RET op_ret = OPRT_OK;

	if(APP_LAMP_NORMAL == mode) {

		lamp_device_init();

		// Create ADC sensor data collection thread
		tuya_hal_thread_create(NULL, "thread_data_get", 512*4, TRD_PRIO_4, sensor_data_get_thread, NULL);

		tuya_hal_thread_create(NULL, "thread_data_deal", 512*4, TRD_PRIO_4, sensor_data_deal_thread, NULL);

		tuya_hal_thread_create(NULL, "key_scan_thread", 512*4, TRD_PRIO_4, key_scan_thread, NULL);

		tuya_hal_thread_create(NULL, "thread_data_report", 512*4, TRD_PRIO_4, sensor_data_report_thread, NULL);
	}else {
		  // Not in the factory test mode
	}

	return op_ret;
}

Code snippet #13

Plain text
VOID app_report_all_dp_status(VOID)
{
	OPERATE_RET op_ret = OPRT_OK;

	INT_T dp_cnt = 0;
	dp_cnt = 5;

	TY_OBJ_DP_S *dp_arr = (TY_OBJ_DP_S *)Malloc(dp_cnt*SIZEOF(TY_OBJ_DP_S));
	if(NULL == dp_arr) {
		PR_ERR("malloc failed");
		return;
	}

	memset(dp_arr, 0, dp_cnt*SIZEOF(TY_OBJ_DP_S));

	dp_arr[0].dpid = DPID_DELAY_OFF;
	dp_arr[0].type = PROP_BOOL;
	dp_arr[0].time_stamp = 0;
	dp_arr[0].value.dp_value = lamp_ctrl_data.Lamp_delay_off;

	dp_arr[1].dpid = DPID_LIGHT_MODE;
	dp_arr[1].type = PROP_ENUM;
	dp_arr[1].time_stamp = 0;
	dp_arr[1].value.dp_value = lamp_ctrl_data.Light_mode;

	dp_arr[2].dpid = DPID_SIT_REMIND;
	dp_arr[2].type = PROP_BOOL;
	dp_arr[2].time_stamp = 0;
	dp_arr[2].value.dp_value = lamp_ctrl_data.Sit_remind;

	dp_arr[3].dpid = DPID_AUTO_LIGHT;
	dp_arr[3].type = PROP_BOOL;
	dp_arr[3].time_stamp = 0;
	dp_arr[3].value.dp_value = lamp_ctrl_data.Auto_light;

	dp_arr[4].dpid = DPID_LOW_POW_ALARM;
	dp_arr[4].type = PROP_BOOL;
	dp_arr[4].time_stamp = 0;
	dp_arr[4].value.dp_value = lamp_ctrl_data.Low_pow_alarm;

	op_ret = dev_report_dp_json_async(NULL,dp_arr,dp_cnt);
	Free(dp_arr);
	if(OPRT_OK != op_ret) {
		PR_ERR("dev_report_dp_json_async relay_config data error,err_num",op_ret);
	}

	PR_DEBUG("dp_query report_all_dp_data");
	return;
}

Code snippet #14

Plain text
VOID app_report_all_dp_status(VOID)
{
	OPERATE_RET op_ret = OPRT_OK;

	INT_T dp_cnt = 0;
	dp_cnt = 5;

	TY_OBJ_DP_S *dp_arr = (TY_OBJ_DP_S *)Malloc(dp_cnt*SIZEOF(TY_OBJ_DP_S));
	if(NULL == dp_arr) {
		PR_ERR("malloc failed");
		return;
	}

	memset(dp_arr, 0, dp_cnt*SIZEOF(TY_OBJ_DP_S));

	dp_arr[0].dpid = DPID_DELAY_OFF;
	dp_arr[0].type = PROP_BOOL;
	dp_arr[0].time_stamp = 0;
	dp_arr[0].value.dp_value = lamp_ctrl_data.Lamp_delay_off;

	dp_arr[1].dpid = DPID_LIGHT_MODE;
	dp_arr[1].type = PROP_ENUM;
	dp_arr[1].time_stamp = 0;
	dp_arr[1].value.dp_value = lamp_ctrl_data.Light_mode;

	dp_arr[2].dpid = DPID_SIT_REMIND;
	dp_arr[2].type = PROP_BOOL;
	dp_arr[2].time_stamp = 0;
	dp_arr[2].value.dp_value = lamp_ctrl_data.Sit_remind;

	dp_arr[3].dpid = DPID_AUTO_LIGHT;
	dp_arr[3].type = PROP_BOOL;
	dp_arr[3].time_stamp = 0;
	dp_arr[3].value.dp_value = lamp_ctrl_data.Auto_light;

	dp_arr[4].dpid = DPID_LOW_POW_ALARM;
	dp_arr[4].type = PROP_BOOL;
	dp_arr[4].time_stamp = 0;
	dp_arr[4].value.dp_value = lamp_ctrl_data.Low_pow_alarm;

	op_ret = dev_report_dp_json_async(NULL,dp_arr,dp_cnt);
	Free(dp_arr);
	if(OPRT_OK != op_ret) {
		PR_ERR("dev_report_dp_json_async relay_config data error,err_num",op_ret);
	}

	PR_DEBUG("dp_query report_all_dp_data");
	return;
}

Code snippet #15

Plain text
STATIC VOID sensor_data_get_thread(PVOID_T pArg)
{
	while(1) {
		PR_DEBUG("sensor_data_get_thread");
		lamp_get_sensor_data();
		tuya_hal_system_sleep(TASKDELAY_SEC/2);

	}
}

STATIC VOID key_scan_thread(PVOID_T pArg)
{

	while(1) {
		lamp_key_poll();

		tuya_hal_system_sleep(25);
	}

}

STATIC VOID sensor_data_deal_thread(PVOID_T pArg)
{
	while(1) {
		lamp_ctrl_handle();
		tuya_hal_system_sleep(TASKDELAY_SEC);

	}
}

STATIC VOID sensor_data_report_thread(PVOID_T pArg)
{
	while(1) {

		tuya_hal_system_sleep(TASKDELAY_SEC*10);

		app_report_all_dp_status();
	}

}

Code snippet #16

Plain text
STATIC VOID sensor_data_get_thread(PVOID_T pArg)
{
	while(1) {
		PR_DEBUG("sensor_data_get_thread");
		lamp_get_sensor_data();
		tuya_hal_system_sleep(TASKDELAY_SEC/2);

	}
}

STATIC VOID key_scan_thread(PVOID_T pArg)
{

	while(1) {
		lamp_key_poll();

		tuya_hal_system_sleep(25);
	}

}

STATIC VOID sensor_data_deal_thread(PVOID_T pArg)
{
	while(1) {
		lamp_ctrl_handle();
		tuya_hal_system_sleep(TASKDELAY_SEC);

	}
}

STATIC VOID sensor_data_report_thread(PVOID_T pArg)
{
	while(1) {

		tuya_hal_system_sleep(TASKDELAY_SEC*10);

		app_report_all_dp_status();
	}

}

Code snippet #17

Plain text
VOID deal_dp_proc(IN CONST TY_OBJ_DP_S *root)
{
	UCHAR_T dpid;

	dpid = root->dpid;
	PR_DEBUG("dpid:%d",dpid);

	switch (dpid) {

	case DPID_DELAY_OFF:
		PR_DEBUG("set led switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Lamp_delay_off = root->value.dp_bool;
		break;

	case DPID_LIGHT_MODE:
		PR_DEBUG("set light mode:%d",root->value.dp_enum);
		lamp_ctrl_data.Light_mode = root->value.dp_enum;
		break;

	case DPID_SIT_REMIND:
		PR_DEBUG("set sit remind switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Sit_remind = root->value.dp_bool;
		break;

	case DPID_AUTO_LIGHT:
		PR_DEBUG("set auto switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Auto_light = root->value.dp_bool;
		break;

	case DPID_LOW_POW_ALARM:
		PR_DEBUG("set low power alarm switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Low_pow_alarm = root->value.dp_bool;
		break;

	default:
		break;
	}

	app_report_all_dp_status();

	return;

}

Code snippet #18

Plain text
VOID deal_dp_proc(IN CONST TY_OBJ_DP_S *root)
{
	UCHAR_T dpid;

	dpid = root->dpid;
	PR_DEBUG("dpid:%d",dpid);

	switch (dpid) {

	case DPID_DELAY_OFF:
		PR_DEBUG("set led switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Lamp_delay_off = root->value.dp_bool;
		break;

	case DPID_LIGHT_MODE:
		PR_DEBUG("set light mode:%d",root->value.dp_enum);
		lamp_ctrl_data.Light_mode = root->value.dp_enum;
		break;

	case DPID_SIT_REMIND:
		PR_DEBUG("set sit remind switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Sit_remind = root->value.dp_bool;
		break;

	case DPID_AUTO_LIGHT:
		PR_DEBUG("set auto switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Auto_light = root->value.dp_bool;
		break;

	case DPID_LOW_POW_ALARM:
		PR_DEBUG("set low power alarm switch:%d",root->value.dp_bool);
		lamp_ctrl_data.Low_pow_alarm = root->value.dp_bool;
		break;

	default:
		break;
	}

	app_report_all_dp_status();

	return;

}

Code snippet #19

Plain text
void app_key_scan(unsigned char *trg,unsigned char *cont)
{
	unsigned char read_data = 0x00;
	read_data = (tuya_gpio_read(KEY_SWITCH_PIN)<<3)|(tuya_gpio_read(KEY_SET_PIN)<<2)|(tuya_gpio_read(KEY_UP_PIN)<<1)|(tuya_gpio_read(KEY_DOWN_PIN));
	*trg = (read_data & (read_data ^ (*cont)));
	*cont = read_data;
}

Code snippet #2

Plain text
├── src
| ├── app_driver
| | ├── lamp_pwm.c           // Lamp PWM driver.
| | ├── sh1106.c             // OLED driver.
| | ├── bh1750.c             // Light sensor driver.
| | └── app_key.c            // Code of touch keys.
| ├── app_soc                // Interfaces of SoC layer.
| ├── tuya_device.c          // Entry file of the application layer.
| ├── app_lamp.c             // Main application layer.
| └── lamp_control.c         // Logic of key control.
|
├── include                  // Header files.
| ├── app_driver
| | ├── lamp_pwm.h
| | ├── sh1106.h
| | ├── bh1750.h
| | └── app_key.h
| ├── app_soc
| ├── tuya_device.h
| ├── app_lamp.h
| └── lamp_control.h
|
└── output                  // Production

Code snippet #20

Plain text
void app_key_scan(unsigned char *trg,unsigned char *cont)
{
	unsigned char read_data = 0x00;
	read_data = (tuya_gpio_read(KEY_SWITCH_PIN)<<3)|(tuya_gpio_read(KEY_SET_PIN)<<2)|(tuya_gpio_read(KEY_UP_PIN)<<1)|(tuya_gpio_read(KEY_DOWN_PIN));
	*trg = (read_data & (read_data ^ (*cont)));
	*cont = read_data;
}

Code snippet #21

Plain text
STATIC VOID lamp_key_event(UINT8_T key_event)
{
	if(key_event == KEY_CODE_SWITCH) {
		PR_NOTICE("----POWER ON!!!!!!!----");
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			lamp_ctrl_data.Lamp_switch = TRUE;
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
		}else{
			lamp_ctrl_data.Lamp_switch = FALSE;
			lamp_pwm_off();
		}
	}else if(key_event == KEY_CODE_SET_LIGHT_COLOR) {
		lamp_ctrl_data.Light_mode++;
		if(lamp_ctrl_data.Light_mode > 2){
			lamp_ctrl_data.Light_mode = 0;
		}
		lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
		PR_NOTICE("----change light mode to %d----",lamp_ctrl_data.Light_mode);
	}
	else if(key_event == KEY_CODE_UP) {
		if(user_pwm_duty != 600) {
			if(user_pwm_duty > 400){
				user_pwm_duty = 600;
			}else{
				user_pwm_duty += 200;
			}
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			PR_NOTICE("----PWM_VALUE UP ONCE----");
		}
	}
	else if(key_event == KEY_CODE_DOWN) {
		if(user_pwm_duty != 0) {
			if(user_pwm_duty < 200){
				user_pwm_duty = 0;
			}else{
				user_pwm_duty -= 200;
			}
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			PR_NOTICE("----PWM_VALUE DOWN ONCE----");
		}
	}
	else if(key_event == KEY_CODE_SET_BEEP) {
		lamp_ctrl_data.Silent_mode = !lamp_ctrl_data.Silent_mode;
		PR_NOTICE("----SET BEEP----");
	}
		__ctrl_beep(100);
}

VOID lamp_key_poll(VOID)
{
	app_key_scan(&key_trg,&key_cont);

	switch (key_cont)
	{
	case KEY_CODE_RELEASE:
		if(key_buf != 0) {
			lamp_key_event(key_buf);
		}
		key_buf = 0;
		key_old = KEY_CODE_RELEASE;
		break;
	case KEY_CODE_SWITCH:
		vTaskDelay(10);
		app_key_scan(&key_trg,&key_cont);
		if(key_cont == KEY_CODE_SWITCH) {
			key_buf = KEY_CODE_SWITCH;
		}
		key_old = KEY_CODE_SWITCH;
		break;
	case KEY_CODE_SET_LIGHT_COLOR:
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			key_buf = 0;
			return ;
		}
		vTaskDelay(10);
		app_key_scan(&key_trg,&key_cont);
		if(key_cont == KEY_CODE_SET_LIGHT_COLOR) {
			key_buf = KEY_CODE_SET_LIGHT_COLOR;
		}
		key_old = KEY_CODE_SET_LIGHT_COLOR;
		break;
	case KEY_CODE_UP:
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			key_buf = 0;
			return ;
		}
		if(key_old == KEY_CODE_UP) {
			key_delay_cont++;
		}else{
			key_delay_cont = 0;
		}

		if(key_delay_cont >= 2) {
			key_buf = KEY_CODE_UP;
		}

		if(key_delay_cont >= 40) {
			key_buf = 0;
			if(user_pwm_duty <= 590) {
				user_pwm_duty += 10;
				lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			}
		}

		key_old = KEY_CODE_UP;
		break;
	case KEY_CODE_DOWN:
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			key_buf = 0;
			return ;
		}
		if(key_old == KEY_CODE_DOWN) {
			key_delay_cont++;
		}else{
			key_delay_cont = 0;
		}

		if(key_delay_cont >= 2) {
			key_buf = KEY_CODE_DOWN;
		}

		if(key_delay_cont >= 40) {
			key_buf = 0;
			if(user_pwm_duty>=10) {
				user_pwm_duty -= 10;
				lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			}
		}

		key_old = KEY_CODE_DOWN;
		break;
	case KEY_CODE_SET_BEEP:
		vTaskDelay(10);
		app_key_scan(&key_trg,&key_cont);
		if(key_cont == KEY_CODE_SET_BEEP) {
			key_buf = KEY_CODE_SET_BEEP;
		}
		break;
	case KEY_CODE_DELAY_OFF:

		break;
	default:
		break;
	}
}

Code snippet #22

Plain text
STATIC VOID lamp_key_event(UINT8_T key_event)
{
	if(key_event == KEY_CODE_SWITCH) {
		PR_NOTICE("----POWER ON!!!!!!!----");
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			lamp_ctrl_data.Lamp_switch = TRUE;
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
		}else{
			lamp_ctrl_data.Lamp_switch = FALSE;
			lamp_pwm_off();
		}
	}else if(key_event == KEY_CODE_SET_LIGHT_COLOR) {
		lamp_ctrl_data.Light_mode++;
		if(lamp_ctrl_data.Light_mode > 2){
			lamp_ctrl_data.Light_mode = 0;
		}
		lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
		PR_NOTICE("----change light mode to %d----",lamp_ctrl_data.Light_mode);
	}
	else if(key_event == KEY_CODE_UP) {
		if(user_pwm_duty != 600) {
			if(user_pwm_duty > 400){
				user_pwm_duty = 600;
			}else{
				user_pwm_duty += 200;
			}
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			PR_NOTICE("----PWM_VALUE UP ONCE----");
		}
	}
	else if(key_event == KEY_CODE_DOWN) {
		if(user_pwm_duty != 0) {
			if(user_pwm_duty < 200){
				user_pwm_duty = 0;
			}else{
				user_pwm_duty -= 200;
			}
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			PR_NOTICE("----PWM_VALUE DOWN ONCE----");
		}
	}
	else if(key_event == KEY_CODE_SET_BEEP) {
		lamp_ctrl_data.Silent_mode = !lamp_ctrl_data.Silent_mode;
		PR_NOTICE("----SET BEEP----");
	}
		__ctrl_beep(100);
}

VOID lamp_key_poll(VOID)
{
	app_key_scan(&key_trg,&key_cont);

	switch (key_cont)
	{
	case KEY_CODE_RELEASE:
		if(key_buf != 0) {
			lamp_key_event(key_buf);
		}
		key_buf = 0;
		key_old = KEY_CODE_RELEASE;
		break;
	case KEY_CODE_SWITCH:
		vTaskDelay(10);
		app_key_scan(&key_trg,&key_cont);
		if(key_cont == KEY_CODE_SWITCH) {
			key_buf = KEY_CODE_SWITCH;
		}
		key_old = KEY_CODE_SWITCH;
		break;
	case KEY_CODE_SET_LIGHT_COLOR:
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			key_buf = 0;
			return ;
		}
		vTaskDelay(10);
		app_key_scan(&key_trg,&key_cont);
		if(key_cont == KEY_CODE_SET_LIGHT_COLOR) {
			key_buf = KEY_CODE_SET_LIGHT_COLOR;
		}
		key_old = KEY_CODE_SET_LIGHT_COLOR;
		break;
	case KEY_CODE_UP:
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			key_buf = 0;
			return ;
		}
		if(key_old == KEY_CODE_UP) {
			key_delay_cont++;
		}else{
			key_delay_cont = 0;
		}

		if(key_delay_cont >= 2) {
			key_buf = KEY_CODE_UP;
		}

		if(key_delay_cont >= 40) {
			key_buf = 0;
			if(user_pwm_duty <= 590) {
				user_pwm_duty += 10;
				lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			}
		}

		key_old = KEY_CODE_UP;
		break;
	case KEY_CODE_DOWN:
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			key_buf = 0;
			return ;
		}
		if(key_old == KEY_CODE_DOWN) {
			key_delay_cont++;
		}else{
			key_delay_cont = 0;
		}

		if(key_delay_cont >= 2) {
			key_buf = KEY_CODE_DOWN;
		}

		if(key_delay_cont >= 40) {
			key_buf = 0;
			if(user_pwm_duty>=10) {
				user_pwm_duty -= 10;
				lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
			}
		}

		key_old = KEY_CODE_DOWN;
		break;
	case KEY_CODE_SET_BEEP:
		vTaskDelay(10);
		app_key_scan(&key_trg,&key_cont);
		if(key_cont == KEY_CODE_SET_BEEP) {
			key_buf = KEY_CODE_SET_BEEP;
		}
		break;
	case KEY_CODE_DELAY_OFF:

		break;
	default:
		break;
	}
}

Code snippet #23

Plain text
UCHAR_T tuya_sh1106_init(sh1106_init_t* param)
{
	UCHAR_T error = 0;

	int opRet = -1;

	i2c_pin_t i2c_config = {
		.ucSDA_IO = param ->SDA_PIN,
		.ucSCL_IO = param ->SCL_PIN,
	};
	opRet = opSocI2CInit(&i2c_config);          /* SDA&SCL GPIO INIT */
	PR_NOTICE("SocI2CInit = %d",opRet);

	UCHAR_T i;
	for(i = 0; i  < 25; i++) {
		sh1106_send_cmd(oled_init_cmd[i]);
	}
}

Code snippet #24

Plain text
UCHAR_T tuya_sh1106_init(sh1106_init_t* param)
{
	UCHAR_T error = 0;

	int opRet = -1;

	i2c_pin_t i2c_config = {
		.ucSDA_IO = param ->SDA_PIN,
		.ucSCL_IO = param ->SCL_PIN,
	};
	opRet = opSocI2CInit(&i2c_config);          /* SDA&SCL GPIO INIT */
	PR_NOTICE("SocI2CInit = %d",opRet);

	UCHAR_T i;
	for(i = 0; i  < 25; i++) {
		sh1106_send_cmd(oled_init_cmd[i]);
	}
}

Code snippet #25

Plain text
VOID tuya_sh1106_full(VOID)
{
	UCHAR_T i,j,k;
	UCHAR_T *p;
	for(i = 0; i < 4; i++) {
		for(j = 0; j < 16; j++) {
			OLED_GRAM[i][j] = full_buff;
		}
	}
	for(i = 0; i < OLED_PAGE_NUMBER; i++) {
		sh1106_page_set(i);
		sh1106_column_set(0);
		for(j = 0; j < (OLED_COLUMN_NUMBER/8); j++) {
			p = OLED_GRAM[i][j];
			for(k = 0; k < 8; k++) {
				sh1106_send_data(*p);
				p++;
			}
		}
	}
}

VOID tuya_sh1106_clear(VOID)
{
	UCHAR_T i,j,k;
	UCHAR_T *p;
	for(i = 0; i < 4; i++) {
		for(j = 0; j < 16; j++) {
			OLED_GRAM[i][j] = clear_buff;
		}
	}
	for(i = 0; i < OLED_PAGE_NUMBER; i++) {
		sh1106_page_set(i);
		sh1106_column_set(0);
		for(j = 0; j < (OLED_COLUMN_NUMBER/8); j++) {
			p = OLED_GRAM[i][j];
			for(k = 0; k < 8; k++) {
				sh1106_send_data(*p);
				p++;
			}
		}
	}
}

Code snippet #26

Plain text
VOID tuya_sh1106_full(VOID)
{
	UCHAR_T i,j,k;
	UCHAR_T *p;
	for(i = 0; i < 4; i++) {
		for(j = 0; j < 16; j++) {
			OLED_GRAM[i][j] = full_buff;
		}
	}
	for(i = 0; i < OLED_PAGE_NUMBER; i++) {
		sh1106_page_set(i);
		sh1106_column_set(0);
		for(j = 0; j < (OLED_COLUMN_NUMBER/8); j++) {
			p = OLED_GRAM[i][j];
			for(k = 0; k < 8; k++) {
				sh1106_send_data(*p);
				p++;
			}
		}
	}
}

VOID tuya_sh1106_clear(VOID)
{
	UCHAR_T i,j,k;
	UCHAR_T *p;
	for(i = 0; i < 4; i++) {
		for(j = 0; j < 16; j++) {
			OLED_GRAM[i][j] = clear_buff;
		}
	}
	for(i = 0; i < OLED_PAGE_NUMBER; i++) {
		sh1106_page_set(i);
		sh1106_column_set(0);
		for(j = 0; j < (OLED_COLUMN_NUMBER/8); j++) {
			p = OLED_GRAM[i][j];
			for(k = 0; k < 8; k++) {
				sh1106_send_data(*p);
				p++;
			}
		}
	}
}

Code snippet #27

Plain text
VOID tuya_sh1106_gram_point_set(UCHAR_T x, UCHAR_T y, CONST UCHAR_T *ptr_pic)
{
	UCHAR_T i;
	UCHAR_T *p;

	if((x < 4)&&(y < 16)) {
		OLED_GRAM[x][y] = ptr_pic;
	}
	p = OLED_GRAM[x][y];

	sh1106_page_set(x);
	sh1106_column_set(y*8);

	for(i = 0; i < 8; i++) {
		sh1106_send_data(*p);
		p++;
	}
}

Code snippet #28

Plain text
VOID tuya_sh1106_gram_point_set(UCHAR_T x, UCHAR_T y, CONST UCHAR_T *ptr_pic)
{
	UCHAR_T i;
	UCHAR_T *p;

	if((x < 4)&&(y < 16)) {
		OLED_GRAM[x][y] = ptr_pic;
	}
	p = OLED_GRAM[x][y];

	sh1106_page_set(x);
	sh1106_column_set(y*8);

	for(i = 0; i < 8; i++) {
		sh1106_send_data(*p);
		p++;
	}
}

Code snippet #29

Plain text
VOID tuya_sh1106_gram_point_set(UCHAR_T x, UCHAR_T y, CONST UCHAR_T *ptr_pic)
{
	UCHAR_T i;
	UCHAR_T *p;

	if((x < 4)&&(y < 16)) {
		OLED_GRAM[x][y] = ptr_pic;
	}
	p = OLED_GRAM[x][y];

	sh1106_page_set(x);
	sh1106_column_set(y*8);

	for(i = 0; i < 8; i++) {
		sh1106_send_data(*p);
		p++;
	}
}

Code snippet #3

Plain text
OPERATE_RET device_init(VOID_T)
{
	OPERATE_RET op_ret = OPRT_OK;

	TY_IOT_CBS_S wf_cbs = {
		status_changed_cb,\
		gw_ug_inform_cb,\
		gw_reset_cb,\
		dev_obj_dp_cb,\
		dev_raw_dp_cb,\
		dev_dp_query_cb,\
		NULL,
	};

	op_ret = tuya_iot_wf_soc_dev_init_param(WIFI_WORK_MODE_SEL, WF_START_SMART_FIRST, &wf_cbs, NULL, PRODECT_ID, DEV_SW_VERSION);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_wf_soc_dev_init_param error,err_num:%d",op_ret);
		return op_ret;
	}

	op_ret = tuya_iot_reg_get_wf_nw_stat_cb(wf_nw_status_cb);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_reg_get_wf_nw_stat_cb is error,err_num:%d",op_ret);
		return op_ret;
	}

	op_ret = app_lamp_init(APP_LAMP_NORMAL);
	if(OPRT_OK != op_ret) {
		PR_ERR("app init err!");
		return op_ret;
	}

	return op_ret;
}

Code snippet #30

Plain text
VOID tuya_sh1106_gram_point_set(UCHAR_T x, UCHAR_T y, CONST UCHAR_T *ptr_pic)
{
	UCHAR_T i;
	UCHAR_T *p;

	if((x < 4)&&(y < 16)) {
		OLED_GRAM[x][y] = ptr_pic;
	}
	p = OLED_GRAM[x][y];

	sh1106_page_set(x);
	sh1106_column_set(y*8);

	for(i = 0; i < 8; i++) {
		sh1106_send_data(*p);
		p++;
	}
}

Code snippet #31

Plain text
VOID tuya_sh1106_on(VOID)
{
	sh1106_send_cmd(0x8D);
	sh1106_send_cmd(0x14);
	sh1106_send_cmd(0xAF);
}

VOID tuya_sh1106_off(VOID)
{
	sh1106_send_cmd(0x8D);
	sh1106_send_cmd(0x10);
	sh1106_send_cmd(0xAE);
}

Code snippet #32

Plain text
VOID tuya_sh1106_on(VOID)
{
	sh1106_send_cmd(0x8D);
	sh1106_send_cmd(0x14);
	sh1106_send_cmd(0xAF);
}

VOID tuya_sh1106_off(VOID)
{
	sh1106_send_cmd(0x8D);
	sh1106_send_cmd(0x10);
	sh1106_send_cmd(0xAE);
}

Code snippet #33

Plain text
POSIX_TM_S cur_time;

if( uni_local_time_get(&cur_time) != OPRT_OK ) {
	PR_NOTICE("cant get local time");
}
lamp_ctrl_data.time_hour = cur_time.tm_hour;
lamp_ctrl_data.time_min = cur_time.tm_min;

Code snippet #34

Plain text
POSIX_TM_S cur_time;

if( uni_local_time_get(&cur_time) != OPRT_OK ) {
	PR_NOTICE("cant get local time");
}
lamp_ctrl_data.time_hour = cur_time.tm_hour;
lamp_ctrl_data.time_min = cur_time.tm_min;

Code snippet #35

Plain text
for(i = 4; i < 8; i++) {
	tuya_sh1106_gram_point_set(0,i,&diplay_buffer_time[(i+14)*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(1,i,&diplay_buffer_time[(i+14)*OLED_PIX_HEIGHT+8]);
}

if(lamp_ctrl_data.time_hour < 10) {
	tuya_sh1106_gram_point_set(0,9,&diplay_buffer_time[0]);
	tuya_sh1106_gram_point_set(1,9,&diplay_buffer_time[8]);
}else {
	tuya_sh1106_gram_point_set(0,9,&diplay_buffer_time[(lamp_ctrl_data.time_hour/10)*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(1,9,&diplay_buffer_time[(lamp_ctrl_data.time_hour/10)*OLED_PIX_HEIGHT+8]);
}
tuya_sh1106_gram_point_set(0,10,&diplay_buffer_time[(lamp_ctrl_data.time_hour%10)*OLED_PIX_HEIGHT]);
tuya_sh1106_gram_point_set(1,10,&diplay_buffer_time[(lamp_ctrl_data.time_hour%10)*OLED_PIX_HEIGHT+8]);

//flicker effect of ':'
tuya_sh1106_gram_point_set(0,11,&diplay_buffer_time[10*OLED_PIX_HEIGHT]);
tuya_sh1106_gram_point_set(1,11,&diplay_buffer_time[10*OLED_PIX_HEIGHT+8]);

if(lamp_ctrl_data.time_min < 10) {
	tuya_sh1106_gram_point_set(0,12,&diplay_buffer_time[0]);
	tuya_sh1106_gram_point_set(1,12,&diplay_buffer_time[8]);
}else {
	tuya_sh1106_gram_point_set(0,12,&diplay_buffer_time[(lamp_ctrl_data.time_min/10)*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(1,12,&diplay_buffer_time[(lamp_ctrl_data.time_min/10)*OLED_PIX_HEIGHT+8]);
}

tuya_sh1106_gram_point_set(0,13,&diplay_buffer_time[(lamp_ctrl_data.time_min%10)*OLED_PIX_HEIGHT]);
tuya_sh1106_gram_point_set(1,13,&diplay_buffer_time[(lamp_ctrl_data.time_min%10)*OLED_PIX_HEIGHT+8]);

tuya_sh1106_display();

Code snippet #36

Plain text
for(i = 4; i < 8; i++) {
	tuya_sh1106_gram_point_set(0,i,&diplay_buffer_time[(i+14)*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(1,i,&diplay_buffer_time[(i+14)*OLED_PIX_HEIGHT+8]);
}

if(lamp_ctrl_data.time_hour < 10) {
	tuya_sh1106_gram_point_set(0,9,&diplay_buffer_time[0]);
	tuya_sh1106_gram_point_set(1,9,&diplay_buffer_time[8]);
}else {
	tuya_sh1106_gram_point_set(0,9,&diplay_buffer_time[(lamp_ctrl_data.time_hour/10)*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(1,9,&diplay_buffer_time[(lamp_ctrl_data.time_hour/10)*OLED_PIX_HEIGHT+8]);
}
tuya_sh1106_gram_point_set(0,10,&diplay_buffer_time[(lamp_ctrl_data.time_hour%10)*OLED_PIX_HEIGHT]);
tuya_sh1106_gram_point_set(1,10,&diplay_buffer_time[(lamp_ctrl_data.time_hour%10)*OLED_PIX_HEIGHT+8]);

//flicker effect of ':'
tuya_sh1106_gram_point_set(0,11,&diplay_buffer_time[10*OLED_PIX_HEIGHT]);
tuya_sh1106_gram_point_set(1,11,&diplay_buffer_time[10*OLED_PIX_HEIGHT+8]);

if(lamp_ctrl_data.time_min < 10) {
	tuya_sh1106_gram_point_set(0,12,&diplay_buffer_time[0]);
	tuya_sh1106_gram_point_set(1,12,&diplay_buffer_time[8]);
}else {
	tuya_sh1106_gram_point_set(0,12,&diplay_buffer_time[(lamp_ctrl_data.time_min/10)*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(1,12,&diplay_buffer_time[(lamp_ctrl_data.time_min/10)*OLED_PIX_HEIGHT+8]);
}

tuya_sh1106_gram_point_set(0,13,&diplay_buffer_time[(lamp_ctrl_data.time_min%10)*OLED_PIX_HEIGHT]);
tuya_sh1106_gram_point_set(1,13,&diplay_buffer_time[(lamp_ctrl_data.time_min%10)*OLED_PIX_HEIGHT+8]);

tuya_sh1106_display();

Code snippet #37

Plain text
USHORT_T adc_value = 0;
float adc_voltage = 0.0;
tuya_hal_adc_init(&tuya_adc);
tuya_hal_adc_value_get(TEMP_ADC_DATA_LEN, &adc_value);
PR_NOTICE("----adc_value = %d----",adc_value);
adc_voltage = 2.4*((float)adc_value/2048);

PR_NOTICE("----adc_voltage = %f----",adc_voltage);
tuya_hal_adc_finalize(&tuya_adc);

Code snippet #38

Plain text
USHORT_T adc_value = 0;
float adc_voltage = 0.0;
tuya_hal_adc_init(&tuya_adc);
tuya_hal_adc_value_get(TEMP_ADC_DATA_LEN, &adc_value);
PR_NOTICE("----adc_value = %d----",adc_value);
adc_voltage = 2.4*((float)adc_value/2048);

PR_NOTICE("----adc_voltage = %f----",adc_voltage);
tuya_hal_adc_finalize(&tuya_adc);

Code snippet #39

Plain text
if(adc_voltage > 1.95) {
	lamp_ctrl_data.Battery_remain = 100;
	return ;
}
if(adc_voltage > 1.92) {
	lamp_ctrl_data.Battery_remain = 80;
	return ;
}
if(adc_voltage > 1.89) {
	lamp_ctrl_data.Battery_remain = 60;
	return ;
}
if(adc_voltage > 1.86) {
	lamp_ctrl_data.Battery_remain = 40;
	return ;
}
if(adc_voltage > 1.8) {
	lamp_ctrl_data.Battery_remain = 20;
	if(lamp_ctrl_data.Low_pow_alarm) {
		__ctrl_beep(300);
	}
	return ;
}

Code snippet #4

Plain text
OPERATE_RET device_init(VOID_T)
{
	OPERATE_RET op_ret = OPRT_OK;

	TY_IOT_CBS_S wf_cbs = {
		status_changed_cb,\
		gw_ug_inform_cb,\
		gw_reset_cb,\
		dev_obj_dp_cb,\
		dev_raw_dp_cb,\
		dev_dp_query_cb,\
		NULL,
	};

	op_ret = tuya_iot_wf_soc_dev_init_param(WIFI_WORK_MODE_SEL, WF_START_SMART_FIRST, &wf_cbs, NULL, PRODECT_ID, DEV_SW_VERSION);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_wf_soc_dev_init_param error,err_num:%d",op_ret);
		return op_ret;
	}

	op_ret = tuya_iot_reg_get_wf_nw_stat_cb(wf_nw_status_cb);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_reg_get_wf_nw_stat_cb is error,err_num:%d",op_ret);
		return op_ret;
	}

	op_ret = app_lamp_init(APP_LAMP_NORMAL);
	if(OPRT_OK != op_ret) {
		PR_ERR("app init err!");
		return op_ret;
	}

	return op_ret;
}

Code snippet #40

Plain text
if(adc_voltage > 1.95) {
	lamp_ctrl_data.Battery_remain = 100;
	return ;
}
if(adc_voltage > 1.92) {
	lamp_ctrl_data.Battery_remain = 80;
	return ;
}
if(adc_voltage > 1.89) {
	lamp_ctrl_data.Battery_remain = 60;
	return ;
}
if(adc_voltage > 1.86) {
	lamp_ctrl_data.Battery_remain = 40;
	return ;
}
if(adc_voltage > 1.8) {
	lamp_ctrl_data.Battery_remain = 20;
	if(lamp_ctrl_data.Low_pow_alarm) {
		__ctrl_beep(300);
	}
	return ;
}

Code snippet #41

Plain text
STATIC VOID lamp_display_power(VOID)
{
	if(lamp_ctrl_data.Lamp_switch != TRUE) {
		return ;
	}

	UCHAR_T i = 0;
	for(i = 4; i < 9; i++) {
		tuya_sh1106_gram_point_set(2,i,&diplay_buffer_time[(i+8)*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,i,&diplay_buffer_time[(i+8)*OLED_PIX_HEIGHT+8]);
	}

	//flicker effect of ':'
	tuya_sh1106_gram_point_set(2,9,&diplay_buffer_time[17*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(3,9,&diplay_buffer_time[17*OLED_PIX_HEIGHT+8]);

	if(lamp_ctrl_data.Battery_remain == 100) {
		tuya_sh1106_gram_point_set(2,10,&diplay_buffer_time[OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,10,&diplay_buffer_time[OLED_PIX_HEIGHT+8]);

		tuya_sh1106_gram_point_set(2,11,&diplay_buffer_time[0]);
		tuya_sh1106_gram_point_set(3,11,&diplay_buffer_time[8]);
		tuya_sh1106_gram_point_set(2,12,&diplay_buffer_time[0]);
		tuya_sh1106_gram_point_set(3,12,&diplay_buffer_time[8]);
	}else {
		tuya_sh1106_gram_point_set(2,10,&diplay_buffer_time[17*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,10,&diplay_buffer_time[17*OLED_PIX_HEIGHT+8]);

		tuya_sh1106_gram_point_set(2,11,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain/10)*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,11,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain/10)*OLED_PIX_HEIGHT+8]);
		tuya_sh1106_gram_point_set(2,12,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain%10)*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,12,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain%10)*OLED_PIX_HEIGHT+8]);
	}

	tuya_sh1106_gram_point_set(2,13,&diplay_buffer_time[11*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(3,13,&diplay_buffer_time[11*OLED_PIX_HEIGHT+8]);

}

Code snippet #42

Plain text
STATIC VOID lamp_display_power(VOID)
{
	if(lamp_ctrl_data.Lamp_switch != TRUE) {
		return ;
	}

	UCHAR_T i = 0;
	for(i = 4; i < 9; i++) {
		tuya_sh1106_gram_point_set(2,i,&diplay_buffer_time[(i+8)*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,i,&diplay_buffer_time[(i+8)*OLED_PIX_HEIGHT+8]);
	}

	//flicker effect of ':'
	tuya_sh1106_gram_point_set(2,9,&diplay_buffer_time[17*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(3,9,&diplay_buffer_time[17*OLED_PIX_HEIGHT+8]);

	if(lamp_ctrl_data.Battery_remain == 100) {
		tuya_sh1106_gram_point_set(2,10,&diplay_buffer_time[OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,10,&diplay_buffer_time[OLED_PIX_HEIGHT+8]);

		tuya_sh1106_gram_point_set(2,11,&diplay_buffer_time[0]);
		tuya_sh1106_gram_point_set(3,11,&diplay_buffer_time[8]);
		tuya_sh1106_gram_point_set(2,12,&diplay_buffer_time[0]);
		tuya_sh1106_gram_point_set(3,12,&diplay_buffer_time[8]);
	}else {
		tuya_sh1106_gram_point_set(2,10,&diplay_buffer_time[17*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,10,&diplay_buffer_time[17*OLED_PIX_HEIGHT+8]);

		tuya_sh1106_gram_point_set(2,11,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain/10)*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,11,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain/10)*OLED_PIX_HEIGHT+8]);
		tuya_sh1106_gram_point_set(2,12,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain%10)*OLED_PIX_HEIGHT]);
		tuya_sh1106_gram_point_set(3,12,&diplay_buffer_time[(lamp_ctrl_data.Battery_remain%10)*OLED_PIX_HEIGHT+8]);
	}

	tuya_sh1106_gram_point_set(2,13,&diplay_buffer_time[11*OLED_PIX_HEIGHT]);
	tuya_sh1106_gram_point_set(3,13,&diplay_buffer_time[11*OLED_PIX_HEIGHT+8]);

}

Code snippet #43

Plain text
VOID lamp_device_init(VOID)
{
	......
	tuya_bh1750_init(&bh1750_int_param);
	......
}

Code snippet #44

Plain text
VOID lamp_device_init(VOID)
{
	......
	tuya_bh1750_init(&bh1750_int_param);
	......
}

Code snippet #45

Plain text
VOID lamp_light_detect(VOID)
{
	lamp_ctrl_data.Light_intensity = tuya_bh1750_get_bright_value();
	PR_NOTICE("light_intensity_value = %d",lamp_ctrl_data.Light_intensity);
}

Code snippet #46

Plain text
VOID lamp_light_detect(VOID)
{
	lamp_ctrl_data.Light_intensity = tuya_bh1750_get_bright_value();
	PR_NOTICE("light_intensity_value = %d",lamp_ctrl_data.Light_intensity);
}

Code snippet #47

Plain text
VOID lamp_get_sensor_data(VOID)
{

	UCHAR_T data[50];
	memset(data, 0, sizeof(data));

	CHAR_T opt;
	opt = get_radar_data(data,50);
	if(opt == 0){
		UCHAR_T i;
		if((data[0] == 'S')&&(data[6] == ':')) {
			if(data[8] == '[') {
				lamp_ctrl_data.Radar_sensor = TRUE;
			}else {
				lamp_ctrl_data.Radar_sensor = FALSE;
				lamp_ctrl_data.Human_distance = 0;
				PR_NOTICE("----NO MAN AROUND----");
			}
		}
		if(lamp_ctrl_data.Radar_sensor == FALSE) {
			return ;
		}
		for(i=0;i<50;i++) {
			if(data[i]=='R') {
				if((data[i+8] >= '0')&&(data[i+8] <= '9')) {
					lamp_ctrl_data.Human_distance = ((data[i+7] - '0') * 10) + (data[i+8] - '0');
				}else {
					lamp_ctrl_data.Human_distance = (data[i+7] - '0');
				}
				PR_NOTICE("----Human_distance = %d----",lamp_ctrl_data.Human_distance);
				return ;
			}
		}
	}
}

Code snippet #48

Plain text
VOID lamp_get_sensor_data(VOID)
{

	UCHAR_T data[50];
	memset(data, 0, sizeof(data));

	CHAR_T opt;
	opt = get_radar_data(data,50);
	if(opt == 0){
		UCHAR_T i;
		if((data[0] == 'S')&&(data[6] == ':')) {
			if(data[8] == '[') {
				lamp_ctrl_data.Radar_sensor = TRUE;
			}else {
				lamp_ctrl_data.Radar_sensor = FALSE;
				lamp_ctrl_data.Human_distance = 0;
				PR_NOTICE("----NO MAN AROUND----");
			}
		}
		if(lamp_ctrl_data.Radar_sensor == FALSE) {
			return ;
		}
		for(i=0;i<50;i++) {
			if(data[i]=='R') {
				if((data[i+8] >= '0')&&(data[i+8] <= '9')) {
					lamp_ctrl_data.Human_distance = ((data[i+7] - '0') * 10) + (data[i+8] - '0');
				}else {
					lamp_ctrl_data.Human_distance = (data[i+7] - '0');
				}
				PR_NOTICE("----Human_distance = %d----",lamp_ctrl_data.Human_distance);
				return ;
			}
		}
	}
}

Code snippet #49

Plain text
VOID STATIC lamp_sit_remind(VOID)
{
	if(lamp_ctrl_data.Sit_remind != TRUE) {
		alert_count = 0;
		return ;
	}

	if((lamp_ctrl_data.Human_distance <= 5)&&(lamp_ctrl_data.Radar_sensor == TRUE)) {
		PR_NOTICE("----enter sit remind----");
		alert_count++;
		if(alert_count >= 3) {
			__ctrl_beep(300);
		}
	}else{
		alert_count = 0;
	}
}

Code snippet #5

Plain text
	TY_IOT_CBS_S wf_cbs = {
		status_changed_cb,\
		gw_ug_inform_cb,\
		gw_reset_cb,\
		dev_obj_dp_cb,\
		dev_raw_dp_cb,\
		dev_dp_query_cb,\
		NULL,
	};

	op_ret = tuya_iot_wf_soc_dev_init_param(WIFI_WORK_MODE_SEL, WF_START_SMART_FIRST, &wf_cbs, NULL, PRODECT_ID, DEV_SW_VERSION);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_wf_soc_dev_init_param error,err_num:%d",op_ret);
		return op_ret;
	}

Code snippet #50

Plain text
VOID STATIC lamp_sit_remind(VOID)
{
	if(lamp_ctrl_data.Sit_remind != TRUE) {
		alert_count = 0;
		return ;
	}

	if((lamp_ctrl_data.Human_distance <= 5)&&(lamp_ctrl_data.Radar_sensor == TRUE)) {
		PR_NOTICE("----enter sit remind----");
		alert_count++;
		if(alert_count >= 3) {
			__ctrl_beep(300);
		}
	}else{
		alert_count = 0;
	}
}

Code snippet #51

Plain text
VOID STATIC lamp_light_control(VOID)
{
	if((light_mode_old != lamp_ctrl_data.Light_mode)&&(lamp_ctrl_data.Lamp_switch == TRUE)) {
		lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
	}
	light_mode_old = lamp_ctrl_data.Light_mode;


	if(lamp_ctrl_data.Auto_light != TRUE) {
		return ;
	}

	if(lamp_ctrl_data.Radar_sensor == FALSE) {
		lamp_ctrl_data.Lamp_switch = FALSE;
		lamp_pwm_off();
	}else if((lamp_ctrl_data.Human_distance <= DISTANCE_THRESHOLD)&&\\
			(lamp_ctrl_data.Light_intensity <= LIGHT_INTENSITY_THRESHOLD)) {
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			lamp_ctrl_data.Lamp_switch = TRUE;
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
		}
	}
}

Code snippet #52

Plain text
VOID STATIC lamp_light_control(VOID)
{
	if((light_mode_old != lamp_ctrl_data.Light_mode)&&(lamp_ctrl_data.Lamp_switch == TRUE)) {
		lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
	}
	light_mode_old = lamp_ctrl_data.Light_mode;


	if(lamp_ctrl_data.Auto_light != TRUE) {
		return ;
	}

	if(lamp_ctrl_data.Radar_sensor == FALSE) {
		lamp_ctrl_data.Lamp_switch = FALSE;
		lamp_pwm_off();
	}else if((lamp_ctrl_data.Human_distance <= DISTANCE_THRESHOLD)&&\\
			(lamp_ctrl_data.Light_intensity <= LIGHT_INTENSITY_THRESHOLD)) {
		if(lamp_ctrl_data.Lamp_switch == FALSE) {
			lamp_ctrl_data.Lamp_switch = TRUE;
			lamp_pwm_set(lamp_ctrl_data.Light_mode,user_pwm_duty);
		}
	}
}

Code snippet #6

Plain text
	TY_IOT_CBS_S wf_cbs = {
		status_changed_cb,\
		gw_ug_inform_cb,\
		gw_reset_cb,\
		dev_obj_dp_cb,\
		dev_raw_dp_cb,\
		dev_dp_query_cb,\
		NULL,
	};

	op_ret = tuya_iot_wf_soc_dev_init_param(WIFI_WORK_MODE_SEL, WF_START_SMART_FIRST, &wf_cbs, NULL, PRODECT_ID, DEV_SW_VERSION);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_wf_soc_dev_init_param error,err_num:%d",op_ret);
		return op_ret;
	}

Code snippet #7

Plain text
	op_ret = tuya_iot_reg_get_wf_nw_stat_cb(wf_nw_status_cb);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_reg_get_wf_nw_stat_cb is error,err_num:%d",op_ret);
		return op_ret;
	}

Code snippet #8

Plain text
	op_ret = tuya_iot_reg_get_wf_nw_stat_cb(wf_nw_status_cb);
	if(OPRT_OK != op_ret) {
		PR_ERR("tuya_iot_reg_get_wf_nw_stat_cb is error,err_num:%d",op_ret);
		return op_ret;
	}

Code snippet #9

Plain text
	op_ret = app_lamp_init(APP_LAMP_NORMAL);
	if(OPRT_OK != op_ret) {
		PR_ERR("app init err!");
		return op_ret;
	}

Credits

Sandwich IoT
40 projects • 5 followers

Comments