Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 阵列的Arduino问题_C_Arduino - Fatal编程技术网

C 阵列的Arduino问题

C 阵列的Arduino问题,c,arduino,C,Arduino,嗨,我正在做一个项目,用Arduino照明我家的灯 我让它以基本形式工作,现在我想存储灯光开关的先前状态。我正在使用一个数组来存储交换机的当前状态,以便在下一个循环中进行比较。我有7个开关,我已经创建了它,所以一个开关可以打开许多灯,如果需要的话 我需要存储上一个状态,因为下一部分将介绍web控件,为此编写的测试项目已经完成 奇怪的是,7/8区工作完美。其他区域打开,但不关闭。当我打开另一个开关时,如果开关处于关闭位置,灯可能会熄灭 如果我删除前一状态的条件,请检查所有开关是否完好 const

嗨,我正在做一个项目,用Arduino照明我家的灯

我让它以基本形式工作,现在我想存储灯光开关的先前状态。我正在使用一个数组来存储交换机的当前状态,以便在下一个循环中进行比较。我有7个开关,我已经创建了它,所以一个开关可以打开许多灯,如果需要的话

我需要存储上一个状态,因为下一部分将介绍web控件,为此编写的测试项目已经完成

奇怪的是,7/8区工作完美。其他区域打开,但不关闭。当我打开另一个开关时,如果开关处于关闭位置,灯可能会熄灭

如果我删除前一状态的条件,请检查所有开关是否完好

const int zone2[] = {8,13,0};
const int zone3[] = {11,0};
const int zone4[] = {7,0};
const int zone5[] = {9,0};
const int zone6[] = {12,0};
const int zone7[] = {6,0};
const int zone8[] = {14,0};

const int * zones[]={zone2,zone3,zone4,zone5,zone6,zone7,zone8};

int buttonState[] = {0,0};         // variable for reading the    pushbutton status

int previousState[]={0,0,0,0,0,0,0,0};    // array for holding the previous state of the input button

void setup() 
{
 //initialize the output pins that will control lights

pinMode(6,OUTPUT);
pinMode(7, OUTPUT);      
pinMode(8, OUTPUT);
pinMode(9,OUTPUT);

pinMode(11, OUTPUT);      
pinMode(12, OUTPUT);
pinMode(13,OUTPUT);
pinMode(14,OUTPUT);

// initialize the pushbutton pin as an input:
//set all light switches to the same block ie pins 30 - 35
byte i; 
//this loop sets all the 30-35pins as inputs 
for (i=30;i< 37;i++) {
pinMode(i, INPUT);  
digitalWrite(i,HIGH);  // this makes it connect to the internal resistor
 }
}

void loop()
{   
 int arrayPosition;
 for (int z = 0; z < 7; ++z)//zero based array needs to be as many as    there are zones!!! 
  {
    buttonState[z] = digitalRead(z+30); 
for (arrayPosition = 0;zones[z][arrayPosition] ; arrayPosition++)
      {
        if ((buttonState[z] == HIGH) ) && (previousState[z] == LOW ))  {   
          // turn LED on:    
          digitalWrite(zones[z][arrayPosition],HIGH); 

          } 
        else if ((buttonState[z] == LOW) && (previousState[z] == HIGH )) {
        // turn LED off;
          digitalWrite(zones[z][arrayPosition],LOW);

          }

    } 
        //each light assigned to the zone has been turned on or off, now set previousstate
        //the statement is here the inner loop has finsihed turning lights on or off that belong to that zone
    previousState[z] = buttonState[z];
  }
}
const int zone2[]={8,13,0};
const int zone3[]={11,0};
const int zone4[]={7,0};
const int zone5[]={9,0};
const int zone6[]={12,0};
const int zone7[]={6,0};
const int zone8[]={14,0};
const int*分区[]={zone2、zone3、zone4、zone5、zone6、zone7、zone8};
int buttonState[]={0,0};//用于读取按钮状态的变量
int previousState[]={0,0,0,0,0,0,0};//用于保持输入按钮先前状态的数组
无效设置()
{
//初始化将控制灯光的输出引脚
pinMode(6,输出);
pinMode(7,输出);
pinMode(8,输出);
pinMode(9,输出);
pinMode(11,输出);
pinMode(12,输出);
pinMode(13,输出);
pinMode(14,输出);
//将按钮引脚初始化为输入:
//将所有灯开关设置到同一块,即针脚30-35
字节i;
//该回路将所有30-35引脚设置为输入
对于(i=30;i<37;i++){
pinMode(i,输入);
digitalWrite(i,高);//这使它连接到内部电阻器
}
}
void循环()
{   
内部阵列位置;
对于(intz=0;z<7;++z)//基于零的数组的数量必须与区域的数量相同!!!
{
按钮状态[z]=数字读取(z+30);
对于(arrayPosition=0;分区[z][arrayPosition];arrayPosition++)
{
如果((按钮状态[z]==高))&&(先前状态[z]==低)){
//打开LED灯:
数字写入(区域[z][arrayPosition],高);
} 
否则如果((按钮状态[z]==低)和&(先前状态[z]==高)){
//关闭LED;
数字写入(区域[z][arrayPosition],低位);
}
} 
//指定给分区的每个灯光都已打开或关闭,现在设置为previousstate
//这里的陈述是,内部循环发现了属于该区域的灯的打开或关闭
前一状态[z]=按钮状态[z];
}
}

您将两个元素分配给数组
按钮state
,但您正在访问七个元素:

[…]
int buttonState[] = {0,0};
[…]
    for (int z = 0; z < 7; ++z)
    {
        buttonState[z] = digitalRead(z+30); 
[…]

这还将显示您的
previousState
数组大于所需的大小(编译器会抱怨该数组的初始化器太多)。然后,在任何地方重复使用该常数都很重要,而不是写入幻数
7

将两个元素分配给数组
buttonState
,但您正在访问七个:

[…]
int buttonState[] = {0,0};
[…]
    for (int z = 0; z < 7; ++z)
    {
        buttonState[z] = digitalRead(z+30); 
[…]

这还将显示您的
previousState
数组大于所需的大小(编译器会抱怨该数组的初始化器太多)。然后,重要的是在任何地方重复使用该常数,而不是写入幻数
7

为什么在排除先前状态时if条件起作用。它不是有两个元素但访问七个元素的相同问题吗?当我排除前面的状态时,if条件为什么起作用。它不是有两个元素但访问七个元素的相同问题吗?当我排除前面的状态时,if条件为什么起作用。它不是有两个元素但访问七个元素的相同问题吗?通过在数组边界外写入,您正在调用未定义的行为。在访问
按钮state
数组并以不可预知的方式修改其内容时,您可能会意外写入
previousState
数组。为什么在排除previousState时if条件起作用。它不是有两个元素但访问七个元素的相同问题吗?通过在数组边界外写入,您正在调用未定义的行为。在访问
按钮state
数组并以不可预知的方式修改其内容时,您可能无意中写入了
先前状态
数组。