Arduino Uno开发:将LDR值转为多功能屏蔽LED二进制输出及串口十六进制显示
解决方案
一、串口输出十六进制数值
你原来的代码是输出十进制数值,要改成十六进制格式,只需要在Serial.println()里加上格式参数HEX,如果想加上0x前缀让结果更直观,可以分两步打印:
Serial.print("LDR数值(十六进制): 0x"); Serial.println(ldrVal, HEX);
HEX参数会让Arduino自动把整数转换成十六进制字符串输出,LDR的模拟值范围是0-1023,对应十六进制就是0x000到0x3FF。
二、用LED显示二进制数值
假设你的多功能屏蔽有8个LED(常见配置),我们用这8个LED显示LDR数值的低8位二进制(如果有10个LED,也可以直接扩展代码显示完整10位,逻辑一致)。
步骤1:定义LED引脚
把LED的引脚号存到数组里,方便批量处理:
// 根据你的屏蔽实际引脚修改这个数组 int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // 自动计算LED数量,不用手动改 const int ledCount = sizeof(ledPins) / sizeof(ledPins[0]);
步骤2:初始化LED引脚
在setup()里把所有LED引脚设为输出模式:
for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); }
步骤3:将数值转二进制并控制LED
在loop()里,用Arduino内置的bitRead()函数读取LDR数值的每一位(0代表最低位,7代表第7位),然后控制对应LED的亮灭:
for (int i = 0; i < ledCount; i++) { // 读取第i位的二进制值,1亮0灭 int bitValue = bitRead(ldrVal, i); digitalWrite(ledPins[i], bitValue); }
如果想让最左边的LED显示最高位,把循环改成从ledCount-1到0,对应读取7到0位即可。
完整代码
int ldrPin = A0; // LDR引脚 int ldrVal = 0; // LDR读取的数值 int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // LED引脚数组,务必根据实际修改 const int ledCount = sizeof(ledPins) / sizeof(ledPins[0]); // LED数量 void setup() { Serial.begin(9600); // 初始化串口波特率9600 // 批量初始化LED引脚为输出模式 for (int i = 0; i < ledCount; i++) { pinMode(ledPins[i], OUTPUT); } } void loop() { ldrVal = analogRead(ldrPin); // 读取LDR的模拟值(范围0-1023) // 同时输出十进制和十六进制数值,方便对照 Serial.print("LDR数值(十进制): "); Serial.print(ldrVal); Serial.print(" | (十六进制): 0x"); Serial.println(ldrVal, HEX); // 将数值转二进制,控制LED显示 for (int i = 0; i < ledCount; i++) { digitalWrite(ledPins[i], bitRead(ldrVal, i)); } delay(100); // 延时100ms,避免刷新过快 }
注意事项
- 一定要根据你的多功能屏蔽实际LED引脚修改
ledPins数组,接错引脚可能损坏硬件。 - 如果需要显示完整的10位二进制(analogRead返回的是10位数值),只需要在
ledPins数组里添加两个引脚,循环范围改成0-9即可。 bitRead()是Arduino专门用来读取整数某一位二进制值的函数,不用自己写移位逻辑,简单可靠。
内容的提问来源于stack exchange,提问作者Charbel
相关产品推荐
相关产品推荐

