695493298 发表于 2016-1-13 13:59:46

digitalRead的奇怪问题

我使用Arduino 我想用4号io口控制一个led亮或者灭并且想读取当前这个io的值,所以我先调用 pinMode(led, OUTPUT);设置为输出模式,然后在Loop 里面监听串口输入 当接受到 ON 的时候调用 digitalWrite(led, HIGI); 再通过 pinMode(led, INPUT_PULLUP);设置为INPUT_PULLUP模式ledFlag = digitalRead(led);读取Serial.println(ledFlag);输出
                               
                               

出现的问题:这个ledFlag的值永远都是0

附上线路图

代码

const byte led = 4;
/*
Name:                Test.ino
Created:        2016/1/8 星期五 下午 11:51:47
Author:        Administrator
*/
int ledFlag = 0;


void setup()
{
        Serial.begin(9600);
        pinMode(led, OUTPUT);
}

String inString = "";
/*
        测试
*/
void loop()
{
        while (Serial.available() > 0)
        {
                char inChar = Serial.read();
                inString += (char)inChar;
                //延时函数用于等待输入字符完全进去接收缓冲区
                delay(10);
        }
        // 检查是否接收到数据,如果接收到,便输出该数据
        if (inString != "")
        {
                if (inString == "OFF")
                {
                        //if (ledFlag == HIGH)
                        {
                                ledFlag = LOW;
                                pinMode(led, OUTPUT);
                                digitalWrite(led, ledFlag);
                                delay(100);

                                pinMode(led, INPUT_PULLUP);
                                ledFlag = digitalRead(led);
                                Serial.println(ledFlag);
                        }
                }
               
                else if (inString == "ON")
                {
                        //if (ledFlag == LOW)
                        {
                                ledFlag = HIGH;
                                pinMode(led, OUTPUT);
                                digitalWrite(led, ledFlag);
                                delay(100);

                                pinMode(led, INPUT_PULLUP);
                               
                                ledFlag = digitalRead(led);
                                Serial.println(ledFlag);
                                delay(100);
                        }
                }
                inString = "";
        }
}

PINKWALKMAN 发表于 2016-1-14 08:15:48

“4”号口不是PWM口,是普通的IO。在数字口号前有“~”的,才可以做PWM输出,例如:~11。

janeasy 发表于 2016-2-16 09:53:54

增加一个接口,读取试试。
页: [1]
查看完整版本: digitalRead的奇怪问题