极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19712|回复: 8

怎么用三个按钮控制灯泡的亮灭?

[复制链接]
发表于 2012-9-27 17:56:49 | 显示全部楼层 |阅读模式
本帖最后由 acdc0616 于 2012-9-28 17:38 编辑

       请教各位老师个问题。
    要求:按钮1+按钮2=灯泡亮  按钮3=灯泡灭
    当按下按钮1后松开(不再按下),在按下按钮2后灯亮,松开按钮2灯灭,在按下灯亮,在松开灯灭~~~~~。
    按下按钮3灯灭,按钮1复位。
    如果单独按下按钮2灯不启动。
    相当于按钮1是自锁,按钮2是点动,我只会PLC编程,不会C语言编程,在PLC内这个程序比较简单,在C语言中我一点不会,希望各位老师能指导一下。
回复

使用道具 举报

发表于 2012-9-27 21:40:23 | 显示全部楼层
用两条if就可以搞定了~
回复 支持 反对

使用道具 举报

发表于 2012-9-28 11:43:16 | 显示全部楼层
int num;
num=0;
void loop(){
    if(按钮1按下 or 按钮2按下){
        num=num+1;
    }

    if(num/2=int(num/2){
        灯,低电平输出;
    }else{
        灯,高电平输出;
    }

    if(num=10000){
         num=0;                       //要是没有这个num>30000+时,就会出错。
    }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-28 14:52:18 | 显示全部楼层
maojidan 发表于 2012-9-27 21:40
用两条if就可以搞定了~

老师,之前说的问题不太准确,我修改了一下,在帮我看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-28 14:53:08 | 显示全部楼层
bacon6581 发表于 2012-9-28 11:43
int num;
num=0;
void loop(){

老师,之前说的问题不太准确,我修改了一下,在帮我看看。
回复 支持 反对

使用道具 举报

发表于 2012-9-28 16:36:42 | 显示全部楼层

//三个按键控制一个LED灯;
int key_slock = 5; //按键1输入端;
int key_led = 6;  //按键2输入端;
int key_reset = 7;  //按键3输入端;
int led = 8;  //接led灯输入;
boolean rst_n = false; //上电复位;
boolean led_state = false; //led灯的状态控制,初始化为灭;
void setup()
{
  pinMode(key_slock,INPUT);  //初始化,定义各端口属性;
  pinMode(key_led,INPUT);
  pinMode(key_reset,INPUT);
  pinMode(led,OUTPUT);
}
boolean key_rst_n()
{
  if(digitalRead(key_reset) == LOW)  //检测按键3是否有按下,有则使按键1复位,此时按键2失去作用;
  {
    delay(20);
    if(digitalRead(key_reset) == LOW)
    {
      rst_n = false;  //复位;
    }
    while(digitalRead(key_reset) == LOW);
  }
    if(digitalRead(key_slock) == LOW)    //按键1按下,此时按键2功能有效;
  {
    delay(20);
    if(digitalRead(key_slock) == LOW)
    {
      rst_n = true;  //重新启动;
    }
    while(digitalRead(key_slock) == LOW);
  }
  return rst_n;
}
boolean key_ledon()
{
   if(digitalRead(key_led) == LOW)  //按键2控制灯的亮灭;
  {
    delay(20);
    if(digitalRead(key_led) == LOW)
    {
      led_state = true;  //按键有按下,点亮led;
      return led_state;
    }
    while(digitalRead(key_led) == LOW);  //等待按键松开;
    delay(20);    //后延消抖;
    led_state = false;  //按键松开后,熄灭led灯;
  }
  return led_state;
}
void loop()
{
  if(key_rst_n())  //调用key_scan1(),判断系统状态;
  {
    digitalWrite(led,key_ledon());  //输出led的状态;
  }
}
不知道是不是你要的结果

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 热心回答,坐等测试

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2012-9-28 17:23:32 | 显示全部楼层


如果不需要上位机监控的话
买个继电器就好了,也不需要PLC和Arduino的。

我也是做PLC的,你要知道很多设备是不需要PLC也跑的转的,只要合适就好。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-28 17:36:55 | 显示全部楼层
Tim 发表于 2012-9-28 16:36
//三个按键控制一个LED灯;
int key_slock = 5; //按键1输入端;
int key_led = 6;  //按键2输入端;

非常感谢 我测试了 完全是我想要的结果。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-28 17:49:53 | 显示全部楼层
幻生幻灭 发表于 2012-9-28 17:23
如果不需要上位机监控的话
买个继电器就好了,也不需要PLC和Arduino的。

    谢谢你,你的图非常正确,我只是想学习学习C语言。
    其实我想做个出门提醒器,当我预设值的条件和屋门打开,两个条件同时满足时,输出语音提示,告诉我类似别忘了带钥匙、手机、关闭天然气之类的话。多预设几个条件开关,都和屋门打开开关条件相加,满足后相应输出不同的语音。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 22:18 , Processed in 0.042965 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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