极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30733|回复: 11

写Arduino扩展库编译时出错,求教。

[复制链接]
发表于 2013-8-25 07:08:28 | 显示全部楼层 |阅读模式
本帖最后由 ntwhq 于 2013-8-25 10:29 编辑

         编程时想自己写一个库,但编译时总是出错,找不出原因,我就把为LED闪烁程序做试验写了一个最简单的库,但编译时还是出现同样的错误,请大家帮我找找原因。
        两个库文件:
        LED.h:

  1. #ifndef LED_h
  2. #define LED_h
  3. #if ARDUINO >= 100
  4. #include "Arduino.h"
  5. #else
  6. #include "WProgram.h"
  7. #endif
  8. class LED
  9. {
  10.   byte _pin;
  11.   public:
  12.   LED(byte pin);
  13.   void on();
  14.   void off();
  15. };
  16. #endif
复制代码


LED.cpp:

  1. #include "LED.h"
  2. LED::LED(byte pin)
  3. {
  4.         _pin=pin;
  5.         pinMode(pin,OUTPUT);
  6. }
  7. void LED::on()
  8. {
  9.         digitalWrite(_pin,HIGH);
  10. }

  11. void LED::off()
  12. {
  13.         digitalWrite(_pin,LOW);
  14. }
复制代码


程序代码:

  1. #include <LED.h>
  2. void setup()
  3. {
  4.   LED.LED(13);
  5. }
  6. void loop()
  7. {
  8.     LED.on();
  9.     delay(1000);
  10.     LED.off();
  11.     delay(1000);
  12. }
复制代码


编译后出现如下界面:



出错信息为:
LED.ino: In function 'void setup()':
LED:4: error: expected unqualified-id before '.' token
LED.ino: In function 'void loop()':
LED:8: error: expected unqualified-id before '.' token
LED:10: error: expected unqualified-id before '.' token

大致意思是 .前的LED不合格(不合法),反复试了也查不出错误的原因,看看和其它一些扩展库的结构也没有什么不同,就是不能正常运行,请各位高手指教一下错在哪里,谢谢!

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-8-25 09:18:05 | 显示全部楼层
需要申明对象
  1. #ifndef LED_h
  2. #define LED_h
  3. #if ARDUINO >= 100
  4. #include "Arduino.h"
  5. #else
  6. #include "WProgram.h"
  7. #endif
  8. class LED
  9. {
  10.   byte _pin;
  11.   public:
  12.   LED(byte pin);
  13.   void on();
  14.   void off();
  15. }led;
  16. #endif
复制代码
然后应用程序里大写的LED改小写。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 09:51:16 | 显示全部楼层
本帖最后由 ntwhq 于 2013-8-25 09:57 编辑
pathletboy 发表于 2013-8-25 09:18
需要申明对象然后应用程序里大写的LED改小写。


谢谢!这样改了没有用。空了您帮我试一下,谢谢!



本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2013-8-25 09:59:45 | 显示全部楼层
哦,构造函数不该由你调用,另外写个函数设置pin,或者你手工申明对象。
  1.     #ifndef LED_h
  2.     #define LED_h
  3.     #if ARDUINO >= 100
  4.     #include "Arduino.h"
  5.     #else
  6.     #include "WProgram.h"
  7.     #endif
  8.     class LED
  9.     {
  10.       byte _pin;
  11.       public:
  12.       LED(byte pin);
  13.       void on();
  14.       void off();
  15.     };
  16.     #endif
复制代码
  1.     #include <LED.h>
  2.     LED led(13);
  3.     void setup()
  4.     {

  5.     }
  6.     void loop()
  7.     {
  8.         led.on();
  9.         delay(1000);
  10.         led.off();
  11.         delay(1000);
  12.     }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 10:15:32 | 显示全部楼层
可以了,十分感谢!不明白为什么要改小写,而且 LED led(13)中间不能加"."
回复 支持 反对

使用道具 举报

发表于 2013-8-25 10:20:25 | 显示全部楼层
ntwhq 发表于 2013-8-25 10:15
可以了,十分感谢!不明白为什么要改小写,而且 LED led(13)中间不能加"."

这个属于c/c++语法,建议你学习下,LED是你自己申明的类,然后申明一个类对象led,c/c++语法规定,大小写敏感,也就是LED和led是2个不同的标识符。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 10:31:43 | 显示全部楼层
本帖最后由 ntwhq 于 2013-8-25 10:34 编辑
pathletboy 发表于 2013-8-25 10:20
这个属于c/c++语法,建议你学习下,LED是你自己申明的类,然后申明一个类对象led,c/c++语法规定,大小写 ...


谢谢!我知道大小写有区别的,我库里是大写,怎么到程序里就要改成小写呢?对象led(小写)在哪里申明了?是这一句“LED led(13)”附带申明了?
回复 支持 反对

使用道具 举报

发表于 2013-8-25 10:33:22 | 显示全部楼层
ntwhq 发表于 2013-8-25 10:31
谢谢!我知道大小写有区别的,我库里是大写,怎么到程序里就要改成小写呢?

你库里的是你自己申明的“类”,你操作不能操作类,要操作类的对象,所以你要申明一个类的对象叫做led。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 10:35:37 | 显示全部楼层
本帖最后由 ntwhq 于 2013-8-25 10:36 编辑
pathletboy 发表于 2013-8-25 10:33
你库里的是你自己申明的“类”,你操作不能操作类,要操作类的对象,所以你要申明一个类的对象叫做led。


对象led是自动形成的?是这一句“LED led(13)”附带申明了对象led?
回复 支持 反对

使用道具 举报

发表于 2013-8-25 10:40:08 | 显示全部楼层
ntwhq 发表于 2013-8-25 10:35
对象led是自动形成的?是这一句“LED led(13)”附带申明了对象led?

需要你自己申明创建对象,你把c++基本语法看下就明白了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 10:42:15 | 显示全部楼层
本帖最后由 ntwhq 于 2013-8-25 14:54 编辑
pathletboy 发表于 2013-8-25 10:40
需要你自己申明创建对象,你把c++基本语法看下就明白了。


好的,我自己再去学习,谢谢您!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-30 20:31:44 | 显示全部楼层
本帖最后由 ntwhq 于 2017-3-30 20:52 编辑

                 回复错了
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 09:02 , Processed in 0.042830 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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