我正在尝试创建一个数组,并能够比较数组中的倒数第二个项目。它需要不断添加和比较才能正常工作。这只是我试图运行以帮助控制步进电机功能的功能。我有一个循环,我可以快速直接比较。我知道其中有些是错的,但由于我还没有用C编码,所以我无法弄清楚如何正确使用数组。提前谢谢。
int P[10],V[10],i,x,y;
Serial.print("checkvalue = ");
Serial.print(checkvalue);Serial.print("\n");
Serial.print("P = "); Serial.print(P[i]); Serial.print("\n"); //attempting to print array
Serial.print("V = "); Serial.print(V[i]); Serial.print("\n"); //to see if it is collecting
//data correctly
//these variables are declared above in my code, just didn't copy in
Dgreadpb = digitalRead(13);
PBcheck = Dgreadpb;
//Serial.print("Button in = ");Serial.print(Dgreadpb); Serial.print("\n");
Dgreadvls = digitalRead(12);
VLScheck = Dgreadvls;
//Serial.print("Photo in = ");Serial.print(Dgreadvls); Serial.print("\n");
for (i = 0; i < 10; i++){
x = Dgreadpb;
y = Dgreadvls;
P[i] = x;
V[i] = y;
if (P[i-1] == P[i] && V[i-1] == V[i]){ //trying to compare second to
checkvalue == 0; //last term to the last term
return;
}
else if(P[i-1] != P[i] || V[i-1] != V[i]){
checkvalue == 1;
return;
}
}
delay (1000);
答案 0 :(得分:0)
通过&#34;尝试将倒数第二个词与最后一个词进行比较&#34;,你的意思是&#34;尝试比较倒数第二个词与之前的词#34;?如果您的指数错误,则应为for(i = 1; i<10; i++)
。
两个条件都相反(两者都相等或至少其中一个不同),不需要else if
。更重要的是,导致两个条件相反,它永远不会完成循环。我认为这不是意图,如果你试图说只有其中一个是不同的,你应该这样做:
if (P[i-1] == P[i] && V[i-1] == V[i]){ //If both are equal
checkvalue == 0;
return;
}
else if(P[i-1] == P[i] || V[i-1] == V[i]){ //If only one is equal
checkvalue == 1;
return;
}
答案 1 :(得分:0)
好的,那我就做了不同的事。
查看您的评论,看起来您想要执行以下操作:读取两个引脚的值,将它们与您读取的最后一个值进行比较,如果它们不同,则启动电机,否则将其停止。 / p>
现在,缺少很多信息(例如,你如何检查电机?你想检查传感器的频率是多少?传感器是什么?)但恕我直言,你应该这样做。
在这段代码中我想是
BTW我使用了millis()
函数因为我讨厌delay
,因为它阻止了uC。使用我的功能,您将能够在空闲时执行其他操作。
const byte motorPin = 10;
const byte sensorPPin = 12;
const byte sensorVPin = 13;
#define LOOP_TIME_MS 100
unsigned long lastLoopTime;
boolean lastPval, lastVval;
void setup()
{
pinMode(motorPin, OUTPUT);
pinMode(sensorPPin, INPUT);
pinMode(sensorVPin, INPUT);
lastPval = digitalRead(sensorPPin);
lastVval = digitalRead(sensorVPin);
lastLoopTime = millis();
}
void loop()
{
if ((millis() - lastLoopTime >= LOOP_TIME_MS)
{
boolean Pval = digitalRead(sensorPPin);
boolean Vval = digitalRead(sensorVPin);
if ((Pval != lastPval) || (Vval != lastVval))
{
digitalWrite(motorPin, HIGH);
}
else
{
digitalWrite(motorPin, LOW);
}
lastLoopTime += LOOP_TIME_MS;
}
/* Here you can do something else */
}
编辑:如果,另一方面,您想要使用数组(因为您想测试最后的N个值而不是前一个值),请提供有关变化条件的更多信息(或更好地提供示例)