c++编程(1)之玩转led点灯

        在之前的章节中,小编带领大家学习了:如何构建arduino的c++开发环境-CSDN博客

        今天小编带领大家开始学习c++编程的第一节,玩转led电灯。arduino uno核心板是一个高度集成,功能丰富的模块,来看下他的功能分布:

c++编程(1)之玩转led点灯_第1张图片

        小编之前为大家展示的arduino核心板是国产化的板子,通用引脚排列和功能是相同。完全兼容。同样提供了丰富的外设,串口uart、i2c、spi、adc和pwm等,这些外设,在后续的课程中,都会为大家一一讲解。

一、代码结构分析

c++编程(1)之玩转led点灯_第2张图片

        大家可以看到我们arduino工程的初始代码,主要用两个默认函数组成,分别是:setup()和loop()。通过英文单词可以翻译为  设置(初始化)、循环。如果学习过小编之前的课程,大家就会发现,这两个函数和我们的microbit的开发环境的两个指令很相似的。

c++编程(1)之玩转led点灯_第3张图片

        没有错,他们两个语句是相同功能的。setup和当开机时,作用都是在系统上电时立马执行一遍,可以把我们初始化代码放到这里,进行执行。

        loop和无限循环,作用都是当系统上电时,无限循环的执行,我们可以把我们的核心代码放到这里执行。

二、项目实战

        学习控制小灯,就必须要了解我们主控芯片(单片机),的通用引脚概念和作用,大家可以参考学习之前的教程:智能硬件之通用引脚(GPIO)-CSDN博客 

        这节项目会应用到智能模块中的智能电路(1)之指示灯模块-CSDN博客,大家可以参考学习,就知道该如何将主控芯片和指示灯模块进行连线了。

2.1、闪烁小灯

        控制led灯亮灭,将arduino核心板上的GND和流水灯模块的GD连接,将核心板的0脚和流水灯的L1连接。

void setup() {
  pinMode(0, OUTPUT);
}

void loop() {
  digitalWrite(0, HIGH);
  delay(500);                   
  digitalWrite(0, LOW); 
  delay(500);    
}

        ①pinMode(0, OUTPUT);  设置引脚0为输出模式;

        ②digitalWrite(0, HIGH); 设置引脚0为高电平,也就是状态1,输出3.3V电压;

 实际效果如下:

2.2、流水灯

        控制多个led灯,依次点亮,将arduino核心板上的GND和流水灯模块的GD连接,将核心板的0、1、2脚分别与流水灯的L1、L2、L3连接。

void setup() {
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
}

void loop() {
  digitalWrite(0, HIGH);
  digitalWrite(1, LOW);
  digitalWrite(2, LOW);
  delay(500);                   
  digitalWrite(0, LOW); 
  digitalWrite(1, HIGH); 
  digitalWrite(2, LOW); 
  delay(500);    
  digitalWrite(0, LOW); 
  digitalWrite(1, LOW); 
  digitalWrite(2, HIGH); 
  delay(500);   
}

        实际效果如下:

2.3、呼吸灯

        控制led灯,由暗到亮,将arduino核心板上的GND和流水灯模块的GD连接,将核心板的3脚和流水灯的L1连接,因为3脚支持PWM输出,呼吸灯的原来就是通过给led输出0-3.3V的电压,让其亮度从暗渐渐变亮,PWM相关知识点会在后续章节分享。

int led = 3;           
int brightness = 0;    
void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  analogWrite(led, brightness);
  brightness++;
  if (brightness >= 255) {
    brightness = 0;
  }
  delay(20);
}

         analogWrite(led, brightness);函数作用就是给引脚输入不同的电压,因为brightness变量是一个变换的值,从0-255依次加1。增加延时20ms,作用是为了让大家看到呼吸灯变换的过程,否则亮度会变换的很快,肉眼看不出来,可能只能看到小灯一直亮着。

        if语句是一个逻辑判断,保证brightness值不能大于255,否者从新赋值0。

        实际效果如下:

三、c++语法小课堂

3.1、变量定义

         顾名思义,变量(Variable)是可以改变的量,与之相对的是不可改变的常量。变量可以理解为数据的容器。

        变量名是由用户自己定义的标识符。其命名规则如下:

        ①首字符:变量名必须以字母或下划线(_)开始。数字不能作为变量名的首字符。

        ②字母和数字:变量名的其余部分可以由字母、数字和下划线组成。这意味着变量名可以包含字母(大写或小写)、数字和下划线。

        ③关键字冲突:变量名不能与 C++ 的保留关键字相同。例如,int, class, return 等都是 C++ 的关键字,不能用作变量名。

        ④大小写敏感:C++ 是一种区分大小写的编程语言。因此,Variable 和 variable 是两个不同的变量名。

        ⑤长度限制:理论上,变量名的长度没有限制,但应避免使用过长的变量名,以便提高代码的可读性。

        ⑥语义命名:虽然不是严格的规则,但建议变量名能够反映其用途或存储的内容。使用描述性的变量名可以使代码更易于理解和维护。

        ⑦命名约定:不同的组织和项目可能有自己的命名约定。这些约定可能涉及单词之间的分隔(例如使用下划线或驼峰命名)以及大小写的使用。

合法变量名:  _ab、abc、ABC、ab123等

不合法变量名:1abc、@abc、class等

3.2、库文件导入

        库的作用,就是把写好的代码封装好成库,后面在使用的时候,就可以通过导入库,来进行调用使用了,不用重复写代码了。c++提供倒入库的语法是通过#include语句

        预处理阶段,#include会将头文件拷贝到本文件内进行运行。

        #include有两种格式:

        格式①:#include

        如果我们在编译的时候用/home/tarena/include hello.c路径文件,那么系统会先到指定的目录找头文件进行复制,如果在指定文件里面找不到头文件,那么再去系统目录里面找。

        格式②:#include “xxx.h”

        如果我们在编译的时候用/home/tarena/include hello.c路径文件,那么系统会先到指定的目录找头文件进行复制,如果在指定文件里面找不到头文件,再去当前目录去找,当前目录也找不到,再去系统目录里面找。

        其实这两种模式,对于第二种格式,他包含了第一种格式。

3.3、方法(函数)的调用

        定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用执行。如下实例调用了printme()函数:

#include 
using namespace std;

// 函数返回两个数中较大的那个数
int max(int num1, int num2) 
{
   // 局部变量声明
   int result;
   if (num1 > num2)
      result = num1;
   else
      result = num2;
   return result; 
}

int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
   int ret;
   // 调用函数来获取最大值
   ret = max(a, b);
   cout << "Max value is : " << ret << endl;
   return 0;
}

        更多的c++的语法,可以参考这个学习,简单明了:C++ 教程 | 菜鸟教程 (runoob.com)

,小编后续课程会以应用为主,编程语言的实战应用。更多语言的语法问题可以参考其他文章学习。

 

你可能感兴趣的:(c++,开发语言,单片机,嵌入式硬件,人工智能,物联网,mcu)