数字读取串口
    这个例子展示怎样通过创建开发板和电脑的串口通讯监视开关状态
    硬件要求

    • Arduino UNO
    • 瞬时开关, 按钮, 或者切换开关
    • 10k ohm 电阻
    • 连接线
    • 面包板

    电路
    基本原理-数字读取串口 - 图1

    • 连接3根线到开发板。最开始两根,红和黑,连接到面包板上的两个长垂直行来提供5V电源电压和地。第三根线从数字引脚pin2连接到按钮的一个引脚。按钮的同一个引脚连接下拉电阻(10k ohm)到地。按钮的另一个引脚连接到5V电源。
    • 按钮或者开关连接电路的两点。按钮是断开的(未按),按钮两个引脚是没有接通的,所以这个引脚连接到地(通过一个下拉电阻),读取为低电平或者0。当如果按钮是闭合的(未按),按钮两个引脚是接通的,所以这个引脚连接到5V,读取为高电平,或者1。
    • 如果你没有连接到数字I/O口到任何地方,LED灯可能会不规则闪烁。这是因为输入引脚处于悬浮状态——它没有固定连接到电源或者地,并且它会随机在高电平和低电平之间切换。这是你需要下拉电阻的原因。

    原理图
    基本原理-数字读取串口 - 图2
    样例代码

    • 在下面程序里,最先做的事是在你的开发板和电脑之间建立串口通讯,波特率为9600 bits:

      1. Serial.begin(9600);
    • 然后,初始化数字引脚pin2,因为你要读取按钮的输出,所以这个作为输入引脚:

      1. pinMode(2,INPUT);
    • 现在初始化完成了,移入你代码的主循环里。当按钮被按下,5V电压会流过你的电路,而当它没有被按下,这个输入引脚就会链接到通过10k ohm电阻连接到地。这是数字输入,意味着开关只有开(1,或者高电平)和关(0,或者低电平)的状态,中间什么都没有。

    • 在主循环里最先做的事创建一个变量来保存来自开关的信息。因为这部分的信息是“1”或者“0”,所以你可以用int数据类型。调用变量的感应值,然后使它赋值给数字引脚pin2。你可以用下面一句代码来完成上面步骤:

      1. int sensorValue = digitalRead(2);
    • 一旦开发板读取输入引脚,把其信息作为一个值打印到电脑。你可以用Serial.println()来完成这个步骤:

      1. Serial.println(sensorValue);
    • 现在,当你打开Arduino IDE的串口监视器,你会看见“0”的数据流(如果开关打开)或者“1”的数据流(如果开关闭合) ```c / 数字读取练习-1 JLHS-Arduino与智能设计选修课 示例程序 2021.3.16 / int Button = 2;//定义一个全局变量Button,赋值为2脚

    void setup() { Serial.begin(9600);//初始化串口 pinMode(Button,INPUT);//将按键配置为输入模式 }

    void loop() { int buttonState = digitalRead(Button);//定义一个局部变量buttonSate,用于记录按键状态,将数字读取的值赋给该变量 Serial.println(buttonState);//通过串口打印按键状态 delay(10);//每个10毫秒运行一次 }

    1. - 现在,让我们用按键的状态来控制LED灯的亮灭。
    2. ```c
    3. /*
    4. 数字读取练习-2(控制板载LED灯的亮灭)
    5. JLHS-Arduino与智能设计选修课
    6. 示例程序
    7. 2021.3.16
    8. */
    9. int Button = 2;//定义一个全局变量Button,赋值为2脚
    10. int ledPin = 13;//定义一个全局变量ledPin,赋值为13脚
    11. void setup() {
    12. Serial.begin(9600);//初始化串口
    13. pinMode(Button,INPUT);//将按键配置为输入模式
    14. pinMode(ledPin,OUTPUT);//将LED配置为输出模式
    15. }
    16. void loop() {
    17. int buttonState = digitalRead(Button);//定义一个局部变量buttonSate,用于记录按键状态,将数字读取的值赋给该变量
    18. Serial.println(buttonState);//通过串口打印按键状态
    19. delay(10);//每个10毫秒运行一次
    20. if(buttonState == HIGH){
    21. digitalWrite(ledPin,HIGH);
    22. }
    23. else{
    24. digitalWrite(ledPin,LOW);
    25. }
    26. }