Acessing/Adressing Arduino 中带有字符串和整数的变量
Acessing/Adressing variables with strings and int in Arduino
已经有一个关于在 Arduino 中使用字符串寻址变量的问题,但给出的答案不适用于我的问题。
我有多个传感器(大约 14 个,数量可能会增加)连接到我的 Arduino,我还有继电器、引擎和 RFID。我正在创建一个函数来检查 all 传感器是否 active.
思路基本是这样的:
#define Sensor_1 2
#define Sensor_2 3
#define Sensor_3 4
#define Sensor_4 5
#define Sensor_5 6
int checkSensors(){
int all_active = 0;
int num_sens = 5;
int n;
int active_sens = 0;
for(n= 1; n <= num_sens; n++) {
if( !digitalRead("Sensor_" + n)) {
active_sens= active_sens+ 1;
}
else {
all_active = 0;
return ( all_active);
}
}
if(active_sens== num_sens) {
all_active = 1;
return(all_active);
}
}
问题是:我想对变量 Sensor_n 进行寻址,但找不到实现它的方法。我收到的错误消息是指 digitalRead("Sensor_" + n ) 命令。
error: invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]
我已经尝试在 String = "Sensor_" 中使用 "Sensor_",我试图将类型转换强制为 uint8_t,但错误消息说它失去了精度。
我也尝试了 .toCharArray 命令,但也失败了。
有没有办法通过字符串+整数访问变量?
我比较熟悉PHP中的"loose"变量,所以这给我带来了很多麻烦。
在 C 中,此行将不起作用
if( !digitalRead("Sensor_" + n))
你不能在 C 中构建这样的字符串。因为你没有 post 函数 digitalRead()
我认为它需要一个 char*
类型,这里是一个字符串,它在C 你可以像这样建造
char senstr[50];
sprintf(senstr, "Sensor_%d", n);
...
if (!digitalRead(senstr)) { ...
作为附带问题,请习惯从 0
开始迭代循环。您添加 1
以与人类互动。
您的代码存在一些问题。首先,您不能通过动态使用作为变量名称的字符串来获取变量的值或定义。它在 C 中不是那样工作的。最简单的方法是使用一个数组,然后通过它进行索引。为了使这项工作顺利进行,我将 for 循环更改为从 0 开始计数,因为数组的索引从 0 开始。我更改了 all_active 逻辑,假设稍后您会想知道有多少传感器是活跃的,而不仅仅是他们是否都活跃。如果您不想要那样,那么您的逻辑也比需要的更复杂。它可能只是 return 1 在 for 循环的末尾,因为所有人都必须通过测试才能到达那里。
#define Sensor_1 2
#define Sensor_2 3
#define Sensor_3 4
#define Sensor_4 5
#define Sensor_5 6
int sensors[] = {Sensor_1, Sensor_2, Sensor_3, Sensor_4, Sensor_5};
int checkSensors(){
int all_active = 1;
int num_sens = 5;
int n;
int active_sens = 0;
for(n= 0; n < num_sens; n++){
if( !digitalRead(sensors[n])){
active_sens= active_sens+ 1;
}
else {
all_active = 0;
}
}
return all_active;
}
已经有一个关于在 Arduino 中使用字符串寻址变量的问题,但给出的答案不适用于我的问题。
我有多个传感器(大约 14 个,数量可能会增加)连接到我的 Arduino,我还有继电器、引擎和 RFID。我正在创建一个函数来检查 all 传感器是否 active.
思路基本是这样的:
#define Sensor_1 2
#define Sensor_2 3
#define Sensor_3 4
#define Sensor_4 5
#define Sensor_5 6
int checkSensors(){
int all_active = 0;
int num_sens = 5;
int n;
int active_sens = 0;
for(n= 1; n <= num_sens; n++) {
if( !digitalRead("Sensor_" + n)) {
active_sens= active_sens+ 1;
}
else {
all_active = 0;
return ( all_active);
}
}
if(active_sens== num_sens) {
all_active = 1;
return(all_active);
}
}
问题是:我想对变量 Sensor_n 进行寻址,但找不到实现它的方法。我收到的错误消息是指 digitalRead("Sensor_" + n ) 命令。
error: invalid conversion from 'const char*' to 'uint8_t {aka unsigned char}' [-fpermissive]
我已经尝试在 String = "Sensor_" 中使用 "Sensor_",我试图将类型转换强制为 uint8_t,但错误消息说它失去了精度。
我也尝试了 .toCharArray 命令,但也失败了。
有没有办法通过字符串+整数访问变量?
我比较熟悉PHP中的"loose"变量,所以这给我带来了很多麻烦。
在 C 中,此行将不起作用
if( !digitalRead("Sensor_" + n))
你不能在 C 中构建这样的字符串。因为你没有 post 函数 digitalRead()
我认为它需要一个 char*
类型,这里是一个字符串,它在C 你可以像这样建造
char senstr[50];
sprintf(senstr, "Sensor_%d", n);
...
if (!digitalRead(senstr)) { ...
作为附带问题,请习惯从 0
开始迭代循环。您添加 1
以与人类互动。
您的代码存在一些问题。首先,您不能通过动态使用作为变量名称的字符串来获取变量的值或定义。它在 C 中不是那样工作的。最简单的方法是使用一个数组,然后通过它进行索引。为了使这项工作顺利进行,我将 for 循环更改为从 0 开始计数,因为数组的索引从 0 开始。我更改了 all_active 逻辑,假设稍后您会想知道有多少传感器是活跃的,而不仅仅是他们是否都活跃。如果您不想要那样,那么您的逻辑也比需要的更复杂。它可能只是 return 1 在 for 循环的末尾,因为所有人都必须通过测试才能到达那里。
#define Sensor_1 2
#define Sensor_2 3
#define Sensor_3 4
#define Sensor_4 5
#define Sensor_5 6
int sensors[] = {Sensor_1, Sensor_2, Sensor_3, Sensor_4, Sensor_5};
int checkSensors(){
int all_active = 1;
int num_sens = 5;
int n;
int active_sens = 0;
for(n= 0; n < num_sens; n++){
if( !digitalRead(sensors[n])){
active_sens= active_sens+ 1;
}
else {
all_active = 0;
}
}
return all_active;
}