硬件准备
4*4矩阵按键:1个
9g 舵机:1个
杜邦线:11根
硬件连线
1、将舵机红线接到 5V 电源上
2、将橙线接到 3 号引脚
3、将棕线接到 GND 上
4、分别用杜邦线将4*4矩阵按键的8个接口按照顺序接到开发板的4、5、6、7、8、9、10、11接口
软件程序
#include <Servo.h>//头文件
Servo myservo;//实例化
const int servopin = 3;//舵机引脚
const int rownum = 4;//行数量
const int colnum = 4;//列数量
const int rowpins[rownum] = {4,5,6,7};
const int colpins[colnum] = {8,9,10,11};
int rowval = 0;//行变量
int colval = 0;//列变量
const char keys[rownum][colnum] = { //键值
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
int angle = 0;//舵机角度变量
void setup(){
Serial.begin(9600);
myservo.attach(servopin);//舵机引脚为9
for (rowval = 0; rowval < rownum; rowval++){
pinMode(rowpins[rowval],INPUT);//行引脚设为输入模式
digitalWrite(rowpins[rowval],HIGH);//行引脚输出高电平
}
for (colval = 0; colval < colnum; colval++){
pinMode(colpins[colval],OUTPUT);//列引脚设为输出模式
digitalWrite(colpins[colval],HIGH);//列引脚输出高电平
}
}
void loop(){
char key = getKey();//获取按键模拟值
delay(200); //消抖
if (key !=0){
Serial.print("按键值:");
Serial.println(key);
turn(key);//转动相应角度
Serial.println(" ");
}
}
char getKey(){
char key = 0;
for (colval = 0; colval < colnum; colval++){//变量所有列
digitalWrite(colpins[colval],LOW);//输出低电平
for (rowval = 0; rowval < rownum; rowval++){//遍历所有行
if (digitalRead(rowpins[rowval]) == LOW){
key = keys[rowval][colval];
}
}
digitalWrite(colpins[colval],HIGH);//输出高电平
}
return key;//返回按键值
}
void turn(char key){
switch (key){
case '0':
myservo.write(0);
Serial.println("角度为0");
break;
case '1':
myservo.write(20);
Serial.println("角度为20");
break;
case '2':
myservo.write(40);
Serial.println("角度为40");
break;
case '3':
myservo.write(60);
Serial.println("角度为60");
break;
case '4':
myservo.write(80);
Serial.println("角度为80");
break;
case '5':
myservo.write(100);
Serial.println("角度为100");
break;
case '6':
myservo.write(120);
Serial.println("角度为120");
break;
case '7':
myservo.write(140);
Serial.println("角度为140");
break;
case '8':
myservo.write(160);
Serial.println("角度为160");
break;
case '9':
myservo.write(180);
Serial.println("角度为180");
break;
default:
Serial.println("请按0~9");
}
}
成品展示
【Arduino16】薄膜按键控制舵机实验
总结
通过本次实验,我成功将薄膜按键与舵机联合使用,对于二者的运用变得更加熟练。