2014-05-11 100 views
0

今天我用一個程序問題問候你,我的項目使用光作爲牆上伺服的輸入。光線會進入房間,陰影會下降,如果沒有光線,陰影會消失。我想在arduino代碼中的一個void循環中做兩個條件,除非條件改變,否則只適用一次。通過這樣說我的意思是,我希望這個無效循環持續運行,其中我有兩個條件。如果連續兩次滿足相同的條件(即傳感器讀數在800和10000之間,如5000和6032),則不會運行。如果滿足一個條件,然後另一個條件滿足,那沒關係。這裏是我的代碼和任何幫助,以什麼參考命令我應該使用或我的下一步行動將不勝感激。在特定條件下停止程序

// Reports the frequency from the TSL230, higher number means brighter 
// Part: http://www.sparkfun.com/products/8940 
// Article: http://bildr.org/2011/08/tsl230r-arduino/ 

#include <Servo.h> 
Servo myservo1; 
int TSL230_Pin = 4; //TSL230 output 
int TSL230_s0 = 3; //TSL230 sensitivity setting 1 
int TSL230_s1 = 2; //TSL230 sensitivity setting 2 

int TSL230_samples = 30; //higher = slower but more stable and accurate 

void setup(){ 
    Serial.begin(9600); 
    setupTSL230(); 
    pinMode(5,OUTPUT); 
} 


void loop(){ 

    float lightLevel = readTSL230(TSL230_samples); 
    Serial.println(lightLevel); 

if(lightLevel>800 && lightLevel<1000) 
    { 
    myservo1.attach(5); 
    myservo1.writeMicroseconds(1300);delay(1000); 
    myservo1.writeMicroseconds(1500);delay(5000000); 

} 

else if(lightLevel<800) 
{ 
    myservo1.attach(5); 
    myservo1.writeMicroseconds(1700);delay(5000); 
    myservo1.writeMicroseconds(1500);delay(5000000); 
} 
} 

void setupTSL230(){ 
    pinMode(TSL230_s0, OUTPUT); 
    pinMode(TSL230_s1, OUTPUT); 

    //configure sensitivity - Can set to 
    //S1 LOW | S0 HIGH: low 
    //S1 HIGH | S0 LOW: med 
    //S1 HIGH | S0 HIGH: high 

    digitalWrite(TSL230_s1, LOW); 
    digitalWrite(TSL230_s0, HIGH); 
} 



float readTSL230(int samples){ 
//sample light, return reading in frequency 
//higher number means brighter 

    float start = micros(); 
    int readings = 0; 

    while(readings < samples){ 
    pulseIn(TSL230_Pin, HIGH); 
    readings ++; 
    } 

    float length = micros() - start; 
    float freq = (1000000/(length/samples)) * 10; 

    return freq; 
} 
+1

有中沒有循環上面的代碼(正如我正在寫這個評論)。 –

回答

0

首先添加到您的設置...

void setup(){ 
Serial.begin(9600); 
setupTSL230(); 
pinMode(5,OUTPUT); 
myservo1.attach(5); 

}

然後,讓一個新的變量,並把它添加到你的if語句

Boolean once; // declare this with your other int variables 
if(lightLevel > 800 && lightLevel < 1000 && once==True) 
    { 
    myservo1.writeMicroseconds(1300);delay(1000); 
    myservo1.writeMicroseconds(1500);delay(1000); 
    once = False; 
    } 
else if(lightLevel<800 && once == False) 
    { 
    myservo1.writeMicroseconds(1700);delay(5000); 
    myservo1.writeMicroseconds(1500);delay(1000); 
    once = True; 
    } 
+0

我會添加一次我以前的int變量作爲布爾值一次=真和布爾值一次=假?或者我只是一般在我的int變量中指定一個數字爲布爾值once = 6; – user3625133

+0

好吧,我把布爾一次作爲我的整數,但現在它的底部條件下,它會連續運行,我不想要。 – user3625133

+0

否變量一次是布爾類型,不是整數。如果你想把它聲明爲一個整數,你可以用你想要的任何兩個數字替換true和false。 – Eugene