血阳 发表于 2015-4-25 11:56:00

驱动模块,加入库以后编译出错为什么?(L2930D驱动模块)

本帖最后由 血阳 于 2015-4-28 01:11 编辑

附图:



我用的是L2930D驱动模块(L293D motor control shield) 附图:
然后,按照教程,安装库文件。
安装库文件到Arduino-IDE中!步骤很简单:
只要将库文件解压到Arduino安装目的的libraries目录下 。
例如:D:\ProgramFiles\arduino-0021\libraries
然后重新打开ArduinoIDE就可以使用了。
附:]L2930D驱动模块的库

然后烧录简单程序,结果就报错了。这是为啥啊?报的错有的还是库文件里面如delay什么的没定义···懵逼了。

程序代码:

#include <MSMotorShield.h>


MS_DCMotor motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm

void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Motor test!");

motor.setSpeed(200); // set the speed to 200/255
}

void loop() {
Serial.print("tick");

motor.run(FORWARD); // turn it on going forward
delay(1000);

Serial.print("tock");
motor.run(BACKWARD); // the other way
delay(1000);

Serial.print("tack");
motor.run(RELEASE); // stopped
delay(1000);
}



然后报错的截图:



极度感谢@tsaiwn的耐心指导!帮助我解决了问题!

tsaiwn 发表于 2015-4-25 12:16:23



可能你的库太旧,
没有 #inlcude <Arduino.h>
你自己在你 sketch 主程序的第一句写:
#inlcude <Arduino.h>
就是最前面变这样:

#inlcude <Arduino.h>
#include <MSMotorShield.h>

这样应该就可以了

血阳 发表于 2015-4-25 13:07:11

tsaiwn 发表于 2015-4-25 12:16 static/image/common/back.gif
可能你的库太旧,
没有 #inlcude
你自己在你 sketch 主程序的第一句写:


这样了也不行,报错错的不是这个编译器里面的,看报错提示,是错在库文件里面,说里面好多东西都没定义。

林定祥 发表于 2015-4-25 18:13:55

血阳 发表于 2015-4-25 13:07 static/image/common/back.gif
这样了也不行,报错错的不是这个编译器里面的,看报错提示,是错在库文件里面,说里面好多东西都没定义。

arduino是基于JAVA,因此Arduino相关的文件路径不能放在有中文的目录下,这样他会找不到的

tsaiwn 发表于 2015-4-25 19:08:31

血阳 发表于 2015-4-25 13:07 static/image/common/back.gif
这样了也不行,报错错的不是这个编译器里面的,看报错提示,是错在库文件里面,说里面好多东西都没定义。



因为旧的库用 #include "WProgram.h"

但是 1.0 版本之后必须 #include "Arduino.h"
如果直接在你 sketch 主程序加入 #include "Arduino.h" 还是不行
表示库的 .cpp 里面也需要 #include "Arduino.h"

那你找到库的 .h 和 .cpp
把里面 #include "WProgram.h"
都改为 #include "Arduino.h"

szpapas 发表于 2015-4-25 19:39:56

说明是还不适合玩IDE方式,换一个图形方式的吧。

tsaiwn 发表于 2015-4-26 01:00:54

血阳 发表于 2015-4-25 13:07 static/image/common/back.gif
这样了也不行,报错错的不是这个编译器里面的,看报错提示,是错在库文件里面,说里面好多东西都没定义。

我刚刚看了那库
https://github.com/zhaojinghua/Arduino/blob/master/MSMotorShield/MSMotorShield.cpp#L7
确实是写给 IDE 00xx 版本用的
要用在 IDE 1.0.x 之后,
必须把 MSMotorShield.cpp 的 Line 7
#include "WProgram.h"
改为
#include "Arduino.h"

这样就好了, 只要改一行 !
MSMotorShield.h 内没有要改的:)

血阳 发表于 2015-4-26 10:26:05

tsaiwn 发表于 2015-4-26 01:00 static/image/common/back.gif
我刚刚看了那库
https://github.com/zhaojinghua/Arduino/blob/master/MSMotorShield/MSMotorShield.c ...

嗯嗯,还有是不是必须把arduino的软件放在英文目录下才行啊?我放在中文目录下好像也不能引用。

tsaiwn 发表于 2015-4-26 18:22:50

血阳 发表于 2015-4-26 10:26 static/image/common/back.gif
嗯嗯,还有是不是必须把arduino的软件放在英文目录下才行啊?我放在中文目录下好像也不能引用。

不必 !
前面那位林定祥大神说的不太对 :(
只要 Arduino IDE 根目录开始之后不要用中文目录即可
IDE根目录以前有中文目录是 OK 的(就是你原先的目录安排是 OK 的!)
还有, 你的 Sketch 程序码如果要放中文目录, 必须隔一层,
例如, 假设你草稿码 Sketch 是 ggyy.ino
可以放在:
   大学\我的程序\ggyy\ggyy.ino
但是程序文件名不可以有中文,
例如以下是不可以:
   mywork\university\gg中yy\gg中yy.ino

血阳 发表于 2015-4-26 23:43:35

tsaiwn 发表于 2015-4-26 18:22 static/image/common/back.gif
不必 !
前面那位林定祥大神说的不太对
只要 Arduino IDE 根目录开始之后不要用中文目录即可


Soga~长见识了~

tsaiwn 发表于 2015-4-27 00:07:11

血阳 发表于 2015-4-26 23:43 static/image/common/back.gif
Soga~长见识了~

那你的问题解决了没啊 ?

血阳 发表于 2015-4-27 00:29:55

tsaiwn 发表于 2015-4-27 00:07 static/image/common/back.gif
那你的问题解决了没啊 ?

木有,我不知道是我电脑问题还是什么,就连我引用原文件里面的库都会报错。
你能不能试试,一楼这个程序在你电脑会不会报错啊T T.库文件在原文那里我也发了的。

tsaiwn 发表于 2015-4-27 01:06:21

血阳 发表于 2015-4-27 00:29 static/image/common/back.gif
木有,我不知道是我电脑问题还是什么,就连我引用原文件里面的库都会报错。
你能不能试试,一楼这个程 ...


No error if changed to use "Arduino.h"

See Fig. below ...

tsaiwn 发表于 2015-4-27 01:10:09

tsaiwn 发表于 2015-4-27 01:06 static/image/common/back.gif
No error if changed to use "Arduino.h"

See Fig. below ...


看到没
我故意用中文目录喔 !!
只要修改 libraries\MSMotorShield\MSMotorShield.cpp
把里面 WProgram.h 改为 Arduino.h
然后就 OK 了 !

tsaiwn 发表于 2015-4-27 01:13:23

tsaiwn 发表于 2015-4-27 01:10 static/image/common/back.gif
看到没
我故意用中文目录喔 !!
只要修改 libraries\MSMotorShield\MSMotorShield.cpp





所以我的 MSMotorShield 库目录在

D:\Temp\tsaiwn\001NCTU_交大\arduino故意中文\arduino-1.0.6\libraries\MSMotorShield
页: [1] 2
查看完整版本: 驱动模块,加入库以后编译出错为什么?(L2930D驱动模块)