基于ARM的智能灯光控制系统(11)状态更新

基于ARM的智能灯光控制系统(11)状态更新

项目中硬件模块的开关状态,由独立的状态线程进行控制管理。

设备状态更新头文件 (sw_pro.h)

#ifndef _SL2000_SW_IPC_H
#define _SL2000_SW_IPC_H

void* sw_pro(void* arg);//状态更新线程
void area_sw_update(void);//更新区域状态
int dev_sw_update(struct sys_dev *head);//更新设备开关状态

#endif

设备状态更新实现文件 (sw_pro.c)

#include "config.h"
#include "sw_pro.h"

extern struct sys_all g_dev[1]; //系统配置结构体全局变量
extern struct sys_dev *head_node; // 系统设备动态链表头指针
extern struct dev_fd g_dev_fd;//系统设备文件

extern int area_update_flag;
extern unsigned char net_cmd;

void* sw_pro(void* arg)
{
    char light_da[2];
    struct sys_dev* new_dev;
    struct sys_dev* find_dev;
    light_da[0] = 0;
    new_dev = (struct sys_dev *)malloc(sizeof(struct sys_dev));

    while(1){
        //光感 处理
        if(find_id(DEV_T_RAY,head_node,new_dev)==1){
            if(g_dev_fd.light_fd>0){
                read(g_dev_fd.light_fd,light_da,1);
            }

            if(new_dev->bind_dev>0 && new_dev->bind_dev<10)
                if((find_dev = get_dev_id(new_dev->bind_dev,head_node)) != NULL)
                    find_dev->sw_sta=light_da[0];
        }

        if(area_update_flag ==1)
            area_sw_update();

        dev_sw_update(head_node);//灯光开关切换

        sleep(1);
    }
}

int dev_sw_update(struct sys_dev *head)
{
    struct sys_dev * p;
    p=head;
    char da[8];

    if(NULL==head){
        printf("列表为空!\n");
        return -1;
    }

    while(p!=NULL){
        switch(p->node.type)
        {

            case DEV_T_LIGHT1:
                if(p->sw_sta == 1){
                    da[0] = J1_ON;
                }else{
                    da[0] = J1_OFF;
                }
                write(g_dev_fd.relay1_fd,da,1);
                break;
            case DEV_T_LIGHT2:
                if(p->sw_sta == 1){
                    da[0] = J2_ON;
                }else{
                    da[0] = J2_OFF;
                }
                write(g_dev_fd.relay2_fd,da,1);
                break;
            case DEV_T_LIG_NET:
                if(p->sw_sta == 1){
                    net_cmd =0x31;
                }else{
                    net_cmd = 0x32;
                }
                break;
            default:
                break;
        }
    p=p->next;
    }
    return 0;
}

//区域处理,可以使用信号
void area_sw_update(void)
{
    int area_loop,dev_loop;
    struct sys_area area_val;
    struct sys_dev* find_dev;

    for(area_loop=0;area_loop<MAX_DEV;area_loop++){
        memcpy(&area_val,&(g_dev->sys_area[area_loop]),sizeof(struct sys_area));
        if(area_val.enable_flag == 1)
            if(area_val.sw_sta == 1){
                for(dev_loop=0;dev_loop<MAX_DEV;dev_loop++){
                    if((find_dev = get_dev_id(area_val.dev_id[dev_loop],
                        head_node)) != NULL)
                        find_dev->sw_sta=ON;
                }

            }else{

                for(dev_loop=0;dev_loop<MAX_DEV;dev_loop++){
                    if((find_dev = get_dev_id(area_val.dev_id[dev_loop],
                        head_node)) != NULL)
                        find_dev->sw_sta=OFF;
                }               

            }

    }
    area_update_flag = 0;

}

原文地址:http://blog.51cto.com/91arm/2061738

时间: 2024-10-14 03:55:59

基于ARM的智能灯光控制系统(11)状态更新的相关文章

基于ARM的智能灯光控制系统(10)网络节点

基于ARM的智能灯光控制系统(10)网络节点 嵌入式开发培训(阶段2)底层系统开发 智能灯光控制系统 节点设备 络通信协议 //--head-- cmd data crc //0x5a 0x15 0x 0x 0x 协议头部(2字节) 命令位(1字节) 数据位(1字节) 校验位(1字节) 功能 0x5a 0x15 0x10 0x11 前四位求和 查询设备在线 0x5a 0x15 0x20 0x21 前四位求和 在线 0x5a 0x15 0x30 0x31 前四位求和 设备开 0x5a 0x15 0

DreamHouse项目(基于ARM与ZIGBEE技术的智能家居)之项目展示

这是本人做的一次有关智能家居的项目,仅是用来参加比赛的!或者是我用来练手的吧!大概花费了我近2个月的时间来完成他,平台是建立在博创S3C2410的嵌入式的箱子上的,我觉得我唯一没有足够自信说是自己写的代码的话就是驱动部分了,毕竟当时的状态也是刚刚把单片机的知识全部学会罢了,因为这是基础中的基础,对于C语言,在校的学生普遍是没有完全掌握的,对于开发真的知识储备确实不够!好吧废话我不多说了,先讲讲我自己做的项目吧!学生的练手项目,大家应该不会来喷我吧! 上图先! 通用模块 我本人真的是没有做出来,但

基于Linux的智能家居的设计(1)

写在前面:做了半年的毕业设计,找到的工作与这个完全无关,发现自己现在有写不甘心,但是我还是在关注这方面的发展,自己的摸索和前人的帮助我完成了智能家居的一部分,希望这个能够给一些初学者 能够一些便利,毕竟技术是一个开放的,不属于某一个人的. 摘要 本课题主要目的是设计和实现一个基于Linux开发平台的智能家居系统.本系统主要使用PVC板做成的家居模型.本系统硬件使用基于ARM架构的samsung S3C6410芯片做成的OK6410开发板为手持终端,利用Zigbee实现网络通讯,并结合各种电子元器

无线LED智能照明控制系统

LED 具有使用寿命长.光效高以及低功耗的特质,使得它在和传统照明灯具相比的时候优势明显.与此同时,近年来电力资源持续缺乏,国家一直在提倡节能环保.营造"绿色低碳"生活,LED 必将会取代传统照明产品.     LED 的半导体器件的特性,使其在智能照明控制方面有绝对的优势,可以完美实现对照明灯具的调光调色.灵活设置.分组管理.状态查询和故障报警等功能,可以更加人性化的满足使用者的要求,实现最大限度的节能,有效地降低照明工程的维护成本.LED 照明走向智慧化已经成为一个发展趋势.   

基于Linux的智能家居的设计(2)

1  系统整体设计方案 智能家居系统的是一个实时查询家庭的温湿度.照明控制.自己主动控制的设定.集家庭娱乐.智能安防为一体,大量数据快处理.可靠的系统,因此在硬件和软件上都有非常大的要求,因此在这里进行了多方面的考虑有下面两个实现方案: 方案一:利用STM32单片机作为手持终端的控制器,使用按键和12864液晶屏作为人机交互的接口.利用51单片机作为房子内部的电灯.空调.门禁等家电的控制器,利用串口实现STM32单片机和51单片机作为传输数据的通道.这个能够实现.可是.机械按键和12864在智能

基于Linux的智能家居的设计(3)

2  硬件设计 本课题的硬件设计包括主控制器.数据传输设计.数据采集设计.控制驱动设计.显示设计,门禁设计. 2.1  主控制器 根据方案三选择S3C6410主控芯片,S3C6410是由Samsung公司推出的一款低功耗.高性价比的RSIC处理器 ,基于ARM11内核,内置强大的硬件加速,显示处理和缩放,运动视频处理,音频处理[9].这个作为智能家居的处理器是不二之选,硬件性能上完全可以实现.本设计选用的基于S3C6410的OK6410开发板.开发板上拥有如下特征[10]: (1)  12MHz

基于Linux的智能家居的设计(4)

3  开发环境的搭建 本次课题使用的开发环境比较特殊,没有一个现成的集成开发环境,需要自己一步一步的搭建开发环境,开发环境的搭建的过程十分复杂,而且如果没有这个开发环境本次课题就无法进行.因此,在进行设计时,必须要进行开发环境的搭建. 3.1  虚拟机安装和系统安装 在PC机上安装VMware workstation 10.0虚拟机,将虚拟网络改为桥接模式,在虚拟机中安装Ubuntu12.04的系统,然后安装VM-tools. 在windows下面的创建共享目录G:/share,实现window

医用物资智能存储柜医院药品智能柜控制系统定制设计

医用物资智能存储柜 医院药品智能柜 智能柜定制设计  智能柜远程监控  智能柜智能报警 医用物资智能存储柜医院药品智能柜控制系统是在智能柜控制系统领域多年定制设计研发中的延伸设计方向,总结和归纳了以前产品的优缺点和用户体验后优化完善的产品. 一.医用物资智能存储柜医院药品智能柜设计背景 医用物质和耗材关系到患者的生命安全,物资和耗材的规范化.信息化管理管理在临床护理中起着举足轻重的作用. 医用物资存储柜,医用耗材存储柜,医用药品存储柜的智能控制板系统功能包括:嵌入式处理系统:人机交互显示系统:指

基于51单片机的温度控制系统毕设

分享一下单片机毕设课程计参考资料33个,献给大四的朋友,毕业设计就不用愁了,如果有什么不懂的地方可以加群大家一起交流:813238832资料下载的地址:https://bbs.usoftchina.com/thread-208012-1-1.html 1.CDMA通信系统中的接入信道部分进行仿真与分析2.USB接口设计3.毕业设计(论文)OFDM通信系统基带数据4.电气工程系毕业设计开题报告5.电信运营商收入保障系统设计与实现6.基于51单片机的16×16点阵(滚动显示)7.基于51单片机的LE