我有一个非常简单的测试草图,其中我试图设置一个引脚HIGH然后用它读取它的状态digitalRead.这是我的素描.
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(1000);
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
delay(1000);
pinMode(3, INPUT);
Serial.println(digitalRead(3));
}
Run Code Online (Sandbox Code Playgroud)
串口监控结果:
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
我已经明白改变pinMode会阻止它HIGH.因此,将引脚设置为HIGHin OUTPUT模式然后更改为INPUT模式将其更改为LOW.因此,digitalRead将始终返回0.如果我不更改pinMode,它将无法读取引脚.那么如何在OUTPUT不丢失值的情况下读取处于模式下的引脚的当前设置?
Udo*_*ein 33
你的素描应该是
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(1000);
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
delay(1000);
// pinMode(3, INPUT); // get rid of this line
Serial.println(digitalRead(3));
}
Run Code Online (Sandbox Code Playgroud)
就这样.然后它读取引脚的状态,在你的情况下是"高".如果将pinMode设置为输入,它将根据连接的内容读取输入.如果您将"HIGH"写入输入引脚,则会激活内部上拉.如果在将其设置为输入模式或将其设置为输入模式之前写入HIGH,则无关紧要.除非您正在驱动输出引脚的高负载(例如,接地开关).然后这可能会杀掉别针.
如果你写了一个低电平并将引脚设置为低电平,它可能会浮动,这可能会导致任何不可预测的行为.
小智 32
在这种情况下,您只想访问数据寄存器本身.
PORTB和PORTD寄存器包含您要查找的引脚数据.我终于可以访问Arduino了解它.你想用bitRead(PORTD, pin).
Serial.println(bitRead(PORTD,3)); //Reads bit 3 of register PORTD which contains the current state (high/low) of pin 3.
Run Code Online (Sandbox Code Playgroud)
参考位读操作以获取更多信息.