学C++就是为了写arduino的库,其中比较主要用到的是类的编写。
先找到arduino编写库的参考,在arudino 官网给出了morse电码的一个例子,咱们没有io直接用cout代替。
Morse电码例子程序的地址如下:
https://docs.arduino.cc/learn/contributions/arduino-creating-library-guide
在Clion中可以直接新建class如图1所示
图1:clion新建c++类
图2:新建C++类添加到first_demo
//
// Created by xutong on 2022/12/13.
//
#ifndef FIRST_DEMO_MORSE_H
#define FIRST_DEMO_MORSE_H
#include "iostream"
class morse {
//public 代表公共可见
public:
static void dot();
static void dash();
//private 私有变量不可见
private:
static void initMorse();
};
#endif //FIRST_DEMO_MORSE_H
|
Morse.h 文件
//
// Created by 许同 on 2022/12/13.
//
#include "morse.h"
#include "iostream"
void morse::dot()
{
std::cout<<"high \r\n";
std::cout<<"delay 250ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
void morse::dash()
{
std::cout<<"high \r\n";
std::cout<<"delay 1000ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
// private 私有变量
void morse::initMorse()
{
std::cout<<"Init \r\n";
}
|
Morse.c文件
图3:运行结果
在主程序中,调用私有变量会报错,如下所示
图4:建议将Morse变量改为public变量
#include <iostream>
#include "morse.h"
int main() {
//创建一个名为mos的morse对象
morse mos;
//调用对象
mos.dash();
mos.dot();
return 0;
}
|
或者创建对象,直接调用对象函数就行。但仅仅是这个看不出来类的便利性,咱们继续给他传入参数。这样不同对象打印值细微差别。
//
// Created by 许同 on 2022/12/13.
//
#ifndef FIRST_DEMO_MORSE_H
#define FIRST_DEMO_MORSE_H
#include "iostream"
class morse {
//public 代表公共可见
public:
void dot();
void dash();
void initMorse(char name);
//private 私有变量不可见
private:
char Names;
};
#endif //FIRST_DEMO_MORSE_H
|
新建私有变量Names,Names是对其它东西不可见的,相当于Class的全局变量,在dot()和Dash中可以直接调用。
//
// Created by 许同 on 2022/12/13.
//
#include "morse.h"
#include "iostream"
void morse::dot()
{
std::cout<<"high ";
printf("%c\r\n",Names);
std::cout<<"delay 250ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
void morse::dash()
{
std::cout<<"high ";
printf("%c\r\n",Names);
std::cout<<"delay 1000ms \r\n";
std::cout<<"low \r\n";
std::cout<<"delay 250ms \r\n";
}
void morse::initMorse(char name)
{
printf("%c\r\n",name);
Names=name;
std::cout<<"Init OK \r\n";
}
|
以上代码在Dash和Dot中调用Names,就可以直接使用了。
图5:传入不同变量的运行结果
#include <iostream>
#include "morse.h"
int main() {
//创建一个名为mos的morse对象
morse mos;
//给mos传入字符A
mos.initMorse('a');
//调用对象
mos.dash();
mos.dot();
//创建一个名为mosb的morse对象
morse mosb;
//给mosb传入字符B
mosb.initMorse('b');
//调用对象
mosb.dash();
mosb.dot();
return 0;
}
|
主程序
参考文档
C++prime plus 第6版
Arduino :Writing a Library for Arduino