编写arduino独立工程,不使用原库支持

本文介绍了Arduino编程的基本规范,包括目录结构、主文件代码框架以及如何进行多文件管理。详细阐述了如何封装代码模块,以LED控制为例,创建了LED.h和LED.cpp文件,实现了LED对象的控制。此外,还展示了如何在主文件LED.ino中实例化并使用这个LED类,实现LED的闪烁控制。最后,实验结果显示LED成功按预期闪烁10次后熄灭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 目录规范

当创建一个空的工程,先按下ctrl+s保存一下。这个时候弹出对话框,命名工程。假如命名为LED,并保存在我自己的Arduino工作目录下D:\Prj_Arduino。于是IDE会自动帮我们在Prj_Arduino下创建1个文件夹,并将sketch主文件放在里面,而且主文件和文件夹同名。
在这里插入图片描述

2 主文件代码框架规范

每一个Arduino程序(Sketch)都有1个主文件,后缀为 .ino ,它是程序的setup 函数和 loop函数所在的文件。
代码框架如下:

void setup() {
  // put your setup code here, to run once:
  //初始化操作代码放在setup函数中,他们将在程序启动的第一步得到执行 并只执行一次
}

void loop() {
  // put your main code here, to run repeatedly:
  //将程序的主要逻辑代码,放在loop里。他们将会反复执行下去。
}

有C/C++开发经验的人看到这个程序框架会愣住:我的main函数去哪里呢

Arduino 为了让更多的人能够使用Arduino平台开发出好玩的东西出来,绞尽脑汁降低门槛,它隐藏了程序的细节,使得开发者将注意力放在实现上。

注意:在Arduino IDE的安装目录下可以找到main.cpp这个代码模板文件,main函数就位于此。文件位置:{Arduino安装目录}\hardware\arduino\avr\cores\arduino\main.cpp(本人工程中没有找到main.cpp文件)。

2.1 在项目中使用多文件

有时会程序越写越大,越大越乱。多文件管理可以解决这个麻烦。Arduino程序可以有多个源代码文件,但只有 1个 主文件,也就是存放 setup、loop函数的.ino文件。

为了使得代码更清晰,我们让主文件用来控制程序的主要逻辑部分,而把具体的细节封装成单个模块,存放在其他的文件中,这样方便管理。

2.2 使用传统的 C/C++分离式文件

这种方式下,对于一个代码模块,我们需要一对文件:源文件和头文件,即: .c 和.h 或者 .cpp 和 .h 。前者是C语言风格,后者是对会使用C++来说的。官方貌似推崇我们使用C++编写Arduino代码,无论是Arduino 的从标准库,还是教程中,都透露出一股强烈的OOP气息。所以我下面使用C++风格来举例子。

例如我们想要将LED的控制封装成一个模块。一开始我们需要创建2个文件 :LED.h 、LED.cpp。
库文件位置:C:\Users\Administrator\Documents\Arduino\libraries
在这里插入图片描述
在这里插入图片描述

2.2.1 LED.h

/*******************
LED.h

*******************/

#ifndef _LED_H__
#define _LED_H__

//导入Arduino核心头文件
#include"Arduino.h"  


class LED
{
     private:
          byte pin;        //控制led使用的引脚
     
     
     public:
          
          LED(byte p , bool state=LOW );   //构造函数
          
          ~LED();          //析构函数

          byte getPin();   //获取控制的引脚
          
          void on();      //打开LED

          void off();     //关闭LED

          bool getState();  //获取LED状态
          void disattach(); //释放引脚与LED的绑定,使得引脚可以控制其他的东西

};


#endif

2.2.2 LED.cpp

/*****************
LED.cpp

******************/

#include"LED.h"
#include"Arduino.h"


LED::LED(byte p,bool state):pin(p)
{
   
   pinMode(pin,OUTPUT);
   digitalWrite(pin,state);
}

LED::~LED()
{
    disattach();
} 
         
void LED::on()
{
    digitalWrite(pin,HIGH);
}

void LED::off()
{
   digitalWrite(pin,LOW);
}

bool LED::getState()
{
    return digitalRead(pin);
}

void LED::disattach()        //引脚回收,恢复到上电状态
{
    digitalWrite(pin,LOW);
    pinMode(pin,INPUT);
}

2.2.3 LED.ino(主文件)

实例化1个LED对象,用7号叫控制,让他闪烁10次,并在串口打印出它的状态。10次完毕后释放回收引脚

#include<LED.h>                      //注意,由于LED控制模块已经是标准库了,所以使用尖括号<> 包含

LED led(7);
byte count =0;

void setup() {
   Serial.begin(9600);
}

void loop() {

   if(count<10){
     led.on();
     delay(300);
     Serial.println(led.getState(),DEC);
     
     led.off();
     delay(300);
     Serial.println(led.getState(),DEC);
     
     ++count;
     if(count==10)
        led.disattach();
   }
}

3 实验结果

标记为TX的灯,闪烁10次后熄灭。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座硅农(Leo ICer)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值