请高手给我的程序号号脉。-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3827|回复: 5

请高手给我的程序号号脉。

[复制链接]
发表于 2013-1-30 12:25 | 显示全部楼层 |阅读模式
程序功能是用一个按钮实现led的开关以及亮度调节。
具体功能阐述如下:短按按钮实现led的开关。按住按钮可以实现灯光由暗到亮,再由亮到暗。
存在问题:只能实现由暗到亮的功能。
#define LED 9
#define BUTTON 7
int val=0;
unsigned int i=0;
int old_val=0;
int state=0;
int brightness=5;
unsigned long startTime;
void setup(){
    pinMode(LED,OUTPUT);
    pinMode(BUTTON,INPUT);
  }
void loop(){
  val=digitalRead(BUTTON);
  if ((val==HIGH) && (old_val==LOW)) {
         state=1-state;
         startTime=millis();
         delay(10);
      }
  if ((val==HIGH) && (old_val==HIGH)){
       if ((state==1) &&(millis()-startTime>1000)){
           brightness+=5;
           delay(20);
         if (brightness>255){
           for(i=255;i>=0;i--){
               brightness--;
               delay(20);
               }
         }
       }
     }
      old_val=val;
  if (state==1) {
      analogWrite(LED,brightness);
    }else{
      analogWrite(LED,0);
    }

  }
发表于 2013-1-30 14:56 | 显示全部楼层
不需要这么复杂吧
检测案件时候用一个数 比如k++计数按下的时间,直到弹起,判断k的大小
发表于 2013-1-30 15:19 | 显示全部楼层
  if ((val==HIGH) && (old_val==HIGH)){
       if ((state==1) &&(millis()-startTime>1000)){
           brightness+=5;
           delay(20);
         if (brightness>255){
           for(i=255;i>=0;i--){
               brightness--;
               delay(20);
               }
         }
       }
     }
.........................................
感觉这段程序执行完,只有输出一个brightness的数值啊;
该程序里头的每一次循环的brightness--并没有输出,应该把analogWrite(LED,brightness)嵌入到上面的循环体内才行吧。。。
 楼主| 发表于 2013-1-30 15:47 | 显示全部楼层
Kiwi 发表于 2013-1-30 14:56
不需要这么复杂吧
检测案件时候用一个数 比如k++计数按下的时间,直到弹起,判断k的大小 ...

我的思路:计算两个时间的差,看是否大于500ms以确定按钮是否处于按紧状态。
关于你的建议:k++不都是int么?时间似乎没有办法始终等于一个整数吧?
 楼主| 发表于 2013-1-30 15:48 | 显示全部楼层
woiled 发表于 2013-1-30 15:19
if ((val==HIGH) && (old_val==HIGH)){
       if ((state==1) &&(millis()-startTime>1000)){
          ...

增亮的功能是可以实现的,但是就是不明白渐暗不能实现。不知道阁下有没有时间帮我检验一下问题所在。
发表于 2013-1-31 15:45 | 显示全部楼层
bush61 发表于 2013-1-30 15:47
我的思路:计算两个时间的差,看是否大于500ms以确定按钮是否处于按紧状态。
关于你的建议:k++不都是int ...

是这样的 按键函数 每按下之后没放手,程序跑一次 走一卷 k就+1,最后跑了几圈就加几,具体时间和你单片机的程序有关,用的不是固定时间做参考,这个方法比较简单,不需要用到复杂的函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 00:51 , Processed in 0.101961 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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