极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 76668|回复: 18

使用Arduino IDE编写类

[复制链接]
发表于 2011-12-19 02:37:55 | 显示全部楼层 |阅读模式
Arduino支持C/C++,因此理所当然的支持C++的class,如果是经常要用到的类,可以把它们封装成类库,便于日后调用,关于类库的编写,请参见坛子里其它帖子。有时候,有些class不一定是经常要用到的,直接跟主程序搁一起就可以。

编写的方式有很多种,可以用C++的IDE来写,比如VS Studio、Eclipse、Code::Blocks等等,也可以用像Notepad、Notepad2、Source Insight等文本工具,下面要介绍的方法是直接采用arduino的IDE,目的是帮助大家更加熟悉它。

Arduino的IDE支持多文件管理,因此我们可以利用它来编写类。下面我们以建立一个Color类的例子来描述创建经过。

打开IDE,在菜单栏下面有一排button,最右边那个箭头样式的就是用来创建新的tab页,也就是建立一个新的文件,


单击它之后,便会出现一个提示你键入文件名的对话框,在这里写入文件名。我们先建立类的头文件Color.h,因此敲入Color.h,注意,一定不要忘了文件的扩展名.h,不然IDE会自动加上arduino的扩展名.pde的。


接着我们在Color.h页中编写Color类的头文件,代码如下
  1. /*
  2.   颜色类,可以分别设置色彩的RGB分量

  3. */
  4. #ifndef COLOR_H  //预编译指令,防止重复定义类
  5. #define COLOR_H

  6. class Color
  7. {
  8. private:    //私有成员,用来保存色彩的RGB分量
  9.   unsigned int rValue;
  10.   unsigned int gValue;
  11.   unsigned int bValue;

  12. public:
  13.   Color(unsigned int r=255, unsigned int g=0, unsigned int b=0); //类的构造函数,与类名相同
  14.   void setRed(unsigned int value); //类的方法,设置或者读取色彩的RGB分量值
  15.   unsigned int getRed();
  16.   void setGreen(unsigned int value);
  17.   unsigned int getGreen();
  18.   void setBlue(unsigned int value);
  19.   unsigned int getBlue();

  20. };

  21. #endif // COLOR_H

复制代码
接着就可以建立一个新tab页,编写类的实现代码Color.cpp,步骤跟上面一样,就不啰嗦了。

大家在使用arduino的串口时,经常会用到Serial,其实它是串口类的实例,在某个地方创建之后,我们便可以直接使用。那我们也可以创建一些Color类的实例,比方讲,色彩中的白色、黑色、红色、绿色、蓝色,这几种颜色的RGB分量是固定,因此我们可以仿照Serial的使用方式来创建这几种颜色对象。

依照前面方式,我们新建一个tab页,起名为CommonColors.h,并引用Color.h,写入下面几行代码
  1. #include "Color.h"

  2. //定义一些常见颜色
  3. Color clRed(255,0,0);
  4. Color clGreen(0,255,0);
  5. Color clBlue(0,0,255);
  6. Color clWhite(255,255,255);
  7. Color clBlack(0,0,0);
复制代码
于是,我们在其它直接或间接引用了CommonColors.h的地方,就可以使用clRed、clGreen了。

写完之后,我们打开文件夹,便可以看到类的所有文件跟主程序文件在一起。这点跟库不一样,库文件是必须存放在libraries下面的与库名相同的文件夹下面。


下面我们举个小例子来测试一下
  1. #include "CommonColors.h"
  2. #include "Color.h"

  3. Color cl;
  4. void setup()
  5. {
  6.   Serial.begin(9600);
  7.   Serial.println(clRed.getRed());
  8.   Serial.println(cl.getRed());  //测试构造函数的默认值
  9. }

  10. void loop()
  11. {}
复制代码


这种方式的好处就是可以在同一个平台下立即编译,当然使用VS等IDE配上适当插件之后比在Arduino下面会更方便。本文只是起到抛砖引玉的作用,希望对大家理解Arduino有点帮助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2011-12-27 15:12:17 | 显示全部楼层
很好的帖子,谢谢分享!
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2011-12-19 02:41:10 | 显示全部楼层
贴上类的实现代码Color.cpp
  1. #include "Color.h"

  2. Color::Color(unsigned int r, unsigned int g, unsigned int b)
  3. {
  4.   rValue = r;
  5.   gValue = g;
  6.   bValue = b;
  7. }

  8. void Color::setRed(unsigned int value)
  9. {
  10.   rValue = value;
  11. }

  12. unsigned int Color::getRed()
  13. {
  14.   return rValue;
  15. }

  16. void Color::setGreen(unsigned int value)
  17. {
  18.   gValue = value;
  19. }

  20. unsigned int Color::getGreen()
  21. {
  22.   return gValue;
  23. }

  24. void Color::setBlue(unsigned int value)
  25. {
  26.   bValue = value;
  27. }

  28. unsigned int Color::getBlue()
  29. {
  30.   return bValue;
  31. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2011-12-19 08:54:54 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2011-12-19 09:41:21 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

发表于 2011-12-19 23:27:49 | 显示全部楼层
可以写类,太好了,哈哈
回复 支持 反对

使用道具 举报

发表于 2012-4-16 17:04:08 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2012-5-17 02:31:21 | 显示全部楼层
{:soso__3987895881530084490_4:} very good! 这样甚好!
回复 支持 反对

使用道具 举报

发表于 2012-9-18 09:53:02 | 显示全部楼层
长见识了,很好好好哦,继续加油
回复 支持 反对

使用道具 举报

发表于 2012-11-2 11:18:29 | 显示全部楼层
顶!以前自己写的类,在1.0.1中,如果直接放在libraries,老是出现各种错误,所以就只能将它们都放在一个文件里,看着老难受了,马上试一下这个!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-7 23:52:17 | 显示全部楼层
luckyhoho 发表于 2012-11-2 11:18
顶!以前自己写的类,在1.0.1中,如果直接放在libraries,老是出现各种错误,所以就只能将它们都放在一个文 ...

1.0/1.0.1等等新版本的IDE,相比较网上常见的0022版本来讲,修改的地方比较多,好多library可能在1.0版本中无法编译,越复杂的library,升级越麻烦
回复 支持 反对

使用道具 举报

发表于 2013-5-17 17:16:57 | 显示全部楼层
能帮忙解答一下这个问题吗
在编写类函数时,如何使用另一个类的实例
谢谢!
回复 支持 反对

使用道具 举报

发表于 2013-5-18 22:54:59 | 显示全部楼层

学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2014-3-12 21:58:19 | 显示全部楼层
学习 了!学习!
回复 支持 反对

使用道具 举报

发表于 2014-4-8 11:41:07 | 显示全部楼层
thank you!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 05:05 , Processed in 0.047724 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表