如何将以前的值存储到数组中

时间:2018-05-14 13:17:19

标签: c++ arduino

大家好,我正在从模拟引脚读取输入值。我需要将以前的值存储到数组中。

我正在使用的代码:

int u = A0;
int y = A1;
float z[4][1] = {{0},      
                {0}, 
                {0},     
                {0}};

void setup() {
  Serial.begin(9600);
  pinMode(u, INPUT);
  pinMode(y, INPUT);
}

void loop() {
    u = analogRead(A0);
    y = analogRead(A1);
}

我该怎么做?

z[4][1] = {{u(n-1)},      
           {u(n-2)}, 
           {y(n-1)},     
           {y(n-1)}};

2 个答案:

答案 0 :(得分:1)

您可以使用此代码。我在模拟上试过这个并且效果很好。您可以在串行监视器上查看数据更改。 storeValues()函数做你想要的。你需要先在循环函数中调用它。

int firsPin = A0;
int secondPin = A1;
int u = 0, y = 0, lastU = 0, lastY = 0;

//0 : u(n-1) 1 : u(n-2) 2 : y(n-1) 3 : y(n-2) 
int z[] = {0, 0, 0, 0};

void setup() {
  Serial.begin(9600);
  pinMode(firsPin, INPUT);
  pinMode(secondPin, INPUT);
}

void loop() {
  storeValues();
  u = analogRead(firsPin);
  y = analogRead(secondPin);    
  Serial.println("u: " + String(u));
  Serial.println("y: " + String(y));
  Serial.println("u(n-1): " + String(z[0]));
  Serial.println("y(n-1): " + String(z[2]));
  Serial.println("u(n-2): " + String(z[1]));
  Serial.println("y(n-2): " + String(z[3]));
  delay(100);
}

void storeValues() {
  z[1] = z[0];
  z[3] = z[2];
  z[0] = u;
  z[2] = y;
}

答案 1 :(得分:0)

您需要复制这些值。如评论中所述,为什么第二个维度为1?我把那个拿出来了。

我通常如何做到:

 z[1] = z[0];
 z[0] = u;
 z[3] = z[2];
 z[2] = y;

这会将前一个值转换为矩阵的另一个值,将其放入代码中:

int pinU = A0;
int pinY = A1;
int u = 0;
int y = 0;
float z[4] = {0,0,0,0}

void setup() {
   Serial.begin(9600);
   pinMode(pinU, INPUT);
   pinMode(pinY, INPUT);
}

void loop() {
    u = analogRead(A0);
    y = analogRead(A1);
    z[1] = z[0];
    z[0] = u;
    z[3] = z[2];
    z[2] = y;

} 

这将有效地使z = {u(n),u(n-1),y(n),y(n-1)}