Arduino 项目笔记|旋转鞋柜#按钮去抖Debounce#电机#压力传感器
一、轻触按键开关
零基础入门学用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#电机#压力传感器相关推荐
- JavaScript函数节流(throttle)与函数去抖(debounce)解析与应用举例
概念 函数防抖(debounce): 事件响应函数在一段时间后才会执行,如果在这段时间内再次调用,则重新计算执行时间:当预定时间内没有再次调用该函数,则执行响应逻辑. 函数节流(throttle): ...
- Arduino 项目笔记 | 基于 Arduino 单片机的 A4988 和 L298N电机驱动模块实验记录
目录 1. Arduino Nano 简介 2. 技术规格 3. 输入和输出 1. A4988 简介 2. A4988 引脚定义图及功能说明 (四相步进电机) 3. Arduino使用A4988控制电 ...
- 米联客 ZYNQ/SOC精品教程 S01-CH06 FPGA按钮去抖实验
软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...
- Arduino 项目笔记 |一种基于 Arduino的遥控智能衣柜
项目介绍 本项目是一种带无线遥控升降的衣柜 ,衣柜包括柜体.照明组件(未实现).无线控制电路板.电机减速箱.左右升降机构以及导向轨组成.通过照明组件照明,通过遥控器无线控制升降机构实现隔板的上下移动, ...
- Arduino 项目笔记 | 基于PAJ7620U2手势识别(Gestures Sensor)的水龙头
一.项目背景 在许多大型公共场所,人员流动量大,公共设施的卫生情况普遍恶劣:传统的接触式水龙头存在着严重的卫生隐患. 家用厨房 洗碗.洗手时沾着油渍或洗手液洗手的手不方便触及水龙头. 医院里 容易滋生 ...
- Arduino 项目笔记 |一种自动清洗毛笔的装置
主要材料: Arduino Nano x1 N20减速电机/电机驱动 x1 上拉10k电阻 x1 振动电机 x1 5V风扇 x1 有源蜂鸣器 x 1 洞洞板 x1 3D打印外壳 硬件设计方案图 软件主 ...
- Arduino 项目笔记 | 基于Arduino和水流量传感器的水饮水机 (附.Arduino 项目源码 和 PCB Gerber 文件 )
视频演示 一.元件清单(Components) 1. 霍尔水流量传感器流量计水控2Mpa 描述:略 规格: 最低额定工作电压:DC4.5 5V-24V 最大工作电流:15 mA(DC 5V) 工作电压 ...
- C51 项目笔记 |Mifare RFID-RC522模组实验
项目框架 射频识别(Radiofrequency identification ,RFID),又称电子标签(E-Tag),是一种利用射频信号自动识别目标对象并获取相关信息的技术.RFID或射频识别系统 ...
- 函数去抖(debounce) 函数节流(throttle)总结
1. 什么是函数去抖 & 函数节流 debounce使用场景 throttle使用场景 2. 实现方法&应用 a. 简单实现 debounce throttle b. 附:Lodash ...
最新文章
- RISV-V未来将面临怎样的挑战?
- Python编程基础:第四十二节 多重继承Multi Level Inheritance
- 回归素材(part8)--python机器学习算法
- fseek linux 大文件_上传大文件
- ssm框架的简要介绍
- Word 2016 插入尾注之后删除方法
- Windows10更新错误显示0x8000ffff,易升更新0xc1900107
- .计算机自动关机或重启,电脑自动关机与重启是什么原因
- 19清明假前一周安排
- 黄一老师讲述贷款“黑名单”小心别上了黑名单!
- 定义与声明、头文件与extern总结
- 只用 Markdown 就写出好看的简历,在线简历应用闪亮登场!
- IDEA 自定义代码模板
- 软工网络15个人阅读作业2 201521123023 网络1511 戴建钊
- 镭速传输安全设计第三篇:传输安全设计
- 高等数值计算方法学习笔记第4章第一部分【数值积分(数值微分)】
- 电影中牛掰的黑客技术,看这篇文章你就够了!
- Linux x86 漏洞利用-Use-After-Free(UAF)-释放后可重用
- URP Lit Shader解析(1)
- 数学在计算机密码学中的运用,计算机密码学的数学引论.ppt
热门文章
- 开源基于PyTorch深度学习框架实现图卷积
- 帕斯卡三角形 python
- 线阵相机的优势是什么?如何选择线阵相机?
- 【面试题 10.11】峰与谷
- java AST 抽象语法树
- 无线传感网络在医疗领域的应用
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下来的是原来的第几位(指针方法处理)。——C语言
- S3C6410裸机SD卡驱动(SDIO模式)
- 最“狂”天才,保送清华读博,3次退学,怒怼阿里 P10,被微软全球封杀!
- 基于arduino与raspberry的远程数据采集系统