查看: 1949|回复: 0

[原创] 【 钛极小龟】触摸开关or声控开关

[复制链接]
  • TA的每日心情
    奋斗
    2023-7-8 16:17
  • 签到天数: 971 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2018-11-26 16:52:05 | 显示全部楼层 |阅读模式
    分享到:
    代码如下:
    1. import java.io.IOException;

    2. import tijos.framework.devicecenter.TiADC;
    3. import tijos.framework.devicecenter.TiGPIO;
    4. import tijos.framework.devicecenter.TiI2CMaster;
    5. import tijos.framework.sensor.button.ITiButtonEventListener;
    6. import tijos.framework.sensor.button.TiButton;
    7. import tijos.framework.transducer.oled.TiOLED_UG2864;
    8. import tijos.framework.transducer.relay.TiRelay1CH;
    9. import tijos.framework.util.Delay;

    10. public class TouchLight {

    11.         public static void main(String[] args) {
    12.                 // TODO Auto-generated method stub
    13.                 try {
    14.                         // GPIO资源分配,GPIO0的PIN2和PIN4脚
    15.                         TiGPIO gpio0 = TiGPIO.open(0,2,4);
    16.                         // GPIO资源分配,GPIO0的PIN4脚
    17.                         TiI2CMaster i2cm0 = TiI2CMaster.open(0);
    18.                         // I2C主机总线资源与屏幕对象绑定,屏幕地址:0x3C
    19.                         TiOLED_UG2864 oled = new TiOLED_UG2864(i2cm0,0x3c);
    20.                         // 屏幕开启并清屏
    21.                         oled.turnOn();
    22.                         oled.clear();
    23.                         oled.print(0, 0, "ControlLight");
    24.                        
    25.                         // GPIO总线资源与继电器对象绑定
    26.                         TiRelay1CH relay = new TiRelay1CH(gpio0,2);
    27.                         // GPIO总线资源与触摸按钮对象绑定,触发电平:高电平
    28.                         TiButton touch = new TiButton(gpio0,4,true);
    29.                         // 创建触摸按钮事件监听者
    30.                         TouchListener lc = new TouchListener();
    31.                         // 设置触摸按钮事件监听者
    32.                         touch.setEventListener(lc);
    33.                        
    34.                         // ADC资源分配,ADC0的CH0通道
    35.                         TiADC adc0 = TiADC.open(0, 0);
    36.                         // 设置ADC参考电压1.0V,外部2倍分压
    37.                         adc0.setRefVoltageValue(1.0, 2);
    38.                         // 定义采集电压比较阈值:目前为15.0毫伏,需要根据实际情况调整。
    39.                         double threshold = 30.0;
    40.                         double voiceValue = 0;
    41.                         // 循环检测
    42.                         while(true) {
    43.                                 // 检测到按钮按下
    44.                                 if(lc.isPressed()) {
    45.                                         // 打开继电器
    46.                                         relay.turnOn();
    47.                                         oled.print(2, 0, "Open switch");
    48.                                         System.out.println("Touch Preass Open Switch ");
    49.                                         // 延时10秒
    50.                                         Delay.msDelay(10*1000);
    51.                                         System.out.println("Time Out ");
    52.                                 }else if(voiceValue>threshold ){
    53.                                         // 打开继电器
    54.                                         relay.turnOn();
    55.                                         oled.print(2, 0, "Open switch");
    56.                                         System.out.println("Voice Open Switch "+voiceValue);
    57.                                         // 延时10秒
    58.                                         Delay.msDelay(10*1000);
    59.                                         System.out.println("Time Out ");
    60.                                 }else{
    61.                                         // 关闭继电器
    62.                                         relay.turnOff();
    63.                                         oled.print(2, 0, "Close switch ");
    64.                                        
    65.                                 }
    66.                                 // 检测间隔100ms
    67.                                 voiceValue = adc0.getVoltageValue(0)*1000;
    68.                                 Delay.msDelay(100);
    69.                         }
    70.                 }catch(IOException ie) {
    71.                         ie.printStackTrace();
    72.                 }
    73.         }

    74. }


    75. class TouchListener implements ITiButtonEventListener{
    76.         boolean _isOnPressed = false;

    77.         @Override
    78.         public void onPressed(TiButton button) {
    79.                 // TODO Auto-generated method stub
    80.                 synchronized(this) {
    81.                         // 置按下标志
    82.                         this._isOnPressed = true;
    83.                 }
    84.                
    85.         }

    86.         @Override
    87.         public void onReleased(TiButton button) {
    88.                 // TODO Auto-generated method stub
    89.                 synchronized(this) {
    90.                         // 置释放标志
    91.                         this._isOnPressed = false;
    92.                 }
    93.         }
    94.        
    95.         public boolean isPressed() {
    96.                 boolean pressed = false;
    97.                 synchronized(this) {
    98.                         // 返回置按下标志
    99.                         pressed = this._isOnPressed;
    100.                 }
    101.                 return pressed;
    102.         }
    103.        
    104.        
    105. }
    复制代码


    TiRelay1CH类源码 TiRelay1CH.rar (689 Bytes, 下载次数: 0, 售价: 1 与非币)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 16:33 , Processed in 0.120168 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.