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

简介:

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

2.3 Arduino C语言开发示例

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

image

代码清单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。

image

代码清单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次。

image

代码清单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所示。

image

代码清单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的闪烁频率。

image

代码清单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所示。

image

代码清单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);
      }

}

相关文章
|
8月前
|
C语言
对链表使用插入排序的C语言实现示例
对链表使用插入排序的C语言实现示例
|
8月前
|
C语言
最简单的C语言程序示例
最简单的C语言程序示例
175 0
|
5月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
2月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
55 6
|
2月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
52 1
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
53 1
|
2月前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
51 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
53 2
|
2月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。