设置蓝牙定时任务,智能窗帘定时任务 使用位移和异或

近段时间,各地的线下智能家居体验门店、智慧生活体验区热度极高。这些设置,将传统的智能家居商品交易场景转化为商品应用场景,极大地提升了消费者的购物体验和购买意愿,让消费者开始深入了解了智能家居的优势和自己的需求,也让智能家居营销变得更精准、高效。那么,智能家居好在哪儿,智能家居场景又是如何打动消费者的?

安装智能家居前,我们每天早上往往会被闹钟吵醒,按下闹钟后,脑袋依然困得不行,照照镜子,因为受刺激惊醒,眼睛还有些发红,之后一整天都感觉很疲惫。

有了智能家居后。清晨,窗帘与窗户自动拉开,阳光温暖而洁净,透过窗户斜斜地射进来,淡淡的花香飘进房间,柔和的音乐也定时响起,声音逐渐增大。阳光、花香、音乐,你感觉到了这一切,睡意自然而然地被驱散,你睁开双眼,新的一天开始了。 

每天的7点钟窗帘打开 窗户打开,这一切是怎么实现的呢?

 

 

手机上界面如下   默认全选

国外的习惯  周日  周一  周二  周三  周四  周五  周六 排序,给每一个按钮都定义tag ,tag依次等于0 1 2 3 4 5 6 如上图红色字体。

手机和低功耗蓝牙通信只能传输byte类型。解决方案:使用二进制,一个字节占八位,存放7个数字足够了。

选中为1  没有选中为0.如下图

这样得到的二进制(比如1001011)完全符合蓝牙传输字节标准。   有的攻城狮喜欢“0”+“1”+“0”+“1”“0”+“1”“0”组成一个字符串“1001011”,然后二进制字符串转成byte。比如byte   a = string(“1001011”,2)  ,当然把二进制弄成字符串转byte 也可以完成。

还有另外一种就是先位移,然后异或 。

假设你选择周五 周六

周日 周一  周二  周三 周四  周五  周六

0       0       0       0       0      1        1 

点击每个按钮都要执行这个方法。选择周五执行一次  选择周六执行一次

    var   weekDayInt:Int16 = 0x7f//默认全选
 func buttonClick(button:UIButton) -> Void {
        weekDayInt ^= 1 << button.tag;
        var  i = ischeck(row: button.tag)
        if (i == 0){
            button.backgroundColor = UIColor.darkGray
        }else{
            button.backgroundColor = UIColor.init(red: 30.0/255.0, green: 144.0/255.0, blue: 255.0/255.0, alpha: 1.0);
        }
    }
    func ischeck(row:Int) -> Int16 {//判断是否选中  如果选中按钮的背景颜色要变。
        return  weekDayInt & 1 << row;
    }

 

位移 和 ^(异或运算),下面讲讲。 

二进制   :            0000 1001  

左移(<<)2位     0010  0100

 异或运算的作用

  参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。

  即:

  0^0 = 0,

  1^0 = 1,

  0^1 = 1,

  1^1 = 0

  按位异或的3个特点:

  (1) 0^0=0,0^1=1 0异或任何数=任何数

  (2) 1^0=1,1^1=0 1异或任何数-任何数取反

  (3) 任何数异或自己=把自己置0

 还有几个方法

//字符串转byte
   static func USweekToInt(week:String) -> Int16 {
        var  weekrepeat:Int16 = 0;
        if(week.count > 0){
            var weekdays = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
            var days = week.split(separator: ",");
            for day in days {
                var  i = 0;
                for weekday in weekdays {
                    var daystring = String(day)
                    let characterSet = CharacterSet(charactersIn: " ")
                    daystring = daystring.trimmingCharacters(in: characterSet)
                    if(daystring == weekday){
                        weekrepeat |= 1 << i;
                        break;
                    }
                    i += 1 ;
                }
            }
        }
        return weekrepeat;
    }
    static func UintToXingQi(weekint:Int16) -> String {
       
        if(weekint == 0x7F){
            return "每天";
        }
        else if(weekint == 0x3E){
            return "工作日";
        }
        else if(weekint == 0x41){
            return "周末";
        }
        var string = "";
        
        var dayStrings =  ["周六", "周一", "周二", "周三", "周四", "周五", "周日"];
        
        var idx:Int = Calendar.current.firstWeekday - 1;
        var maxa = idx + 7;
        while idx < maxa {
            var index = idx%8;
            var bb = (weekint >> index) & 1;
            if(bb > 0){
                string += dayStrings[index] + " ";
            }
            idx += 1;
        }
        return string;
    }
    //byte转星期字符串
    static func IntToStringsun(weekday:Int16) -> String {
        var days = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
        var string = "";
        var i = 0;
        while i < 7 {
            var  temp = weekday >> i & 1
            if(temp > 0){
                if(string.count > 0){
                    string += ",";
                }
                string += days[i];
            }
            i += 1;
        }
        return string;
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值