鱼C论坛

 找回密码
 立即注册
查看: 445|回复: 13

[已解决]为什么digitalRead(任一脚)返回值是1,不插线返回值也是1

[复制链接]
发表于 2024-4-9 16:25:46 | 显示全部楼层 |阅读模式

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

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

x
int led = 7;
int buttonpin = 3;
int val;
void setup() {
  pinMode(led, OUTPUT);
  pinMode(buttonpin, INPUT);
  Serial.begin(9600);
}
void loop() {
   val=digitalRead(buttonpin);
  Serial.println(val);
  delay(200);
  if (val == 0){
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }
}
  打印值一直是1,  3引脚没有插线,打印值还是1 ,为什么请教了
最佳答案
2024-4-9 16:26:12
digitalRead()函数用于读取指定引脚的电平值,返回结果为0或1,其中0表示低电平,1表示高电平。在你的代码中,你将buttonpin引脚设置为输入模式,然后使用digitalRead(buttonpin)读取它的电平值。

当你不将3号引脚连接到任何地方时,它将处于浮空状态。这意味着引脚上的状态随机产生,并且可能是高电平也可能是低电平。实际上,由于某种原因,它倾向于返回高电平。

为了解决这个问题,你可以通过使用一个上拉电阻或一个下拉电阻将引脚拉向已知的电平。例如,你可以使用一个10K欧姆的上拉电阻将按钮接到5V或3.3V电源线上,或者使用一个10K欧姆的下拉电阻将按钮接到地线上。

然后,在你的代码中,使用pinMode(buttonpin, INPUT_PULLUP)来启用内部上拉电阻。这样做会将GPIO引脚的默认状态设置为高电平,如果按钮未按下,则该引脚将保持高电平。这样,当按钮按下时,digitalRead(buttonpin)将返回低电平(0),否则返回高电平(1)。

以下是修复后的代码示例:
int led = 7;
int buttonpin = 3;
int val;

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

void loop() {
  val = digitalRead(buttonpin);
  Serial.println(val);
  delay(200);
  
  if (val == LOW) {  // 按钮按下时,引脚为低电平
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }
}

希望这能解决你的问题!

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

使用道具 举报

发表于 2024-4-9 16:26:12 | 显示全部楼层    本楼为最佳答案   
digitalRead()函数用于读取指定引脚的电平值,返回结果为0或1,其中0表示低电平,1表示高电平。在你的代码中,你将buttonpin引脚设置为输入模式,然后使用digitalRead(buttonpin)读取它的电平值。

当你不将3号引脚连接到任何地方时,它将处于浮空状态。这意味着引脚上的状态随机产生,并且可能是高电平也可能是低电平。实际上,由于某种原因,它倾向于返回高电平。

为了解决这个问题,你可以通过使用一个上拉电阻或一个下拉电阻将引脚拉向已知的电平。例如,你可以使用一个10K欧姆的上拉电阻将按钮接到5V或3.3V电源线上,或者使用一个10K欧姆的下拉电阻将按钮接到地线上。

然后,在你的代码中,使用pinMode(buttonpin, INPUT_PULLUP)来启用内部上拉电阻。这样做会将GPIO引脚的默认状态设置为高电平,如果按钮未按下,则该引脚将保持高电平。这样,当按钮按下时,digitalRead(buttonpin)将返回低电平(0),否则返回高电平(1)。

以下是修复后的代码示例:
int led = 7;
int buttonpin = 3;
int val;

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

void loop() {
  val = digitalRead(buttonpin);
  Serial.println(val);
  delay(200);
  
  if (val == LOW) {  // 按钮按下时,引脚为低电平
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }
}

希望这能解决你的问题!

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

使用道具 举报

 楼主| 发表于 2024-4-9 16:46:18 | 显示全部楼层
那3脚输出多大的电压
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 16:46:30 | 显示全部楼层
小菜鸟三枚 发表于 2024-04-09 16:46
那3脚输出多大的电压


Arduino的数字引脚可以输出5V的电压(高电平)或0V的电压(低电平)。当你将3号引脚设置为输出模式时,可以使用digitalWrite()函数来控制输出电压的大小。例如,通过digitalWrite(pin, HIGH),你可以将引脚输出5V的电压;通过digitalWrite(pin, LOW),你可以将引脚输出0V的电压。请注意,Arduino引脚的最大输出电流是20mA,直接驱动一些高功率负载可能会导致引脚不正常工作或损坏。因此,如果需要驱动较大功率的负载,你可能需要使用外部电源或电平转换电路。

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

使用道具 举报

 楼主| 发表于 2024-4-9 16:53:19 | 显示全部楼层
FishC 发表于 2024-4-9 16:46
Arduino的数字引脚可以输出5V的电压(高电平)或0V的电压(低电平)。当你将3号引脚设置为输出模式时, ...

void setup() {
  pinMode(3, OUTPUT);

}
void loop() {
  digitalWrite(3,HIGH);
}为什么启动不了小型发达,但是LED会亮
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 16:53:39 | 显示全部楼层
小菜鸟三枚 发表于 2024-04-09 16:53
void setup() {
  pinMode(3, OUTPUT);

}
void l ...


根据你提供的代码,你将3号引脚设置为输出模式,并在循环中使用digitalWrite()函数将其设置为高电平(5V)。这样可以点亮连在3号引脚的LED,但不能启动一个小型电机。

可能原因如下:
1. 小型电机需要较大的电流来运转。Arduino引脚的最大输出电流是20mA,并不足以直接驱动小型电机。你可能需要使用一个驱动电路或者外部电源来提供足够的电流给小型电机。
2. 小型电机通常需要一个PWM信号来控制其转速。对于只能输出高或低电平的数字引脚,无法直接生成PWM信号。需要使用能产生PWM信号的引脚(如标有~符号的引脚)或使用Arduino的PWM库来生成PWM信号。

所以,要启动小型电机,你需要做以下几步:
1. 使用一个合适的驱动电路或者外部电源来提供足够的电流给小型电机。
2. 如果需要控制小型电机的转速,请使用能够产生PWM信号的引脚或者使用Arduino的PWM库来生成PWM信号。

希望这能帮助解决你的问题!

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

使用道具 举报

 楼主| 发表于 2024-4-9 16:56:11 | 显示全部楼层
FishC 发表于 2024-4-9 16:53
根据你提供的代码,你将3号引脚设置为输出模式,并在循环中使用digitalWrite()函数将其设置为高电平(5 ...

用arduino 上5v的电压可以驱动,但是3脚就不行是没有PWM信号吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 16:56:31 | 显示全部楼层
小菜鸟三枚 发表于 2024-04-09 16:56
用arduino 上5v的电压可以驱动,但是3脚就不行是没有P ...


抱歉,我之前的回答有误。感谢你的指正。在Arduino上,有些数字引脚支持PWM(脉宽调制),可以用来模拟出不同占空比的高电平信号,从而控制电机的转速。但是将一个数字引脚设置为输出模式并使用digitalWrite()函数将其设置为高电平,并不会产生PWM信号。digitalWrite()函数只能产生固定的高或低电平信号。如果你想要使用PWM信号来驱动小型电机,你可以使用标有~符号的引脚(如D3、D5、D6等)来生成PWM信号。以下是一个示例代码,使用D3引脚生成PWM信号来驱动小型电机:int motorPin = 3; // 使用D3引脚int speed = 128; // 设置转速,范围是0-255void setup() {  pinMode(motorPin, OUTPUT);}void loop() {  analogWrite(motorPin, speed);}请注意,在使用PWM信号时,需要将引脚设置为输出模式,并使用analogWrite()函数来设置PWM信号的占空比(范围为0-255)。希望这次能解决你的问题!

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

使用道具 举报

 楼主| 发表于 2024-4-9 17:03:36 | 显示全部楼层
FishC 发表于 2024-4-9 16:56
抱歉,我之前的回答有误。感谢你的指正。在Arduino上,有些数字引脚支持PWM(脉宽调制),可以用来模拟 ...

int motorpin = 3;
int speed = 255;
void setup() {
  pinMode(motorpin, OUTPUT);
}
void loop() {
  analogWrite(motorpin, speed);
}
电机有轻微异响,未启动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 17:03:54 | 显示全部楼层
小菜鸟三枚 发表于 2024-04-09 17:03
int motorpin = 3;
int speed = 255;
void setup()  ...


电机有轻微异响并未启动可能有几个原因:

1. 电机供电不足:请确保你的电机能够正常工作所需的电源电压和电流。如果供电电压不足,电机可能无法启动或者运转不稳定。

2. 驱动电路问题:如果使用的是直流电机,可能需要一个适当的驱动电路来提供足够的电流给电机。简单的Arduino引脚通常无法直接驱动大功率的电机。你可以尝试使用一个电机驱动模块来提供足够的电流给电机。

3. 运行条件问题:某些电机在启动时需要一定的转矩才能开始旋转。你可以尝试给电机一个轻微的推动,看是否能帮助它启动。

如果以上方法仍然无法解决问题,你可能需要提供更多关于电机、驱动电路和供电方式的详细信息,以便我们更好地帮助你解决问题。

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

使用道具 举报

 楼主| 发表于 2024-4-9 17:06:05 | 显示全部楼层
FishC 发表于 2024-4-9 17:03
电机有轻微异响并未启动可能有几个原因:

1. 电机供电不足:请确保你的电机能够正常工作所需的电源 ...

纠结的是,插到5v口就能启动,证明电流够,为什么3口输出就不够了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 17:06:35 | 显示全部楼层
小菜鸟三枚 发表于 2024-04-09 17:06
纠结的是,插到5v口就能启动,证明电流够,为什么3口 ...


当你将电机连接到5V引脚时,它可以正常启动,这表明电源提供的电流足够使电机工作。但当你将电机连接到Arduino的3号引脚时,电机不能启动。这可能是由于以下原因导致的:

1. 电路限制:Arduino的数字引脚通常只能提供最大40mA的输出电流。对于一些较小的电机来说,这个电流足够使其运转。但对于更大功率的电机来说,所需的电流可能超出了Arduino引脚的限制,导致无法启动。

2. 电压降低:当电机启动时,它会产生电流峰值,导致电源电压下降。如果你使用的是Arduino的3号引脚来直接驱动电机,由于内部电阻和线路电阻的存在,电压可能会降低到一个无法启动电机的水平。

为了解决这个问题,你可以尝试以下几种方法:

1. 使用外部电源:通过使用外部电源,如电池或稳定的直流电源,来为电机提供足够的电流和电压。

2. 使用电机驱动模块:电机驱动模块可以提供更大的电流能力,并能够提供稳定的电源电压。

3. 采用PWM控制:你可以使用PWM(脉宽调制)来控制电机的速度。PWM可以通过快速交替高低电平来模拟不同的平均电压。这样可以减小电机所需的平均电压,从而减小对电源的负载。

请记住,连接电机时要注意保护Arduino的电路,避免电机的反向电动势对Arduino产生损害。使用适当的电机驱动模块可以提供过流保护和反向电动势保护。

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

使用道具 举报

 楼主| 发表于 2024-4-9 17:25:03 | 显示全部楼层
FishC 发表于 2024-4-9 17:06
当你将电机连接到5V引脚时,它可以正常启动,这表明电源提供的电流足够使电机工作。但当你将电机连接到 ...

arduino 板,5v输出的是交流还是直流
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 17:25:12 | 显示全部楼层
小菜鸟三枚 发表于 2024-04-09 17:25
arduino 板,5v输出的是交流还是直流


Arduino板的5V引脚输出的是直流(DC)电压。Arduino板通常由一个直流电源供电,该电源将交流(AC)电压转换为所需的直流电压。然后,通过Arduino板上的稳压器电路,将直流电压稳定为5V,并通过5V引脚提供给外部设备使用。因此,当你将设备连接到Arduino的5V引脚时,它会提供稳定的直流电压。请注意,Arduino的5V引脚通常有一个最大电流输出限制,通常为200mA。使用超过这个限制的设备可能会导致电流不足或损坏Arduino板本身。因此,在连接设备之前,请确保了解设备的功率需求并谨慎操作。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 15:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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