『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: magic900321

终于蓝牙版本人数计数开发完成

[复制链接]

18

主题

267

帖子

2644

积分

论坛技术达人

积分
2644
金钱
2337
HASS币
190
 楼主| 发表于 2020-10-5 21:13:50 | 显示全部楼层
jyz_0501 发表于 2020-10-5 11:14
直接做成86面板 装在进门墙上不行吗

可以呀。
但是已经装修好的房子,再装线盒比较麻烦。
感谢之前Sugar他试了用86盒子,加亚克力盖板试坑,发现传感器变得瞎了。
一定得切好孔给VL53通光,或是用原装的光学盖片。
回复

使用道具 举报

0

主题

20

帖子

126

积分

注册会员

Rank: 2

积分
126
金钱
106
HASS币
0
发表于 2020-10-10 11:08:14 | 显示全部楼层
magic900321 发表于 2020-10-5 21:13
可以呀。
但是已经装修好的房子,再装线盒比较麻烦。
感谢之前Sugar他试了用86盒子,加亚克力盖板试坑,发 ...

不是亚克力 是玻璃盖板 但是感觉亚克力也会瞎
回复

使用道具 举报

1

主题

16

帖子

283

积分

中级会员

Rank: 3Rank: 3

积分
283
金钱
267
HASS币
0
发表于 2020-10-20 20:55:19 | 显示全部楼层
窗寒轻雨 发表于 2020-8-12 19:13
我esp12e纯手工焊了一个,8266没有pcnt库,所以用变量重写了计数这块,实际测试还算准确,小孩子检测不到 ...

厉害了大神,能否分享一下计数代码?我也是用8266.没有pcnt
回复

使用道具 举报

26

主题

304

帖子

1670

积分

金牌会员

Rank: 6Rank: 6

积分
1670
金钱
1366
HASS币
0
发表于 2021-3-14 20:29:22 | 显示全部楼层
thang009 发表于 2020-10-20 20:55
厉害了大神,能否分享一下计数代码?我也是用8266.没有pcnt

void read_dual() {
  lox1.rangingTest(&measure1, false); // pass in 'true' to get debug data printout! 放到打印反而工作的更久
  lox2.rangingTest(&measure2, false); // pass in 'true' to get debug data printout!
  //  读取距离判断有无人

  if (measure1.RangeStatus != 4) {    // if not out of range
    int distance_A = measure1.RangeMilliMeter;
    //    Serial.print("A_status:");Serial.print(measure1.RangeStatus);
    //    Serial.print("    ");Serial.print("A:");Serial.println(distance_A);
    if (distance_A <= Trigger_Distance && distance_A != 0) {
      motion_a = 1;
    }
  }
  else {
    motion_a = 0;
  }


  if (measure2.RangeStatus != 4) {    // if not out of range
    int distance_B = measure2.RangeMilliMeter;
    //    Serial.print("B_status:");Serial.print(measure2.RangeStatus);
    //    Serial.print("    ");Serial.print("B:");Serial.println(distance_B);
    if (distance_B <= Trigger_Distance && distance_B != 0) {
      motion_b = 1;
    }
  }
  else {
    motion_b = 0;
  }

  //判断触发方向 // 记录触发并根据序列判断人数
  if (motion_a == 0) {
    flag_a = 1;
  }
  if (motion_a == 1 && flag_a == 1) {//0变1
    up_a = true;flag_a = 0;
    Serial.print(millis());Serial.println(":a is up");
    maichong_buff += "A1";jilu += "A1";
//    Serial.print(millis());Serial.println(jilu); //调试用
  }

  if (motion_b == 0) {
    flag_b = 1;
  }
  if (motion_b == 1 && flag_b == 1) {
    up_b = true;flag_b = 0;
    Serial.print(millis()); Serial.println(":b is up");
    maichong_buff += "B1";jilu += "B1";
//    Serial.print(millis());Serial.println(jilu);//调试用
  }

  if (motion_a == 1) {
    flag_c = 1;
  }
  if (motion_a == 0 && flag_c == 1) {
    down_a = true;flag_c = 0;
    Serial.print(millis());Serial.println(":a is down");
    maichong_buff += "A0";jilu += "A0";
//    Serial.print(millis());Serial.println(jilu);//调试用
    String a = jilu.substring(jilu.length() - 4);
    String b = jilu.substring(0, 2);
    if (a == "B0A0" && b == "B1") { //人出来了
      if (renshu > 0) {
        renshu--;
      }
      action();                         //显示,推送,beep等
      jilu = ""; maichong_buff = "";   //人出来后需清空序列,以供下次判断      
    }
    //    if((a=="B0A0"||a=="A1A0")&&b=="A1") {jilu="";}
    if (a == "B0A0" && b == "A1") { //人又退回去了没进去,可能在传感器下停留或来回移动一段时间
      jilu = ""; maichong_buff = "";                   //只清空记录,不清空buff,。
    }
    if (a == "A1A0" && jilu.length() == 4) { // 人又退回去了没进去,或者是干扰,需单独判断
      jilu = "";
    }
  }

  if (motion_b == 1) {
    flag_d = 1;
  }
  if (motion_b == 0 && flag_d == 1) {//低电平,需要对是否进入情况进行判断
    down_b = true;flag_d = 0;
    Serial.print(millis());Serial.println(":b is down");
    maichong_buff += "B0";jilu += "B0";
//    Serial.print(millis());Serial.println(jilu);//调试用
    String a = jilu.substring(jilu.length() - 4);
    String b = jilu.substring(0, 2);
    if (a == "A0B0" && b == "A1") { //人进去了
      renshu++;
      action();
      jilu = ""; maichong_buff = "";
    }
    //    if((a=="A0B0"||a=="B1B0")&&b=="B1") {jilu="";}
    if (a == "A0B0" && b == "B1") { //人退回去了没出来,可能在传感器下停留或来回移动一段时间
      jilu = ""; maichong_buff = "";
    }
    if (a == "B1B0" && jilu.length() == 4) { //人没出来,或者是干扰
      jilu = "";
    }                                      //其他情况则继续记录
  }

  down_a = false;                           //一次循环完后把状态值恢复,以免影响后边
  down_b = false;
  up_a = false;
  up_b = false;

}

核心代码给你,其他的你自己补把
回复

使用道具 举报

175

主题

2956

帖子

7555

积分

超级版主

我就是六神

Rank: 8Rank: 8

积分
7555
金钱
4574
HASS币
398

活跃会员教程狂人灌水之王

QQ
发表于 2022-3-11 19:29:29 | 显示全部楼层
18650感觉是可以的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-2 12:07 , Processed in 0.165145 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表