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

 找回密码
 立即注册
查看: 287|回复: 4

[技术探讨] 旋转编码器长按没反应?

[复制链接]

26

主题

145

帖子

945

积分

高级会员

Rank: 4

积分
945
金钱
800
HASS币
0
发表于 2024-12-30 13:15:24 | 显示全部楼层 |阅读模式
通过8266-01s+旋转编码器做了一个直流调光,想达到长按旋转编码器进行等颜色切换,这个怎么
output:
  - platform: esp8266_pwm
    pin: RX    #D4
    frequency: 3000 Hz
    id: pwm_output
    min_power: 0.05
    max_power: 0.99
    zero_means_zero: true
#    power_supply: power
    

light:
  - platform: monochromatic     
    output: pwm_output          
    name: "多色灯带"          
    id: dimmer               
    default_transition_length: 5s

 
sensor:  
  - platform: rotary_encoder    
    name: "台灯亮度旋钮"                 
    pin_a:
      number: 2
      inverted: True
      mode:
         input: true
         pullup: true

    pin_b:
      number: TX
      inverted: True
      mode:
         input: true
         pullup: true

    resolution: 2            
    min_value: 0                
    max_value: 30          
    publish_initial_value: true  
    id: rotary1 

    on_clockwise:
    - light.dim_relative:
        id: dimmer
        relative_brightness: 5% 
        transition_length: 0.1s
        brightness_limits:
            max_brightness: 100%
    - delay: 0.1s      

    on_anticlockwise:
    - light.dim_relative:
        id: dimmer
        relative_brightness: -5% 
        transition_length: 0.1s
        brightness_limits:
            min_brightness: 10%
    - delay: 0.1s          
                 

#增加一个通断火线的电源开关
#power_supply:
#  - id: power
#    pin:
#      number: GPIO0                    
#      inverted: True                 
#    keep_on_time: 10ms 


#按压旋转编码器开关灯,双击切换颜色,长按不知道怎么搞
binary_sensor:
  - platform: gpio
    pin: 0
    name: "调整颜色"

#长按进行灯光颜色切换
#    on_multi_click:  
#    - timing:
#       - ON for 1s to 3s
#       - OFF for at least 0.1s      
    on_double_click:
      min_length: 50ms
      max_length: 350ms
      then:
        - light.turn_on: 
            id: dimmer
            brightness: 100%
            red: 100%
            green: 100%
            blue: 1.0

    on_press: 
       then:
         - light.toggle:
             id: dimmer

实现呢?麻烦大佬帮忙看看,谢谢啦!
回复

使用道具 举报

26

主题

145

帖子

945

积分

高级会员

Rank: 4

积分
945
金钱
800
HASS币
0
 楼主| 发表于 2024-12-30 13:18:50 | 显示全部楼层
没有多色灯带,暂时用的单色灯来测试的
light:
  - platform: monochromatic     
    output: pwm_output          
    name: "多色灯带"          
    id: dimmer               
    default_transition_length: 5s
回复

使用道具 举报

14

主题

266

帖子

2329

积分

金牌会员

Rank: 6Rank: 6

积分
2329
金钱
2058
HASS币
50
发表于 2024-12-30 20:34:57 | 显示全部楼层
代码里面没看到你关于长按的设置啊
回复

使用道具 举报

26

主题

145

帖子

945

积分

高级会员

Rank: 4

积分
945
金钱
800
HASS币
0
 楼主| 发表于 2024-12-31 10:05:31 | 显示全部楼层
我注释掉了,编译不了book123
回复

使用道具 举报

26

主题

145

帖子

945

积分

高级会员

Rank: 4

积分
945
金钱
800
HASS币
0
 楼主| 发表于 2025-1-6 17:48:58 | 显示全部楼层
已经解决了,谢谢!

#先增加一个pwm控制器
output:
  - platform: esp8266_pwm               
    pin: GPIO12                          
    id: pwm_output_col                      
    frequency: 3000 Hz                  
    power_supply: power                 

  - platform: esp8266_pwm               
    pin: GPIO13                          
    id: pwm_output_bri                      
    frequency: 3000 Hz                  
    power_supply: power                  


light:
#冷暖灯
 - platform: cwww
   name: "测试冷暖灯"
   cold_white: pwm_output_col
   warm_white: pwm_output_bri
   default_transition_length: 5s
   id: dimmer
   icon: "mdi:lightbulb-on-outline"
   cold_white_color_temperature: 6536 K
   warm_white_color_temperature: 2000 K
   constant_brightness: true    

#长按调调颜色,单击开关灯
globals:
 - id: my_global_int
   type: float
   restore_value: no
   initial_value: '0'
   
 - id: my_global_inta
   type: double
   restore_value: no
   initial_value: '150'    

 - id: my_global_intc
   type: float
   restore_value: no
   initial_value: '2'  

binary_sensor:
  - platform: gpio
    name: "调试"
    pin: 
      number: 5
      inverted: True
      mode: INPUT_PULLUP
    internal: true       
    id: my_binary_sensor
    on_press:
      then:
       - while:
           condition:
            - binary_sensor.is_on: my_binary_sensor
           then:
           - while:
               condition:
                - binary_sensor.is_on: my_binary_sensor
                - lambda: |-
                            return (id(my_global_inta) >= 150) && (id(my_global_inta) < 500);
               then:
               - light.turn_on:
                  id: dimmer
                  transition_length: 0.1s
                  color_temperature: !lambda |-
                          id(my_global_inta) += 5;
                          return id(my_global_inta);
               - delay: 0.1s    
           - while:
               condition:
                - binary_sensor.is_on: my_binary_sensor
                - lambda: |-
                            return (id(my_global_inta) > 150) && (id(my_global_inta) <= 500);
               then:
               - light.turn_on:
                  id: dimmer
                  transition_length: 0.1s
                  color_temperature: !lambda |-
                          id(my_global_inta) -= 5;
                          return id(my_global_inta);
               - delay: 0.1s
    on_click: 
      then:
        light.toggle: dimmer

            
#旋转调整亮度
sensor:  
  - platform: rotary_encoder    
    name: "亮度旋钮"      
#    pin_a: 2                  
    pin_a:
      number: RX
      inverted: True
      mode:
         input: true
         pullup: true


#    pin_b: TX                   
    pin_b:
      number: TX
      inverted: True
      mode:
         input: true
         pullup: true

    resolution: 2            
    min_value: 0                
    max_value: 30          
    publish_initial_value: true    
    id: rotary1 

    on_clockwise:

    - light.dim_relative:
        id: dimmer
        relative_brightness: 5% 
        transition_length: 0.1s
        brightness_limits:
            max_brightness: 100%
    - delay: 0.1s      

    on_anticlockwise:
    - light.dim_relative:
        id: dimmer
        relative_brightness: -5% 
        transition_length: 0.1s
        brightness_limits:
            min_brightness: 10%
    - delay: 0.1s          

         
         
#增加一个通断继电器的电源开关
power_supply:
  - id: power
    pin:
      number: GPIO4                    
      inverted: False                  
    keep_on_time: 10ms    


想问问,如果用8266+旋转编码器做成无线控制的,不知道可以实现不?esphome 调用homeassistant中的灯好像不行,只有switch,郁闷!
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-3-6 21:34 , Processed in 0.163926 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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