手把手教你智能硬件开发(五) 开关按钮

第5节 按钮开关

对于硬件的控制,我们常用硬件开关来控制Arduino开发板上其他外接硬件的通断逻辑。比如,一盏LED灯,硬件上最好有个开关,按一下开关,就让LED灯亮,再按一下开关,就让LED灯关闭。

开关的外形有多种式样,四根引脚、三根引脚。不论是三引脚还是四引脚,原理都是相同的。如果选择四引脚开关,开发者就得自己搭建一个简单的电路;三引脚的按钮开关是对四引脚开关的集成封装,简化了外围电路的设计,很适合对硬件缺乏深入认识的软件开发者。

这里我们选用使用最方便的三引脚按钮开关。我们跟我学Arduino开发提供的按钮开关,就是这样的三引脚开关。

5.1 硬件连接

三引脚按钮开关的引脚对应如下,

含义引脚位置连接开发板引脚
控制S<–>D10
VCC电源<–>5V
接地GND<–>GND

在实际的使用当中,按钮开关经常连接到扩展板上。例如这里将按钮开关连接到10组扩展口上,

含义引脚位置连接扩展板引脚
控制S<–>10组S
VCC电源<–>10组V
接地GND<–>10组G

5.2 控制代码

首先我们初始化引脚,按钮使用的是D10,就要初始化D10为输入引脚,

int BUTTON_PIN = 10;

void setup() {
    //D10是作为输入使用的引脚
    pinMode(BUTTON_PIN, INPUT);
    Serial.begin(9600);
}

每按一次按钮,都会触发按下松开两个响应,也就是说,按钮按下后会自动弹起,不会保持被按下的状态,

  1. 当按下开关按钮的时候,S引脚会变成LOW电平;
  2. 当松开开关按钮的时候,S引脚会变成HIGH电平;

所以当出现了这两个变化的时候,才能判断按钮被按下并抬起了一次。

采用digitalRead()读取按钮对应引脚的电平,判断它当前是否被按下,

//初始情况下,按钮是没有按下的,所以是HIGH电平
int oldButtonState = HIGH;

void loop() {

    //读取开关引脚的电平,判断当前是否被按下
    int buttonState = digitalRead(BUTTON_PIN);

    //当前被按下(LOW),之前没有被按下(HIGH),
    //说明使用者按下了按钮
    if(buttonState == LOW && oldButtonState == HIGH)
    {
        Serial.println("button press down");
        oldButtonState = buttonState;
    }

    //当前没有被按下(HIGH),之前被按下(LOW),
    //说明使用者松开了按钮
    if(buttonState == HIGH && oldButtonState == LOW)
    {
        Serial.println("button press up");
        oldButtonState = buttonState;
    }
}

5.3 查看结果

把以上代码部署到设备上,打开串口调试窗口,按下并松开开关,可以看到类似如下输出信息,


/*******************************************************************/

本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店跟我学Arduino编程中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。

最后再次感谢各位读者对安豆的支持,谢谢:)

/*******************************************************************/

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现Arduino按钮控制四轮小车原地转圈,可以加入按钮的输入和判断程序,根据按钮是否按下来控制小车转向。具体步骤如下: 1. 设置四个电机的引脚和按钮引脚,可以使用PWM引脚控制电机的转速,使用数字引脚接入按钮信号。 2. 在setup函数中,设置按钮引脚为输入模式。 3. 在loop函数中,通过digitalRead函数获取按钮状态,判断按钮是否按下。 4. 如果按钮按下,控制四个电机的转速和方向,实现小车原地转圈。 下面是一个简单的示例代码,可以让Arduino按钮控制四轮小车原地转圈: ``` int leftMotorPin1 = 2; // 左侧电机引脚1 int leftMotorPin2 = 3; // 左侧电机引脚2 int rightMotorPin1 = 4; // 右侧电机引脚1 int rightMotorPin2 = 5; // 右侧电机引脚2 int buttonPin = 6; // 按钮引脚 void setup() { // 设置引脚为输出模式 pinMode(leftMotorPin1, OUTPUT); pinMode(leftMotorPin2, OUTPUT); pinMode(rightMotorPin1, OUTPUT); pinMode(rightMotorPin2, OUTPUT); // 设置按钮引脚为输入模式 pinMode(buttonPin, INPUT); } void loop() { // 获取按钮状态 int buttonState = digitalRead(buttonPin); // 如果按钮按下,控制小车转向 if(buttonState == HIGH) { // 左侧电机减速,右侧电机加速 analogWrite(leftMotorPin1, 100); analogWrite(leftMotorPin2, LOW); analogWrite(rightMotorPin1, 255); analogWrite(rightMotorPin2, LOW); // 延时一段时间,让小车转向 delay(1000); } // 如果按钮没有按下,小车停止 else { analogWrite(leftMotorPin1, LOW); analogWrite(leftMotorPin2, LOW); analogWrite(rightMotorPin1, LOW); analogWrite(rightMotorPin2, LOW); } } ``` 注意:这只是一个简单的示例代码,具体的转弯效果和时间需要根据实际情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值