蓝牙控制一位数码管显示
尝试使用HC-08蓝牙模块控制1位数码管的显示,案例中涉及到的电路相对简单,程序也较为直白。
元器件介绍
一位数码管
一位数码管一共有10个引脚,其中两侧最中间的引脚为共极引脚,由此分为共阴极和共阳极两种,本案例用的共阳极;所谓共级,因为数码管的原理就是将8个led并连起来的,所以有一极公用,另一极控制明灭。共阴极数码管阴极接1.0kΩ电阻再接GND,其余接控制引脚;共阳极数码管阳极接1.0kΩ电阻再接+5V或+3.3V,其余接控制引脚。其中电阻是分压限流作用,防止数码管烧坏,因为前面提到数码管实质就是LED,所以导通时电阻极小,需注意使用以防烧坏。
HC-08蓝牙模块
基于Bluetooth Specification V4.0 BLE蓝牙协议的数传模块。 集成了邮票封装孔和排针焊接孔,既可以贴片封装,也又可以焊接排针,很方便嵌入应用系统之内。支持广播模式,自定义UUID。
- 引脚:
RXD、 TXD、GND、VCC、KEY、STATE
开发板
暂不介绍
连接电路图
下面是电路图的连接
使用的引脚为2-9
【注意】:
1.上传程序之前先不要连接RX、TX引脚,上传之后在连接,否则会失败!
2.断开电源再连接,防止短路烧坏开发板、蓝牙模块、数码管
源代码
/*
HC-08蓝牙模块控制数码管显示
Edited at 2021-11-10 8:00:00
https://app.hyz.cool
该程序将展示如何利用HC-08蓝牙模块通过手机蓝牙功能来控制数码管的显示。
元器件:
1.开发板
2.HC-08蓝牙模块
3.一位共阳极数码管
4.面包板
5.公对公杜邦线
电路连接见上文
*/
//引脚数
const int Sata_Size = 8;
//引脚数组
int Satas[Sata_Size] = {2,3,4,5,6,7,8,9};
//数码管数字对应引脚数
const int Num_0_Size=6;//数字0
const int Num_1_Size=2;//数字1
const int Num_2_Size=5;//数字2
const int Num_3_Size=5;//数字3
const int Num_4_Size=4;//数字4
const int Num_5_Size=5;//数字5
const int Num_6_Size=6;//数字6
const int Num_7_Size=3;//数字7
const int Num_8_Size=7;//数字8
const int Num_9_Size=6;//数字9
const int Num_O_Size=4;//字母o或O
const int Num_F_Size=4;//数字f或F
const int Num_All_Size=8;//全部
//数码管数字对应引脚数组
const int Num_0[Num_0_Size]={2,3,5,6,7,8};//数字0
const int Num_1[Num_1_Size]={7,8};//数字1
const int Num_2[Num_2_Size]={2,3,4,6,7};//数字2
const int Num_3[Num_3_Size]={3,4,6,7,8};//数字3
const int Num_4[Num_4_Size]={4,5,7,8};//数字4
const int Num_5[Num_5_Size]={3,4,5,6,8};//数字5
const int Num_6[Num_6_Size]={2,3,4,5,6,8};//数字6
const int Num_7[Num_7_Size]={6,7,8};//数字7
const int Num_8[Num_8_Size]={2,3,4,5,6,7,8};//数字8
const int Num_9[Num_9_Size]={3,4,5,6,7,8};//数字9
const int Num_O[Num_O_Size]={2,3,4,8};//字母o或O
const int Num_F[Num_F_Size]={2,4,5,6};//数字f或F
const int Num_All[Num_All_Size]={2,3,4,5,6,7,8,9};//全部
//字符变量
char serialData;
//延迟时间
const int delay_time = 100;
void setup() {
//设置波特率
Serial.begin(9600);
//设置引脚为输出模式
setMode();
//清空数码管显示
clearView();
}
void loop(){
if( Serial.available()>0 ){
//读取缓存区的一个字符
serialData = Serial.read();
//数码管显示该字符
viewC(serialData);
Serial.print("Got Char -> ");
Serial.println(serialData);
}
}
void setMode(){
for(int index =0;index<8;index++){
Serial.println(index);
//设置引脚为输出模式
pinMode(index+2,OUTPUT);
}
}
void clearView(){
//数码管不显示
kill(Satas,Sata_Size);
}
void viewC(char c){
int *satas; //声明一个指针
int size = 0;
switch(c){
case '0':{
size = Num_0_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_0[i];
}
break;
}
case '1':{
size = Num_1_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_1[i];
}
break;
}
case '2':{
size = Num_2_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_2[i];
}
break;
}
case '3':{
size = Num_3_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_3[i];
}
break;
}
case '4':{
size = Num_4_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_4[i];
}
break;
}
case '5':{
size = Num_5_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_5[i];
}
break;
}
case '6':{
size = Num_6_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_6[i];
}
break;
}
case '7':{
size = Num_7_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_7[i];
}
break;
}
case '8':{
size = Num_8_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_8[i];
}
break;
}
case '9':{
size = Num_9_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_9[i];
}
break;
}
case 'o':
case 'O':{
size = Num_O_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_O[i];
}
break;
}
case 'f':
case 'F':{
size = Num_F_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_F[i];
}
break;
}
default:{
size = Num_All_Size;
satas = new int[size];
for(int i = 0;i<size;i++){
satas[i]=Num_All[i];
}
break;
}
}
view(satas,size);
delay(delay_time);
kill(satas,size);
delay(delay_time);
}
void view(int *satas,int size){
//显示数字
for(int index =0;index<size;index++){
digitalWrite(*(satas+index),LOW);
}
}
void kill(int *satas,int size){
//不显示数字
for(int index =0;index<size;index++){
digitalWrite(*(satas+index),HIGH);
}
}
c++