题目要求
采集变阻器模拟量信号在数码管中显示,要求有二位小数
电路连接
-
数码管连接:
- 数码管的七个段(a-g)分别连接到Arduino的引脚 2 到 8。
- 数码管的小数点(dp)连接到Arduino的引脚9。
- 数码管的4个控制引脚连接到Arduino的引脚10到11。
-
变阻器连接:
- 变阻器的模拟输出引脚连接到Arduino的A0引脚,用来读取模拟值。
以下是控制数码管显示和读取温度传感器的完整代码:
#define a 2 // 数码管的a引脚连接到Arduino的第2号引脚
#define b 3 // 数码管的b引脚连接到Arduino的第3号引脚
#define c 4 // 数码管的c引脚连接到Arduino的第4号引脚
#define d 5 // 数码管的d引脚连接到Arduino的第5号引脚
#define e 6 // 数码管的e引脚连接到Arduino的第6号引脚
#define f 7 // 数码管的f引脚连接到Arduino的第7号引脚
#define g 8 // 数码管的g引脚连接到Arduino的第8号引脚
#define dp 9 // 数码管的小数点引脚连接到Arduino的第9号引脚
// 数码管的4个控制引脚,用来选择显示哪一位数字
const byte DIGIT_PINS[4] = {10, 11, 12, 13};
int a0, a1, a2, a3; // 用于存储分解后的显示数字的各个位(千位、百位、十位、个位)
void setup() {
Serial.begin(9600); // 初始化串口通讯,波特率为9600
// 设置数字引脚2到13为输出模式
for (int i = 2; i <= 13; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
int sensorValue = analogRead(A0); // 读取A0引脚的模拟值
float read_value = mapFloat(sensorValue, 0, 1023, 0.0, 99.99); // 将模拟值映射为0.00到99.99之间的浮动数值
int read_value_display = (int)(read_value * 100); // 将浮动数值转换为整数,保留两位小数
Serial.println(read_value_display); // 打印读取到的整数值到串口
// 将整数分解为千位、百位、十位和个位的值
a0 = read_value_display / 1000; // 千位
a1 = read_value_display / 100 % 10; // 百位
a2 = read_value_display / 10 % 10; // 十位
a3 = read_value_display % 10; // 个位
// 如果显示值小于100(即没有千位),只显示百位、十位、个位
if (read_value_display / 100 < 10) {
displayNumber(a1, 0, 0); // 显示百位
displayNumber(a2, 1, 1); // 显示十位
displayNumber(a3, 1, 2); // 显示个位
}
// 如果显示值大于或等于100(即有千位),显示所有四位数字
else if (read_value_display / 100 >= 10) {
displayNumber(a0, 1, 0); // 显示千位
displayNumber(a1, 0, 1); // 显示百位
displayNumber(a2, 1, 2); // 显示十位
displayNumber(a3, 1, 3); // 显示个位
}
}
// 自定义的map函数,用来进行浮动数值的线性插值
float mapFloat(int x, int in_min, int in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
// 控制显示数字的函数
void displayNumber(int number, int bp, int pins) {
// 关闭其他数码管(将所有数码管引脚设为LOW)
for (byte j = 0; j < 4; j++) {
digitalWrite(DIGIT_PINS[j], LOW);
}
// 点亮当前选中的数码管(设置指定的数码管引脚为HIGH)
digitalWrite(DIGIT_PINS[pins], HIGH);
// 根据输入的数字(0到9)控制数码管的显示
if (number == 0) {
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 1); // 显示0
} else if (number == 1) {
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1); // 显示1
} else if (number == 2) {
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 1);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 1);
digitalWrite(g, 0); // 显示2
} else if (number == 3) {
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 0); // 显示3
} else if (number == 4) {
digitalWrite(a, 1);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 0); // 显示4
} else if (number == 5) {
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 0); // 显示5
} else if (number == 6) {
digitalWrite(a, 0);
digitalWrite(b, 1);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0); // 显示6
} else if (number == 7) {
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 1);
digitalWrite(g, 1); // 显示7
} else if (number == 8) {
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 0);
digitalWrite(e, 0);
digitalWrite(f, 0);
digitalWrite(g, 0); // 显示8
} else if (number == 9) {
digitalWrite(a, 0);
digitalWrite(b, 0);
digitalWrite(c, 0);
digitalWrite(d, 1);
digitalWrite(e, 1);
digitalWrite(f, 0);
digitalWrite(g, 0); // 显示9
}
// 控制小数点的显示
digitalWrite(dp, bp);
delay(5); // 延时5ms,避免显示跳动
}
标签:引脚,digitalWrite,Arduino,number,else,数码管,变阻器
From: https://blog.csdn.net/weixin_45345979/article/details/143581719