虎年新活动——把智慧路灯改成小夜灯

举报
赵兴旺 发表于 2022/02/11 14:21:28 2022/02/11
【摘要】 靠光触发的小夜灯

过年在家收拾地下室,发现了吃灰的开发板,so计划让它散发光芒照亮黑暗的地下环境。

其他的活动我也无心参加,安安静静的写完这篇就很满意。

 

左边的鸿蒙不太会,就搞右边的经典小熊派吧。

第一步,下载开发环境,因为穷,需要经常恢复系统,这次依旧熟练的安装开发环境。

这就是下载地址,(本文以windows 10 64-bit系统Visual Studio Code为例。请下载1.49版本,其他版本不支持IoT Link)。最新版不支持,请注意,

https://code.visualstudio.com/updates/v1_49

最新版不支持,请注意,

 

下载完,就是安装,为什么用vs ,不直接用iot studio ,因为这个还有更新,那个,,,,

我这个之前汉化过,所以安装完成就是中文版,安装很简单,应用商店搜索就行,汉化包一样的道理,IoT link  

 

安装过程报错,c++环境和 鸿蒙开发环境冲突 ,果断卸

 

Iot link 1.3.0

然后 粘贴一段代码过来 ,很清楚 有注释,编译 ,烧录 就变成了夜灯。

#include <osal.h>
#include "lcd.h"
#include "E53_SC1.h"

/* 存放E53_SC1扩展板传感器数据,可在E53_SC1.h中查看定义 */
E53_SC1_Data_TypeDef E53_SC1_Data;

/* 用于数据采集和数据处理任务间同步的信号量 */
osal_semp_t sync_semp;

/* 数据采集任务-低优先级 */
static int data_collect_task_entry()
{
    /* 初始化扩展板 */
    Init_E53_SC1();

    while (1)
    {
        /* 读取扩展板板载数据,存到数据结构体E53_SC1_Data中 */
        E53_SC1_Read_Data();

        /* 数据读取完毕,释放信号量,唤醒数据处理任务 */
        osal_semp_post(sync_semp);

        /* 任务睡眠2s */
        osal_task_sleep(2*1000);
    }
}

/* 数据处理任务-高优先级 */
static int data_deal_task_entry()
{
    /* lux- 当次数据,old-lux-上次数据 */
    int lux = 0, old_lux = 0;

    /* LCD清屏,防止干扰显示 */
    LCD_Clear(WHITE);

    while (1)
    {
        /* 等待信号量,未等到说明数据还未采集,阻塞等待 */
        osal_semp_pend(sync_semp, cn_osal_timeout_forever);

        /* 信号量等待,被唤醒,开始处理数据 */
        old_lux = lux;
        lux = (int)E53_SC1_Data.Lux;
        printf("BH1750 Value is %d\r\n", lux);
        LCD_ShowString(101002001616"BH1750 Value is:");
        LCD_ShowNum(140100, lux, 516);

        /* 阈值为1000,自动点亮或者熄灭路灯 */
        if(old_lux < 1000 && lux > 1000)
        {
            HAL_GPIO_WritePin(SC1_Light_GPIO_Port, SC1_Light_Pin, GPIO_PIN_RESET);
            printf("Street Light OFF!\r\n");
        }
        else if(old_lux > 1000 && lux < 1000)
        {
            HAL_GPIO_WritePin(SC1_Light_GPIO_Port, SC1_Light_Pin, GPIO_PIN_SET);
            printf("Street Light ON!\r\n");
        }
    }
}

/* 标准demo启动函数,函数名不要修改,否则会影响下一步实验 */
int standard_app_demo_main()
{
    /* 数据处理任务的优先级应高于数据采集任务 */
    osal_task_create("data_collect",data_collect_task_entry,NULL,0x400,NULL,3);
    osal_task_create("data_deal",data_deal_task_entry,NULL,0x400,NULL,2);
    return 0;
}

缺点是 这个扩展板没有人体感应, 在无网的环境,只能靠亮度变化来点亮,

当环境光线达到设定值会自动开启,但是在无人的情况也不会关闭,

 

希望通过一段代码也许可以实现,光触发,

实现效果:在黑暗的地下室,无人情况是不亮的,当有一束光照到光感上,激活设备状态,下次光线变暗后 开启照明,延时半分钟,

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。