acdc0616 发表于 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语言中我一点不会,希望各位老师能指导一下。

maojidan 发表于 2012-9-27 21:40:23

用两条if就可以搞定了~

bacon6581 发表于 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+时,就会出错。
    }
}

acdc0616 发表于 2012-9-28 14:52:18

maojidan 发表于 2012-9-27 21:40 static/image/common/back.gif
用两条if就可以搞定了~

老师,之前说的问题不太准确,我修改了一下,在帮我看看。

acdc0616 发表于 2012-9-28 14:53:08

bacon6581 发表于 2012-9-28 11:43 static/image/common/back.gif
int num;
num=0;
void loop(){


老师,之前说的问题不太准确,我修改了一下,在帮我看看。

Tim 发表于 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的状态;
}
}
不知道是不是你要的结果

幻生幻灭 发表于 2012-9-28 17:23:32



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

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

acdc0616 发表于 2012-9-28 17:36:55

Tim 发表于 2012-9-28 16:36 static/image/common/back.gif
//三个按键控制一个LED灯;
int key_slock = 5; //按键1输入端;
int key_led = 6;//按键2输入端;


非常感谢 我测试了 完全是我想要的结果。

acdc0616 发表于 2012-9-28 17:49:53

幻生幻灭 发表于 2012-9-28 17:23 static/image/common/back.gif
如果不需要上位机监控的话
买个继电器就好了,也不需要PLC和Arduino的。



    谢谢你,你的图非常正确,我只是想学习学习C语言。
    其实我想做个出门提醒器,当我预设值的条件和屋门打开,两个条件同时满足时,输出语音提示,告诉我类似别忘了带钥匙、手机、关闭天然气之类的话。多预设几个条件开关,都和屋门打开开关条件相加,满足后相应输出不同的语音。
页: [1]
查看完整版本: 怎么用三个按钮控制灯泡的亮灭?