2015-10-19 83 views
0

我想创建一个数组,并能够比较数组中的第二个和最后一个项目。它需要不断添加和比较才能正常工作。这只是我试图帮助控制步进电机功能的功能。我有一个快速循环,可以直接进行比较。我知道它的一些是错误的,但由于我没有用C语言编码,所以我不知道如何正确使用数组。先谢谢你。阵列在Arduino

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

等等,我无法理解你想要得到什么以及你实际得到了什么。顺便说一句,循环应该从1开始,而不是从0开始(因为你不能比较项目0与 - 不存在 - 前一个) – frarugi87

+1

当'i = 0','P [i-1]'和'V [i-1]'超出范围,你不能访问那里。 – MikeCAT

+0

我正在尝试创建一个数组,以便我可以检查当前循环中的传感器值是否与先前循环中的传感器值不同。这样我的电机只有在传感器值发生变化时才会运行,并且不会每循环运行一次。除非有更好的方法来做到这一点,我不知道。 @ frarugi87 – bcv29

回答

0

通过“试图第二比较上学期的最后期限”,你的意思是“试图第二比较上学期与他们以前的”?如果是这种情况,您的索引是错误的,那应该是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; 
} 
+0

我想创建一个数组,以便我可以检查当前循环中的传感器值是否与先前循环中的传感器值不同。这样我的电机只有在传感器值发生变化时才会运行,并且不会每循环运行一次。除非有更好的方法来做到这一点,我不知道。 – bcv29

0

好吧,那么我会做出不同的事情。看看你的评论,它看起来像你想做这样的事情:读取两个引脚的值,将它们与您读取的最后一个值进行比较,如果它们不同,则启动电机,否则停止。

现在,很多信息都丢失了(例如,您如何检查电机?您想检查传感器的频率是多少?),但恕我直言,您应该这样做。

在这段代码我想这

  1. 要检查每100毫秒
  2. 如果值不同,要打开电机上的下一个100毫秒的传感器
  3. 电机是通过设置相应引脚(例如10)而打开的直流电机,因为您在代码中写入代码
因为传感器在引脚12和13上有二进制输出

顺便说一句我用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值,而不是只是前一个),请提供关于什么是变化的条件进一步信息(或更好的提供例子)