Arduino中的数组

时间:2015-10-19 06:25:53

标签: arrays arduino arduino-uno

我正在尝试创建一个数组,并能够比较数组中的倒数第二个项目。它需要不断添加和比较才能正常工作。这只是我试图运行以帮助控制步进电机功能的功能。我有一个循环,我可以快速直接比较。我知道其中有些是错的,但由于我还没有用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);

2 个答案:

答案 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>

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

在这段代码中我想是

  1. 您想每100毫秒检查一次传感器
  2. 如果值不同,则需要在接下来的100 ms内打开电机
  3. 电机是通过设置相应的引脚(例如10)
  4. 打开直流电机
  5. 传感器在引脚12和13上有二进制输出,因为你在代码
  6. 中写了这个

    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个值而不是前一个值),请提供有关变化条件的更多信息(或更好地提供示例)