楼主: 奈何col

按键控制LED实验

  [复制链接]
  • TA的每日心情
    无聊
    2020-1-23 18:36
  • 签到天数: 105 天

    [LV.6]常住居民II

    发表于 2019-6-2 14:45 | 显示全部楼层
    很齐全的算法!不错!
  • TA的每日心情
    奋斗
    2019-8-24 11:04
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2019-6-6 08:03 | 显示全部楼层
    const int buttonPin = 2;

    int buttonPin = 2;

    新手请问这两句的区别是啥?

    为什么第一段代码和第二段代码对按键脚的定义语句相差一个“const”?

    该用户从未签到

    发表于 2019-6-20 22:53 | 显示全部楼层
    oyzy 发表于 2018-9-4 11:23
    刚开始不明白 上拉电阻 下拉电阻,细细咀嚼一下,懂了,为了稳定引脚电平状态,不能让引脚处在悬空状态,所 ...

    为什么电阻接地,而不是正极?

    该用户从未签到

    发表于 2019-6-20 23:06 | 显示全部楼层
    本帖最后由 fjll2008 于 2019-6-20 23:18 编辑

    第一段程序:

    kittenblock中小学创客名师推荐的图形化编程软件

    int buttonState = 0;
    
    void setup() {
        // const int 整形常量 ;设置引脚(2号引脚接开关控制12号引脚的led)
    }
    
    const int buttonPin = 2;
    const int ledPin = 12;
    
    void loop() {
        buttonState = digitalRead(buttonPin);//储存读取到的开关状态值(HIGH/LOW)
        if(buttonState == HIGH){
          digitalWrite(ledPin,HIGH);//点亮led
          delay(3000);
          }
        else{
          digitalWrite(ledPin,LOW);//熄灭led
          }
    }


    第二段程序:

    kittenblock中小学创客名师推荐的图形化编程软件

    
    
      int  buttonPin = 2;
      int ledPin = 13;
     boolean ledState = true;
     boolean buttonState = true;
     
    
    
    
    void setup() {
      pinMode(buttonPin,INPUT_PULLUP);
      pinMode(ledPin,OUTPUT);
    
    }
    void loop()
    {
        while(digitalRead(buttonPin)==HIGH)
      {
        /*if(ledState==true)
        {
          digitalWrite(ledPin,LOW);
          ledState=!ledState; 
          }
          else{
            digitalWrite(ledPin,HIGH);
            ledState=!ledState;
            
            }
    原文*/
            if(ledState==false){
              digitalWrite(ledPin,HIGH);
              ledState=!ledState;}
              else{
                digitalWrite(ledPin,LOW);
                ledState=!ledState;
                }//安自己理解的重新梳理了一遍
            delay(500);
        }{}
      }


    另外在模仿老师的代码时,发现有一点小错误,第21行,while(){}, 下面的if else 要在{}内,不然实验的结果是led 不停闪烁,开关不起作用。
    e7f4145533a7e57f9fd536f068d0370.png

    第一个程序实验视频:
    https://v.youku.com/v_show/id_XNDIzNjExNDA3Mg==.html?spm=a2h0k.11417342.soresults.dposter
    第二段程序实验视频:
    https://v.youku.com/v_show/id_XNDIzNjE3MzMzNg==.html?spm=a2hzp.8244740.0.0
  • TA的每日心情
    奋斗
    2019-6-20 09:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-6-26 16:13 | 显示全部楼层
    本帖最后由 tyxcd278 于 2019-6-26 17:21 编辑

    boolean buttonstate=false;
    boolean ledstate=false;
    int led=11;
    int buttonpin=2;
    void setup() {
    pinMode(led,OUTPUT);
    pinMode(buttonpin,INPUT);
    }

    void loop() {
    while(digitalRead(buttonpin)==LOW){}
    if(ledstate==false)
    {digitalWrite(led,HIGH);
    ledstate!=ledstate;
      }
    else
      {digitalWrite(led,LOW);
        ledstate!=ledstate;
        }
    delay(500);
    }
    楼主有个疑问,我这段代码还是选择继续用下拉电阻构成,但是按照代码执行,按过一次按钮之后就就一直亮了,按钮没作用了,输入pin脚就一直在低点位了?
    已经解决了
    int ledpin=13;
    int buttonpin=2;
    boolean ledstate=false;
    boolean buttonstate=false;
    void setup() {
      Serial.begin(9600);
      pinMode(ledpin,OUTPUT);
      pinMode(buttonpin,INPUT);
    }
    void loop() {
      int buttonpin1=digitalRead(buttonpin);
      Serial.println(buttonpin1);
      delay(500);
      while(digitalRead(buttonpin)==LOW){}
      if(ledstate==false)
      {digitalWrite(ledpin,HIGH);
       ledstate=!ledstate;
      }
       else
       {digitalWrite(ledpin,LOW);
        ledstate=!ledstate;
        }
        delay(500);
    }

  • TA的每日心情
    开心
    2020-2-3 15:50
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2019-7-12 11:17 | 显示全部楼层
    oyzy 发表于 2018-9-4 11:23
    刚开始不明白 上拉电阻 下拉电阻,细细咀嚼一下,懂了,为了稳定引脚电平状态,不能让引脚处在悬空状态,所 ...

    你这句话我也不明白,出了一次以外干扰一下就明白了,问了一下老师傅,说检测点可能是mos场效应管,光手机干扰都能让他检测到高电平。一下就明白上拉和下拉电阻了。现在也看明白你这句话了。

    该用户从未签到

    发表于 2019-7-20 22:22 | 显示全部楼层
    love294710 发表于 2018-4-20 14:38
    代码中的
    ledState=!ledState
    起什么作用?

    ledstate是boolean类型的,这个类型只有两个值,也就是true和false。在这里如果ledstate本来是true,那!ledstate就是false,就可以改变led灯的状态啦

    该用户从未签到

    发表于 2019-7-26 16:16 | 显示全部楼层
    本帖最后由 elizabethv1 于 2019-7-26 16:25 编辑
    love294710 发表于 2018-4-20 20:55
    谢谢解答
    您说这个我知道是取反
    只是不太明白这个ledstate=!ledstate取反在这里有什么意义呢  

    我也是一名初学者,接触Arduino及编程才一周。对于这个取反值一直无法理解,今天下午盯了它3个小时我感觉我想通了,大家分享一下。
    首先我们来看程序的上半部分,里面写到了boolean ledState=false;这个在批注中有写是为了记录接下来程序运行时,你所按键时候,按键返回给状态的存储的地方。这个和之后练习中所涉及到的int counter=0 是一个概念。记录用的。
    在loop程序中while(digitalRead(buttonPin)==HIGH){}
    在按键没有按下时,Arduino读到的就是高电平,所以条件为真,一直在while的空{}中循环,不做任何动作。
    这个if(ledState==true)中的true和else中的false没有先后顺序之分,只是为了给你按键动作时提供一个判断语句
    当你按下按键时,Arduino读到了低电平while判断为假,进而运行下面的if程序,(if程序设定如果ledState为true则给ledPin为低电平)这个设定都随心所欲和上面说到的false,和HIGH和LOW都没有关系。。。
    接上面话题,while判断为假运行了下面的if程序,给ledPin了低电平的同时,这个ledState的反值(也就是false)赋予给了上述boolean中ledState中。当你再次按下按键时Arduino读到了假值,然后就运行了else部分的程序,从来往复循环。简而言之
    按键一次Arduino读到true,那就运行true的程序的同时=!代码将读到的true转换成了false保存到了boolean中去,在你第下次按键时arduino就是读到了boolean中的false,然后就运行了false的程序的同时=!代码将false转换成了true保存到了boolean中去。所以最后要设定个delay(500)毫秒的反应时间好给系统反应保存和运行。

    该用户从未签到

    发表于 2019-7-26 16:41 | 显示全部楼层
    love294710 发表于 2018-4-20 20:55
    谢谢解答
    您说这个我知道是取反
    只是不太明白这个ledstate=!ledstate取反在这里有什么意义呢  

    我也是一名初学者,接触Arduino及编程才一周。对于这个取反值一直无法理解,今天下午盯了它3个小时我感觉我想通了,大家分享一下。
    首先我们来看程序的上半部分,里面写到了boolean ledState=false;这个在批注中有写是为了记录接下来程序运行时,你所按键时候,按键返回给状态的存储的地方。这个和之后练习中所涉及到的int counter=0 是一个概念。记录用的。
    在loop程序中while(digitalRead(buttonPin)==HIGH){}
    在按键没有按下时,Arduino读到的就是高电平,所以条件为真,一直在while的空{}中循环,不做任何动作。
    这个if(ledState==true)中的true和else中的false没有先后顺序之分,只是为了给你按键动作时提供一个判断语句
    当你按下按键时,Arduino读到了低电平while判断为假,进而运行下面的if程序,(if程序设定如果ledState为true则给ledPin为低电平)这个设定都随心所欲和上面说到的false,和HIGH和LOW都没有关系。。。
    接上面话题,while判断为假运行了下面的if程序,给ledPin了低电平的同时,这个ledState的反值(也就是false)赋予给了上述boolean中ledState中。当你再次按下按键时Arduino读到了假值,然后就运行了else部分的程序,从来往复循环。简而言之
    按键一次Arduino读到true,那就运行true的程序的同时=!代码将读到的true转换成了false保存到了boolean中去,在你第下次按键时arduino就是读到了boolean中的false,然后就运行了false的程序的同时=!代码将false转换成了true保存到了boolean中去。所以最后要设定个delay(500)毫秒的反应时间好给系统反应保存和运行。

    该用户从未签到

    发表于 2019-8-21 11:45 | 显示全部楼层
    请问楼主,我的界面打开文件,示例,里面代码程序的注视都是英文怎么办,看起来好费劲,是重新下载中文版还是在哪里能够改语言?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    新手求助,github上一个arduino开源CG重心称的问题
    新手求助,github上一个ar
    在github找到一个开源CG重心称的代码,并按文档说明搭建了硬件环境。发现程序在串口监
    求助为什么下载开发板出错???
    求助为什么下载开发板出错
    网络,网址都没错,为什么下载开发板出错???谢谢
    自制arduino时,usb周围电路搞不懂
    自制arduino时,usb周围电
    最近在画搭载atmega 32u4的arduino 兼容板,参考的arduino micro的设计,但电路知识贫
    关于DS1302.h
    关于DS1302.h
    去年买了个ARDUINO没怎么玩(就是不会玩),然后今天看见了例程中有一个DS1302.h时钟
    小爱控制ws2812,能开灯,调亮度、颜色,就是不能关灯
    小爱控制ws2812,能开灯,
    小爱控制ws2812,能开灯,调亮度、颜色,就是不能关灯,跑的例程不行,改了代码也是不
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表