我想使用以下命名约定创建几个数组
const int zone2[] = {11};
const int zone3[] = {12,13};
const int zone4[] = {14};
然后我想创建一个循环,并检查我正在执行的数组的值。
// read the state of the pushbutton value:
byte myInput =2;
//Outer loop checks the state of the Input Pins
//Inner loop iterates through corresponding array and pulls pins high or low depending on ButtonState
for (myInput = 2;myInput<5; myInput++) {
buttonState = digitalRead(myInput);
int ArrayCount;
String zoneChk = "zone" + String(myInput);
ArrayCount = sizeof(zoneChk) / sizeof( int ) ; // sizeof( int ) is the newpart
int arrayPosition;
for (arrayPosition = 0;arrayPosition < ArrayCount ; arrayPosition++) {
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(zoneChk[arrayPosition], HIGH);
}
else {
// turn LED off:
digitalWrite(zoneChk[arrayPosition], LOW);
}
}
}
我被告知该数组对C++arduino无效,我不太确定,只是边学习边学习。我想控制一些房子的灯,区域实际上是房间,阵列的内容是房间内的不同灯。我把它们称为"x区",这样我就可以减少检查每个房间开关所需的代码。
感谢
String zoneChk = "zone" + String(myInput); ArrayCount = sizeof(zoneChk) / sizeof( int ) ; // sizeof( int ) is the newpart
不不不不
const int * const zones[] = {zone2, zone3, zone4};
...
for (int z = 0; z < 3; ++z)
{
// access zones[z]
}
此外,考虑null终止每个zoneX
(以及可选的zones
),以便您知道何时到达末尾。
String zoneChk = "zone" + String(myInput);
ArrayCount = sizeof(zoneChk) / sizeof( int ) ; // sizeof( int ) is the newpart
这将不允许您在运行时访问zon2..5变量。您正在创建一个与zone2变量无关的"zone2"字符串。
下面的代码可以编译,但我没有Arduino来完全测试它。它仍然允许您在不修改代码的情况下更改区域2、3、4的大小。如果您想要更多的区域,则必须添加更多的case语句(其中包含注释掉的区域5代码)。
如果您希望它是完全动态的,我们可以为区域使用多维数组,但这应该是最小代码的一个良好开端
for (myInput = 2;myInput<5; myInput++) {
int buttonState = digitalRead(myInput);
int ArrayCount;
const int *zoneChk;
//This is the part you will have to add to if you want more zones
switch(myInput){
case 2:
ArrayCount = sizeof(zone2) / sizeof (zone2[0]);
zoneChk = zone2;
break;
case 3:
ArrayCount = sizeof(zone3) / sizeof (zone3[0]);
zoneChk = zone3;
break;
case 4:
ArrayCount = sizeof(zone4) / sizeof (zone4[0]);
zoneChk = zone4;
break;
//ex. case 5
//case 5:
// ArrayCount = sizeof(zone5) / sizeof (zone5[0]);
// zoneChk = zone5;
//break;
}
int arrayPosition;
for (arrayPosition = 0;arrayPosition < ArrayCount ; arrayPosition++) {
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(zoneChk[arrayPosition], HIGH);
}
else {
// turn LED off:
digitalWrite(zoneChk[arrayPosition], LOW);
}
}
}