《Arduino开发实战指南:LabVIEW卷》——2.3 Arduino C语言开发示例

    xiaoxiao2022-07-15  145

    本节书摘来自华章计算机《Arduino开发实战指南:LabVIEW卷》一书中的第2章,第2.3节,作者:余崇梓著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

    2.3 Arduino C语言开发示例

    2.3.1 数字输出如图2-15所示,这是Arduino一个最基本的“hello world”程序,将LED连接到数字引脚13,让LED每秒钟闪一次。Arduino有内置的电阻,所以220Ω的电阻不用在外部连接。

    代码清单2-18:digital output应用示例

    /******************************************** digital output应用示例 This example code is in the public domain. *********************************************/ int ledPin = 13; /********************************************** 初始化部分——setup函数 **********************************************/ void setup() { pinMode(ledPin,OUTPUT); } /********************************************** 执行部分——loop函数 **********************************************/ void loop() { digitalWrite(ledPin,HIGH); delay(1000); digitalWrite(ledPin,LOW); delay(1000); }

    2.3.2 数字输入如图2-16所示,这是一个最简单的数字输入例子,在例子中将一个开关或者按键连接至数字引脚2,当开关闭合或者按键按下的时候,点亮LED。

    代码清单2-19:digital input应用示例 /********************************************* digital input应用示例 This example code is in the public domain. *********************************************/ int ledPin = 13; int inPin =2; /********************************************** 初始化部分——setup函数 **********************************************/ void setup() { pinMode(ledPin,OUTPUT); pinMode(inPin,INPUT); } /********************************************** 执行部分——loop函数 **********************************************/ void loop() { if(digitalRead(inPin) == HIGH) { ?digitalWrite(ledPin,HIGH); delay(1000); ?digitalWrite(ledPin,LOW); delay(1000); } }

    2.3.3 大电流输出如图2-17所示,有时候需要使用Arduino控制超过40mA电流的设备。这个时候需要使用一个MOSFET或者晶体管来开关大电流负载。代码清单2-20中,Arduino每秒快速地开关MOSFET 5次。

    代码清单2-20:high current output应用示例

    /******************************************** high current output应用示例 This example code is in the public domain. *********************************************/ int outPin = 5; /********************************************** 初始化部分——setup函数 **********************************************/ void setup() { pinMode(outPin,OUTPUT); } /********************************************** 执行部分——loop函数 **********************************************/ void loop() { for(int i=0;i<=5;i++) { digitalWrite(outPin,HIGH); delay(250); ?digitalWrite(outPin,LOW); delay(250); } delay(1000); }

    2.3.4 PWM输出PWM(Pulse Width Modulation)可以产生类似于模拟输出的效果,可以用PWM控制LED逐渐由暗变亮,也可以由PWM控制伺服电机。代码清单2-21是使用for循环语句让LED逐渐由暗变亮,再由亮变暗。电路示例如图2-18所示。

    代码清单2-21:pwm output应用示例

    /******************************************** pwm output应用示例 This example code is in the public domain. *********************************************/ int ledPin = 9; /********************************************** 初始化部分——setup函数 **********************************************/ void setup(){} /********************************************** 执行部分——loop函数 **********************************************/ void loop() { for(int i=0;i<=255;i++) { analoglWrite(ledPin,i); delay(100); } for(int i=255;i>=0;i--) { analoglWrite(ledPin,i); delay(100); } }

    2.3.5 电位器模拟输入如图2-19所示,使用一个电位计以及Arduino的一个模拟输入端口可以读取0~1024范围的模拟值。代码清单2-22中使用一个电位计来控制LED的闪烁频率。

    代码清单2-22:potentiometer input应用示例

    /******************************************** potentiometer input应用示例 This example code is in the public domain. *********************************************/ int potPin = 0; int ledPin = 13; /********************************************** 初始化部分——setup函数 **********************************************/ void setup() { pinMode(ledPin,OUTPUT); } /********************************************** 执行部分——loop函数 **********************************************/ void loop() { digitalWrite(ledPin,HIGH); delay(analogRead(potPin)); digitalWrite(ledPin,LOW); delay(analogRead(potPin)); }

    2.3.6 可变电阻输入很多种传感器都使用可变电阻,代码清单2-23中使用一个函数读取模拟输入端口,并使用函数返回值控制LED的渐变过程。示例电路如图2-20所示。

    代码清单2-23:variable resistor input应用示例

    /******************************************** variable resistor input应用示例 This example code is in the public domain. *********************************************/ int ledPin = 9; int analogPin = 0; /********************************************** 初始化部分——setup函数 **********************************************/ void setup(){} /********************************************** 执行部分——loop函数 **********************************************/ void loop() { for(int i=0;i<=255;i++) { analoglWrite(ledPin,i); delay(delayVal()); } for(int i=255;i>=0;i--) { analoglWrite(ledPin,i); delay(delayVal()); } } int delayVal() { int v; v = analogRead(analogPin); v /= 8; return v; }``` **2.3.7 伺服输出** Hobby Servo是一种可以独立工作的电机,只要每隔20ms给它一个脉冲,就可以让它在0~180°范围内进行旋转。示例电路如图2-21所示。代码清单2-24中使用一个servoPulse()函数让电机从10°转到170°,然后再返回0°。 ![image](https://yqfile.alicdn.com/f58560204a151315783de7393d22c822b60f8ccb.png) 代码清单2-24:servo output应用示例

    /** servo output应用示例

    This example code is in the public domain.*/int servoPin = 2;int myAngle;int pulseWidth;/**

    初始化部分——setup函数

    **/void setup(){

    pinMode(servoPin,OUTPUT);

    }/**

    执行部分——loop函数

    **/void servoPulse(int servoPin, int myAngle){

    pulseWidth = (myAngle * 10) + 600; digitalWrite(servoPin,HIGH); delayMicroseconds(pulseWidth); digitalWrite(servoPin,LOW);

    }void loop(){

    for(myAngle =10;myAngle<=170;myAngle++) { servoPulse(servoPin,myAngle); delay(20); } for(myAngle =170;myAngle>=10;myAngle--) { servoPulse(servoPin,myAngle); delay(20); }

    }

    相关资源:《Arduino与LabVIEW开发实战》PDF 电子书 配套代码
    最新回复(0)