“第三课--按钮控制的LED开关实验/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
调试
Pkj讨论 | 贡献
调试
第46行: 第46行:
  
 
*'''isButtonPressed():'''
 
*'''isButtonPressed():'''
 
 
**如果当前按下的按钮,等到按钮不再被按下,则返回true。 否则,返回false。按键引脚必须有它的模式设置为输入。
 
**如果当前按下的按钮,等到按钮不再被按下,则返回true。 否则,返回false。按键引脚必须有它的模式设置为输入。
  
第75行: 第74行:
 
语法说明:
 
语法说明:
 
*'''digitalRead(Pin):'''
 
*'''digitalRead(Pin):'''
 
 
**从一个数字引脚上读取值。该引脚必须有它的模式设置为输入。
 
**从一个数字引脚上读取值。该引脚必须有它的模式设置为输入。
 
 
**从程序中我们可以看到如果读取到的值为高则点亮led灯,反之则熄灭。
 
**从程序中我们可以看到如果读取到的值为高则点亮led灯,反之则熄灭。
  

2014年7月18日 (五) 07:59的版本

目的

前两个实验介绍了如何用软件直接控制led灯的亮灭。如果我们增加一个按键,通过按键来控制led的亮灭,就能够达到硬件与软件的结合。前面实际上是Microduino-CoreSTM32的I/O口作为输出去控制led,增加按键如何去监测按键输入的信号呢?今天以按键为例讲讲Microduino-CoreSTM32如何作为输入使用。

设备

Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。

  • 其他硬件设备
    • 面包板跳线 一盒
    • 面包板 一块
    • LED发光二极管 一个
    • 220欧姆电阻 一个
    • 按键 一个
    • USB数据连接线 一根

原理图

我们将采用下拉电阻,也就是监测按键输入的I/O口接个电阻到GND,再通过按键接到VCC,这样没按下时为低“0”,按下为高“1”。这样就可以通过判断该引脚的高低电平来控制led灯的亮与灭。 同时如果上拉的话就接个电阻到VCC。举一反三,大家自己分析分析。

调试

  • 切换指示灯

单击菜单File -> Examples ->Digital ->Button:

void setup() {
  // Initialize the built-in LED pin as an output:
  pinMode(BOARD_LED_PIN, OUTPUT);
  // Initialize the built-in button (labeled BUT) as an input:
  pinMode(BOARD_BUTTON_PIN, INPUT);
}

void loop() {
    // Check if the button is pressed.
    if (isButtonPressed()) {
        // If so, turn the LED from on to off, or from off to on:
        toggleLED();
    }
}

程序说明: 首先定义了Microduino-CoreSTM32板子上的led灯的引脚为输出状态,按钮为输入状态。

  • isButtonPressed():
    • 如果当前按下的按钮,等到按钮不再被按下,则返回true。 否则,返回false。按键引脚必须有它的模式设置为输入。

按下按钮再松开按钮,返回true,则执行toggleLED()函数,切换引脚值。如果引脚为高电平,将其设置为低电平。如果是低,将它设置为高。这样就可实现每按一次按钮,led灯指示翻转一次。

明白程序后,点击Upload,就可把程序上传到板卡上。结果每按下一次按键led灯显示翻转一次。

  • led显示按键值

按原理图接线,将程序拷贝到编译器,直接下载。

int buttonPin = 2;     // 定义按键输入引脚
int ledPin =  13;     //定义led引脚
int buttonState = 0;        //初始化按键值
void setup() {
  pinMode(ledPin, OUTPUT);    //设置led引脚为输出状态   
  pinMode(buttonPin, INPUT); //设置按键引脚为输入下拉状态    
}
void loop(){
  buttonState = digitalRead(buttonPin);//从指定的数字引脚读取数值,是高还是低。
  if (buttonState == HIGH) {     
    digitalWrite(ledPin, HIGH); //如果按键信号是高,则led点亮(led接法阳极接控制脚,阴极接GND)
  } 
  else {
    digitalWrite(ledPin, LOW); //否则熄灭
  }
}

语法说明:

  • digitalRead(Pin):
    • 从一个数字引脚上读取值。该引脚必须有它的模式设置为输入。
    • 从程序中我们可以看到如果读取到的值为高则点亮led灯,反之则熄灭。

我们换一种方法,将语句“pinMode(buttonPin, INPUT);”改为“pinMode(buttonPin, INPUT_PULLDOWN);”

  • 说明:INPUT_PULLUP(内部上拉)或INPUT_PULLDOWN(内部下拉)。芯片内的通过电阻将该引脚接到3.3V或者GND,这样,按键就可以不用外界电阻,比较方便,简单。能达到同样的效果。

视频