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

How to store previous value into the array

本文关键字:存储 数组      更新时间:2023-10-16

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

我正在使用的代码:

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)}};

您可以使用此代码。我在模拟中尝试了这个,效果很好。您可以在串行监视器上查看数据更改。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?我省略了那个。

我通常的做法是:

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(}