学习arduino的进阶教学2。
与上一节相关,可以去看看博主的上一篇博文。
arduino进阶
序列埠输出
选择DigitalReadSerial,然后根据注释以及自己的设计调整数据。
附上代码
int pushButton = 7; //我们按钮会用脚位7,所以假设代数pushButton,令该代数为7
int buttonState =0; //假设代数buttonState为按钮状态,先令为0
void setup() {
Serial.begin(9600); //开始与电脑的连接窗口,定传输速率为9600
pinMode(pushButton, INPUT); //将7号脚位作为输入(即侦测器)
}
void loop() {
buttonState = digitalRead(pushButton); //从7号脚位侦测到按钮状况(1 or 0 有按或没按),把结果给buttonState
Serial.println("hi~~"); //ln为换行字符,根据需要自己改动。
Serial.println(buttonState); //让序列埠出状况!!!
delay(1); //括号内是时间,现在设定的是1ms
}
当上传后,点击序列埠(也就是这个像放大镜一样的按键)。
接下来根据我们设定好的传输速率,把序列埠右下角的传输速率改成我们设定好的。
如果说决定有点多,试着加上if条件,这样子会好一点,按一次按钮跳出一个hi~~1.
int pushButton = 7; //我们按钮会用脚位7,所以假设代数pushButton,令该代数为7
int buttonState =0; //假设代数buttonState为按钮状态,先令为0
int beforeState =0; //假设之前的状态
void setup() {
Serial.begin(9600); //开始与电脑的连接窗口,定传输速率为9600
pinMode(pushButton, INPUT); //将7号脚位作为输入(即侦测器)
}
void loop() {
buttonState = digitalRead(pushButton); //从7号脚位侦测到按钮状况(1 or 0 有按或没按),把结果给buttonState
if(buttonState==1 and beforeState==0){
Serial.println("hi~~")
Serial.println(buttonState); //让序列埠出状况!!!
}
beforeState=buttonState;
delay(1);
}
制作计数器
为了实现计数,引入了presstime。
int pushButton = 7; //我们按钮会用脚位7,所以假设代数pushButton,令该代数为7
int buttonState =0; //假设代数buttonState为按钮状态,先令为0
int beforeState =0; //假设之前的状态
int presstime =0; //假设按下的次数
void setup() {
Serial.begin(9600); //开始与电脑的连接窗口,定传输速率为9600
pinMode(pushButton, INPUT); //将7号脚位作为输入(即侦测器)
}
void loop() {
buttonState = digitalRead(pushButton); //从7号脚位侦测到按钮状况(1 or 0 有按或没按),把结果给buttonState
if(buttonState==1 and beforeState==0){
presstime=presstime+1;
Serial.println("hi~~");
Serial.println(presstime); //让序列埠出状况!!!
}
beforeState=buttonState;
delay(1);
}
这个是现在写好的代码,上传后会实验会发现有机械误差,因此为了消除误差,就需要用到Debounce。
Debounce简介
因为物理元件的特性及人为操作的影响,按钮会在按下去的时候跳动,也就是bounce,为了消除影响,也就是debounce,我们需要对一定时间差内的bounce进行消除,也就是将一个时间差里面的bounce看作是一次。
计数器代码
int pushButton = 7; //我们按钮会用脚位7,所以假设代数pushButton,令该代数为7
int buttonState =0; //假设代数buttonState为按钮状态,先令为0
int beforeState =0; //假设之前的状态
int presstime =0; //假设按下的次数
void setup() {
Serial.begin(9600); //开始与电脑的连接窗口,定传输速率为9600
pinMode(pushButton, INPUT); //将7号脚位作为输入(即侦测器)
}
void loop() {
buttonState = digitalRead(pushButton); //从7号脚位侦测到按钮状况(1 or 0 有按或没按),把结果给buttonState
if(buttonState==1 and beforeState==0){
presstime=presstime+1;
Serial.println("hi~~");
Serial.println(presstime); //让序列埠出状况!!!
}
if(buttonState!=beforeState){
delay(20); //将20ms看作bounce的时间差
}
beforeState=buttonState;
delay(1);
}
debounce的时间差根据个人需求自己更改。