一、轻触按键开关

零基础入门学用Arduino-基础知识篇-13 数字输入1 - 按键开关

零基础入门学用Arduino-基础知识篇-14 数字输入2 - 按键开关控制电路与程序

按键开关是一种功能性的电子开关,使用时轻轻点触开关按钮就可以是开关接通,当松开手时开关就断开。特点相连不同侧,同侧不相连。
1.上拉电阻

arduino内部自带内部上拉电阻,如果要使用该内部上拉电阻,只需要设置pinMode(pin,INPUT_PULLUP);若该引脚pin设置为上拉电阻后,请勿将该引脚pin接入高于5V的电压。

  • Debounce 按钮去抖

  • 方案一

int pushButton = 7;//按钮的输入引脚
int buttonState =0;//按钮的状态
int beforeState =0;//前一刻的按钮状态
int presstime  = 0;//假设按下按钮的次数
void setup()
{Serial.begin(9600);//串口波特率pinMode(pushButton,INPUT);//设定7号脚为输入 }
void loop()
{   buttonState = digitalRead(pushButton);if(buttonState == 1 && beforeState == 0 )//从没有按到按下按钮的一瞬间:按下为0,按下之前为1//按钮是上拉电阻按下为“0”{presstime=presstime+1;Serial.print("hi~~");Serial.println(presstime);}if(buttonState!=beforeState){delay(20);}beforeState=buttonState;delay(100);
}
  • 方案二
    // constants won’t change. They’re used here to set pin numbers:
    const int button2Pin = 2; // the number of the pushbutton pin
    const int ledPin = 10; // the number of the LED pin
    const int button4Pin = 4; // variables will change:
    const int motor3pin = 3;
    const int motor5pin = 5;
    int pspin = A0;
    float val1 = 0;

int buttonState2 = 0; // variable for reading the pushbutton status
int buttonState4 = 0;
#define sudu 100

void setup() {

Serial.begin(9600);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin,LOW);
// initialize the pushbutton pin as an input:
pinMode(button2Pin, INPUT);
pinMode(button4Pin, INPUT);

pinMode(motor3pin,OUTPUT);
pinMode(motor5pin,OUTPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState2 = digitalRead(button2Pin);
buttonState4 = digitalRead(button4Pin);

float val1 = analogRead(pspin);

Serial.println(buttonState2);
Serial.println(buttonState4);

Serial.println(val1);

if(val1>10)
{

// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState2 == LOW) {
// turn LED on:
digitalWrite(ledPin, LOW);

 digitalWrite(motor5pin, LOW);//digitalWrite(motor3pin, HIGH); analogWrite(motor3pin, sudu);

}
if (buttonState4 == LOW) {
// turn LED on:
digitalWrite(ledPin, HIGH);

digitalWrite(motor3pin, LOW);
//digitalWrite(motor5pin, HIGH);
analogWrite(motor5pin, sudu);

}
if ((buttonState4 == LOW)&&(buttonState2 == LOW))
{
digitalWrite(motor3pin, LOW);
digitalWrite(motor5pin, LOW);

for(int i=0;i<10;i++){
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
}

}

}
else
{
delay(20);
}
delay(200);
}

  • 方案三
//boolean state = false;
boolean buttonUp = true;//flag旗标-之前被按下过为true,按钮又弹起来void setup()
{//pinMode(13,OUTPUT);//digitalWrite(13,LOW);pinMode(7,INPUT);digitalWrite(HIGH);//初始化为HIGH,上拉电阻为“1”
}
void loop()
{if(digitalRead(7) == LOW && buttonUp == true)//按钮按下的一瞬间//digitalRead(7)!= HIGH && buttonUp ==true{digitalWrite(13,!digitalRead(13));//测试点亮LED灯buttonUp = false;}else if(digitalRead(7)== HIGH && buttonUp == false)//按钮没有按下//digitalRead(7)== HIGH && buttonUp !=true{buttonUp = true;}delay(100);
}

注意:方案三简单好理解!!!

#2021/06/26update# mixly版本

二、电机

  • L298N电机驱动
    简介:电机驱动模块非常适合在电池供电的智能小车、玩具小车、机器人等上面使用,供电电压2V~10V,可同时驱动两个直流电机或者1个4线2相式步进电机,可实现正反转和调速的功能,每路电流能到1.5A持续电流,峰值电流可达2.5A,有热保护并且能够自动恢复。

  • 注意:
    1.电源正极与负极接反肯定会造成电路损坏。

    2.输出对地短路或输出端短路,还有电机堵转的情况下,芯片都会热保护的,但是在接近或者超过10V电压且峰值电流大大超过2.5A的情况下也会造成芯片烧毁。


  • 功能描述:当人坐在鞋柜上(压力传感器)之后,按键pin2、pin4控制电机正(motor3pin)反(motor5pin)转。

const int button2Pin = 2;     // the number of the pushbutton pin
const int ledPin =  10;      // the number of the LED pin
const int button4Pin = 4;   // variables will change:
const int motor3pin = 3;
const int motor5pin = 5;
int pspin = A0;//压力传感器
float val1 = 0;int buttonState2 = 0;         // variable for reading the pushbutton statusint buttonState4 = 0;
#define   sudu   100//电机的转速void setup() {Serial.begin(9600);// initialize the LED pin as an output:pinMode(ledPin, OUTPUT);digitalWrite(ledPin,LOW);// initialize the pushbutton pin as an input:pinMode(button2Pin, INPUT);pinMode(button4Pin, INPUT);pinMode(motor3pin,OUTPUT);pinMode(motor5pin,OUTPUT);
}void loop() {// read the state of the pushbutton value:buttonState2 = digitalRead(button2Pin);buttonState4 = digitalRead(button4Pin);float val1 = analogRead(pspin);Serial.println(buttonState2);Serial.println(buttonState4);Serial.println(val1);if(val1>10){// check if the pushbutton is pressed. If it is, the buttonState is HIGH:if (buttonState2 == LOW) {// turn LED on:digitalWrite(ledPin, LOW);digitalWrite(motor5pin, LOW);//digitalWrite(motor3pin, HIGH); analogWrite(motor3pin, sudu); } if (buttonState4 == LOW) {// turn LED on:digitalWrite(ledPin, HIGH);digitalWrite(motor3pin, LOW);//digitalWrite(motor5pin, HIGH);analogWrite(motor5pin, sudu);} if ((buttonState4 == LOW)&&(buttonState2 == LOW)) {digitalWrite(motor3pin, LOW);digitalWrite(motor5pin, LOW);for(int i=0;i<10;i++){digitalWrite(ledPin, HIGH);delay(200);digitalWrite(ledPin, LOW);delay(200);}} }delay(200);
}

第二版:

// constants won't change. They're used here to set pin numbers:
const int button2Pin = 2;     // 按钮1
const int ledPin =  10;      // 提示灯
const int button4Pin = 4;   // 按钮2
const int motor3pin = 3;    //电机正转pin脚
const int motor5pin = 5;    //电机反转pin脚
int pspin = A0;             //压力传感器检测pin脚
float val1 = 0;             //压力值int buttonState2 = 0;         // 按钮的状态值int buttonState4 = 0;
#define   sudu   192        //电机转速初始化值void setup() {Serial.begin(9600);// initialize the LED pin as an output:pinMode(ledPin, OUTPUT);digitalWrite(ledPin,LOW);// initialize the pushbutton pin as an input:pinMode(button2Pin, INPUT);pinMode(button4Pin, INPUT);pinMode(motor3pin,OUTPUT);pinMode(motor5pin,OUTPUT);
}void loop() {// read the state of the pushbutton value:buttonState2 = digitalRead(button2Pin);//读取按钮1的状态buttonState4 = digitalRead(button4Pin);float val1 = analogRead(pspin);Serial.println(buttonState2);Serial.println(buttonState4);Serial.println(val1);// check if the pushbutton is pressed. If it is, the buttonState is HIGH:if (buttonState2 == LOW&&buttonState4 == HIGH)//按钮1按下按钮2没有按下 或者按钮1没有按下,按钮2按下;根据按钮的电路是上拉电阻还是 下拉电阻判断!!!{// turn LED on:digitalWrite(ledPin, LOW);digitalWrite(motor5pin, LOW);//digitalWrite(motor3pin, HIGH); analogWrite(motor3pin, sudu); } if (buttonState4 == LOW&&buttonState2 == HIGH) {// turn LED on:digitalWrite(ledPin, HIGH);digitalWrite(motor3pin, LOW);//digitalWrite(motor5pin, HIGH);analogWrite(motor5pin, sudu);} if ((buttonState4 == LOW)&&(buttonState2 == LOW)) //电机停止转动{digitalWrite(motor3pin, LOW);digitalWrite(motor5pin, LOW);/*for(int i=0;i<10;i++){digitalWrite(ledPin, HIGH);delay(200);digitalWrite(ledPin, LOW);delay(200);}*/} if(val1>10){}delay(200);
}

第三版:


const int button2Pin = 2;     // the number of the pushbutton pin
const int ledPin =  10;      // the number of the LED pin
const int button4Pin = 4;   // variables will change:
const int motor3pin = 3;
const int motor5pin = 5;
int pspin = A0;
float val1 = 0;
int p_value = 4;int buttonState2 = 0;         // variable for reading the pushbutton statusint buttonState4 = 0;
#define   sudu   255void setup() {Serial.begin(9600);// initialize the LED pin as an output:pinMode(ledPin, OUTPUT);digitalWrite(ledPin,LOW);// initialize the pushbutton pin as an input:pinMode(button2Pin, INPUT);pinMode(button4Pin, INPUT);pinMode(motor3pin,OUTPUT);pinMode(motor5pin,OUTPUT);
}void loop() {// read the state of the pushbutton value:buttonState2 = digitalRead(button2Pin);buttonState4 = digitalRead(button4Pin);float val1 = analogRead(pspin);Serial.println(buttonState2);Serial.println(buttonState4);Serial.println(val1);// check if the pushbutton is pressed. If it is, the buttonState is HIGH:if ((buttonState2 == LOW)&&(buttonState4 == HIGH )&&( val1>=p_value))//有人坐下、按钮2(下拉电阻)没有按下、按钮4按下(正转){// turn LED on:digitalWrite(ledPin, LOW);digitalWrite(motor5pin, LOW);//digitalWrite(motor3pin, HIGH); analogWrite(motor3pin, sudu); } if ((buttonState4 == LOW)&&(buttonState2 == HIGH )&& (val1>=p_value))//反转,按钮2按下,按钮4没有按下,有人坐下{// turn LED on:digitalWrite(ledPin, HIGH);digitalWrite(motor3pin, LOW);//digitalWrite(motor5pin, HIGH);analogWrite(motor5pin, sudu);} if ((buttonState4 == LOW)&&(buttonState2 == LOW) && (val1<=p_value))//两个按钮没有按下,没有人(电机停止){digitalWrite(motor3pin, LOW);digitalWrite(motor5pin, LOW);/*for(int i=0;i<10;i++){digitalWrite(ledPin, HIGH);delay(200);digitalWrite(ledPin, LOW);delay(200);}*/} if ((buttonState4 == LOW)&&(buttonState2 == LOW) && (val1>=p_value)) //两个按钮没有按下,有人坐在上面(压力值),电机停止{digitalWrite(motor3pin, LOW);digitalWrite(motor5pin, LOW);} delay(200);
}

三、FSR402压力传感器

Arduino 传感器: 使用FSR402压力传感器检测压力

  • FSR402 薄膜压力传感器

  • 公头杜邦线

  • 面包板

  • Arduino Uno R3

  • 10KΩ 电阻一个

  • Type A转B, USB 2.0线一根(打印机线), 作为Arduino Uno的电源


参考资料

  • [1] DFRobot|薄膜压力传感器

Arduino 项目笔记|旋转鞋柜#按钮去抖Debounce#电机#压力传感器相关推荐

  1. JavaScript函数节流(throttle)与函数去抖(debounce)解析与应用举例

    概念 函数防抖(debounce): 事件响应函数在一段时间后才会执行,如果在这段时间内再次调用,则重新计算执行时间:当预定时间内没有再次调用该函数,则执行响应逻辑. 函数节流(throttle): ...

  2. Arduino 项目笔记 | 基于 Arduino 单片机的 A4988 和 L298N电机驱动模块实验记录

    目录 1. Arduino Nano 简介 2. 技术规格 3. 输入和输出 1. A4988 简介 2. A4988 引脚定义图及功能说明 (四相步进电机) 3. Arduino使用A4988控制电 ...

  3. 米联客 ZYNQ/SOC精品教程 S01-CH06 FPGA按钮去抖实验

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  4. Arduino 项目笔记 |一种基于 Arduino的遥控智能衣柜

    项目介绍 本项目是一种带无线遥控升降的衣柜 ,衣柜包括柜体.照明组件(未实现).无线控制电路板.电机减速箱.左右升降机构以及导向轨组成.通过照明组件照明,通过遥控器无线控制升降机构实现隔板的上下移动, ...

  5. Arduino 项目笔记 | 基于PAJ7620U2手势识别(Gestures Sensor)的水龙头

    一.项目背景 在许多大型公共场所,人员流动量大,公共设施的卫生情况普遍恶劣:传统的接触式水龙头存在着严重的卫生隐患. 家用厨房 洗碗.洗手时沾着油渍或洗手液洗手的手不方便触及水龙头. 医院里 容易滋生 ...

  6. Arduino 项目笔记 |一种自动清洗毛笔的装置

    主要材料: Arduino Nano x1 N20减速电机/电机驱动 x1 上拉10k电阻 x1 振动电机 x1 5V风扇 x1 有源蜂鸣器 x 1 洞洞板 x1 3D打印外壳 硬件设计方案图 软件主 ...

  7. Arduino 项目笔记 | 基于Arduino和水流量传感器的水饮水机 (附.Arduino 项目源码 和 PCB Gerber 文件 )

    视频演示 一.元件清单(Components) 1. 霍尔水流量传感器流量计水控2Mpa 描述:略 规格: 最低额定工作电压:DC4.5 5V-24V 最大工作电流:15 mA(DC 5V) 工作电压 ...

  8. C51 项目笔记 |Mifare RFID-RC522模组实验

    项目框架 射频识别(Radiofrequency identification ,RFID),又称电子标签(E-Tag),是一种利用射频信号自动识别目标对象并获取相关信息的技术.RFID或射频识别系统 ...

  9. 函数去抖(debounce) 函数节流(throttle)总结

    1. 什么是函数去抖 & 函数节流 debounce使用场景 throttle使用场景 2. 实现方法&应用 a. 简单实现 debounce throttle b. 附:Lodash ...

最新文章

  1. RISV-V未来将面临怎样的挑战?
  2. Python编程基础:第四十二节 多重继承Multi Level Inheritance
  3. 回归素材(part8)--python机器学习算法
  4. fseek linux 大文件_上传大文件
  5. ssm框架的简要介绍
  6. Word 2016 插入尾注之后删除方法
  7. Windows10更新错误显示0x8000ffff,易升更新0xc1900107
  8. .计算机自动关机或重启,电脑自动关机与重启是什么原因
  9. 19清明假前一周安排
  10. 黄一老师讲述贷款“黑名单”小心别上了黑名单!
  11. 定义与声明、头文件与extern总结
  12. 只用 Markdown 就写出好看的简历,在线简历应用闪亮登场!
  13. IDEA 自定义代码模板
  14. 软工网络15个人阅读作业2 201521123023 网络1511 戴建钊
  15. 镭速传输安全设计第三篇:传输安全设计
  16. 高等数值计算方法学习笔记第4章第一部分【数值积分(数值微分)】
  17. 电影中牛掰的黑客技术,看这篇文章你就够了!
  18. Linux x86 漏洞利用-Use-After-Free(UAF)-释放后可重用
  19. URP Lit Shader解析(1)
  20. 数学在计算机密码学中的运用,计算机密码学的数学引论.ppt

热门文章

  1. 开源基于PyTorch深度学习框架实现图卷积
  2. 帕斯卡三角形 python
  3. 线阵相机的优势是什么?如何选择线阵相机?
  4. 【面试题 10.11】峰与谷
  5. java AST 抽象语法树
  6. 无线传感网络在医疗领域的应用
  7. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下来的是原来的第几位(指针方法处理)。——C语言
  8. S3C6410裸机SD卡驱动(SDIO模式)
  9. 最“狂”天才,保送清华读博,3次退学,怒怼阿里 P10,被微软全球封杀!
  10. 基于arduino与raspberry的远程数据采集系统