bossay_release_out/vendor/bossay/LEDPWM/demo_LEDPWM/LEDPWM.c

120 lines
2.5 KiB
C
Raw Normal View History

2025-09-24 11:16:14 +08:00
#include <stdio.h>
#include "ohos_init.h"
#include "iot_errno.h"
#include "iot_gpio.h"
#include "iot_gpio_ex.h"
#include "iot_i2c.h"
#include <math.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>
#include "ohos_init.h"
#include <stdlib.h>
#include <cmsis_os2.h>
#include <stdbool.h>
#define WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA 6
#define WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL 6
#define WIFI_IOT_I2C_IDX_1 1
#define BH1750_ADDR 0x23
int BoardInit(void);
int E53SC1ReadData(float *data);
static void GpioInit(void)
{
printf("GPIO init...\r\n");
IoTGpioInit(0);
IoTGpioSetFunc(0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA); // GPIO_0复用为I2C1_SDA
IoTGpioInit(1);
IoTGpioSetFunc(1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL); // GPIO_1复用为I2C1_SCL
IoTI2cInit(WIFI_IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */
printf("GPIO init...OK\r\n");
}
static int InitBH1750(void)
{
int ret;
uint8_t send_data[1] = {0x01};
ret = IoTI2cWrite(WIFI_IOT_I2C_IDX_1, (BH1750_ADDR << 1) | 0x00, send_data, 1);
if (ret != 0) {
printf("===== Error: I2C write ret = 0x%x! =====\r\n", ret);
return -1;
}
return 0;
}
static int StartBH1750(void)
{
int ret;
uint8_t send_data[1] = {0x10};
ret = IoTI2cWrite(WIFI_IOT_I2C_IDX_1, (BH1750_ADDR << 1) | 0x00, send_data, 1);
if (ret != 0) {
printf("===== Error: I2C write ret = 0x%x! =====\r\n", ret);
return -1;
}
return 0;
}
int BoardInit(void)
{
int ret;
GpioInit();
ret = InitBH1750();
// if (ret != 0) {
// return -1;
// }
return 0;
}
int BH1750ReadData(float* data)
{
int ret;
int result;
ret = StartBH1750(); // 启动传感器采集数据
if (ret != 0) {
printf("Start BH1750 failed!\r\n");
return -1;
}
usleep(180000);
uint8_t recv_data[2] = {0};
ret = IoTI2cRead(WIFI_IOT_I2C_IDX_1, (BH1750_ADDR << 1) | 0x01, recv_data, 2); // 读取传感器数据
if (ret != 0) {
return -1;
}
printf("recevie data is :%x,%x\r\n",recv_data[0],recv_data[1]);
*data = (float)(((recv_data[0] << 8) + recv_data[1]) / 1.2); //合成数据,即光照数据
return 0;
}
static void LEDPWM(void)
{
int ret;
int temp;
float Lux;
ret = BoardInit();
if (ret != 0) {
printf("Board Init failed!\r\n");
return;
}
osDelay(300);
temp = BH1750ReadData(&Lux);
if (temp != 0) {
printf("Read Data failed!\r\n");
return;
}
printf("Lux data:%.2f\r\n", Lux);
}
APP_FEATURE_INIT(LEDPWM);