鱼C论坛

 找回密码
 立即注册
查看: 159|回复: 1

为什么serial.print(val)输出在0和1之间变

[复制链接]
发表于 2024-4-10 17:01:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int Led=13;
int buttonpin=2;
int val;
void setup()
{
pinMode(Led,OUTPUT);//定义LED 为输出接口
pinMode(buttonpin,INPUT);//定义按键开关传感器为输出接口
Serial.begin(9600);
}
void loop()
{
val=digitalRead(buttonpin);//将数字接口3的值读取赋给val
Serial.println(val);
delay(500);
if(val==HIGH)//当按键开关传感器检测有信号时,LED 闪烁
{
digitalWrite(Led,HIGH);
}
else
{
digitalWrite(Led,LOW);
}
}

3导线引出用手碰触,Serial.println(val); 有时是0,有时是1,什么原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-10 17:01:52 | 显示全部楼层
在你的代码中,你使用了一个数字输入引脚(buttonpin)来读取一个按键开关传感器的状态。按键开关传感器通常是当按下按钮时输出低电平(0),释放按钮时输出高电平(1)。由于你用手触摸按键开关传感器,手的电阻会引起微小的电流流动,可能导致数字输入引脚(buttonpin)的电平变化。这就是为什么你会在Serial.println(val)的输出中看到0和1之间的变化。

如果你想要消除这个问题,可以尝试以下几种方法:

1. 使用一个稳定的电源来供电给按键开关传感器,而不是通过手触摸它。
2. 添加一个外部上拉电阻到数字输入引脚(buttonpin),以确保当按键开关未接通时,输入电平为高。
3. 在程序中添加一些去抖动的逻辑,以排除短暂的电平变化。例如,你可以在读取数字输入引脚之前检查两次输入电平,并且只有两次都为相同值时才将其视为有效输入。

根据你的描述,我建议尝试第2种方法,在buttonpin引脚和GND之间添加一个10k欧姆的上拉电阻。这样即使你用手触摸按键开关传感器,也能够保持稳定的高电平。请参考下方修改后的代码:
int Led = 13;
int buttonpin = 2;
int val;

void setup() {
  pinMode(Led, OUTPUT);
  pinMode(buttonpin, INPUT_PULLUP);  // 使用内部上拉电阻
  Serial.begin(9600);
}

void loop() {
  val = digitalRead(buttonpin);
  Serial.println(val);
  delay(500);
  
  if (val == LOW) {  // 检测低电平
    digitalWrite(Led, HIGH);
  } else {
    digitalWrite(Led, LOW);
  }
}

希望这能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-17 03:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表