这可能是一个初学者的问题(我没有为此而去学校),但是现在它已经拖延了两天。
我正在Arduino写一个草图来移动一个机器人。我将我的职位存储在像
这样的数组中int joint1[180];
如果所有内容都在robot.ino中,我就完美地运行并运行了,但是现在我想把这个数组放在一个自制的库stringer.h
和stringer.cpp
中但是从它中访问它。 ino让其他人更容易理解。
重新定义的问题我以字符串的形式从sd读出一个自制的jcode我把这些值放到一个int白色的toint命令然后我将这个值存储在7个数组joint1 [180] joint2 [180]等现在我想在我的主脚本robot.ino中使用数组如何访问数组whitin stringer.ccp或者我将数组放在我的.ino文件中并使stringer发送一个字符串到robot.ino并将其分配到那里... ..这使得stringer中的其他功能真的很难?
测试情况 globals.h
//#include "Arduino.h"
//#include "StandardCplusplus.h"
//#include <vector>
#include "globals.h"
extern int Joint1[180];
extern int Joint2[180];
extern int Joint3[180];
extern int Joint4[180];
extern int Joint5[180];
extern int Joint6[180];
extern int Slomo[180];
globals.cpp
//#include "Arduino.h"
//#include "StandardCplusplus.h"
//#include <vector>
#include "globals.h"
int Joint1[180];
int Joint2[180];
int Joint3[180];
int Joint4[180];
int Joint5[180];
int Joint6[180];
int Slomo[180];
tester.ino
//#include "StandardCplusplus.h"
#include <globals.h>
int check = 100;
int temp = 0;
void setup() {
for (int p = 0;p < check; p++){
Joint1[p] = p + 33;}
}
void loop() {
if (temp < check){Serial.println(Joint1[temp]);temp = temp + 1;}
}
另一种方式
globals.h
#include "Arduino.h"
#include "StandardCplusplus.h"
#include <vector>
#include "globals.h"
extern std::vector<int> Joint1;
extern std::vector<int> Joint2;
extern std::vector<int> Joint3;
extern std::vector<int> Joint4;
extern std::vector<int> Joint5;
extern std::vector<int> Joint6;
extern std::vector<int> Slomo;
globals.cpp
#include "Arduino.h"
#include "StandardCplusplus.h"
#include <vector>
#include "globals.h"
std::vector<int> Joint1(180);
std::vector<int> Joint2(180);
std::vector<int> Joint3(180);
std::vector<int> Joint4(180);
std::vector<int> Joint5(180);
std::vector<int> Joint6(180);
std::vector<int> Slomo(180);
我会收到错误:#include嵌套太深
答案 0 :(得分:0)
不要使用数组。他们很糟糕,尤其是因为你不熟悉编程。请改用std::vector
。在头文件中声明向量,如globals.h
:
#ifndef GLOBALS_H
#define GLOBALS_H
#include <vector>
extern std::vector<int> joint1;
#endif
请注意extern
关键字。这意味着这只是joint1
的声明。在源文件中定义向量,如globals.cpp
:
#include "globals.h"
std::vector<int> joint1(180);
编译时,请务必将globals.cpp
与其他来源一起编译。
在您需要访问joint1
的源文件中,请务必:
#include "globals.h"
您可以像使用数组一样访问向量中的元素:
joint1[index]
虽然你说你不熟悉编程,但我建议你改用vector的at()
函数:
something = joint1.at(index);
joint1.at(index) = something;
// etc.
我推荐它,因为它会检查您是否尝试访问向量之外的元素。例如,如果您尝试:
joint.at(200)
程序中止,例外。
现在,有了这样说,拥有这样的全局变量变得乏味且难以使用。最好不要使用全局变量,而是定义函数来获取函数参数中所需的数据。
如果您无法访问C ++标准库,因此std :: vector不可用,那么您可以继续使用数组。 extern
中的globals.h
声明:
extern int joint1[180];
和.cpp中的定义:
int joint1[180];
不再有.at()
或其他任何内容。只是简单的[index]
。