2017-07-01 12 views
1

私は、12個のLEDと4個のボタンが付いたスケッチで、ボタンを押して特定のLEDを消すことになっています。私は1つのLEDと1つのボタンで私の問題を示すためのより基本的なスケッチを作ったが、この基本的なスケッチは完全に機能した!だから私はなぜ私の基本的な例(スケッチ1)完璧に動作しますが、LEDが私のより複雑な例(スケッチ2)でフラッシュするのだろうか?複数のLED /ボタンがある場合、LEDが点滅します。


SKETCH 1(完璧に動作します):

//sets up button and LED connections: 
const int led_1 = 4; 
const int but_1 = 8; 

//sets up variable butState that will be changed later 
int butState; 

void setup() { 
    //sets pin modes: 
    pinMode(led_1, OUTPUT); 
    pinMode(but_1, INPUT); 
} 

void loop() { 
    //variable that reads the button state: 
    butState = digitalRead(but_1); 

    //if the button state is high, sets LED state low. Opposite if button state is low: 
    if (butState == HIGH) { 
    delay(200); 
    digitalWrite(led_1, LOW); 
    } 
    else { 
    delay(200); 
    digitalWrite(led_1, HIGH); 
    } 
} 

SKETCH 2(LEDが点滅):任意の助け

//turns all lights on. turns in1 lights off when button 1 pressed. 
//turns in2 lights off when second button is pressed. 
//turns out lights off when third button is pressed 
//turns all lights off when fourth button pressed 

//result (output) lights: 
const int res_8 = A5; 
const int res_4 = A4; 
const int res_2 = A3; 
const int res_0 = A2; 

//in1 lights: 
const int in1_4 = 4; 
const int in1_2 = 3; 
const int in1_0 = 2; 

//in2 lights: 
const int in2_4 = 7; 
const int in2_2 = 6; 
const int in2_0 = 5; 

//input buttons: 
const int b_4 = 8; 
const int b_2 = 9; 
const int b_0 = 10; 
const int b_enter = 11; 

// set up switch states 
int b4State = 0; 
int b2State = 0; 
int b0State = 0; 
int benterState = 0; 

void setup() { 
    // set up pins 
    pinMode(res_8, OUTPUT); 
    pinMode(res_4, OUTPUT); 
    pinMode(res_2, OUTPUT); 
    pinMode(res_0, OUTPUT); 
    pinMode(in1_4, OUTPUT); 
    pinMode(in1_2, OUTPUT); 
    pinMode(in1_0, OUTPUT); 
    pinMode(in2_4, OUTPUT); 
    pinMode(in2_2, OUTPUT); 
    pinMode(in2_0, OUTPUT); 
    pinMode(b_4, INPUT); 
    pinMode(b_2, INPUT); 
    pinMode(b_0, INPUT); 
    pinMode(b_enter, INPUT); 
} 

void loop() { 
    //reads the state of button inputs 
    b4State = digitalRead(b_4); 
    b2State = digitalRead(b_2); 
    b0State = digitalRead(b_0); 
    benterState = digitalRead(b_enter); 
    //checks button 1 
    if (b4State == HIGH) { 
    delay(1000); 
    digitalWrite(in1_4, LOW); 
    digitalWrite(in1_2, LOW); 
    digitalWrite(in1_0, LOW); 
    } 
    else { 
    delay(1000); 
    digitalWrite(in1_4, HIGH); 
    digitalWrite(in1_2, HIGH); 
    digitalWrite(in1_0, HIGH); 
    } 

    //checks button 2 
    if (b2State == HIGH) { 
    delay(1000); 
    digitalWrite(in2_4, LOW); 
    digitalWrite(in2_2, LOW); 
    digitalWrite(in2_0, LOW); 
    } 
    else { 
    delay(1000); 
    digitalWrite(in2_4, HIGH); 
    digitalWrite(in2_2, HIGH); 
    digitalWrite(in2_0, HIGH); 
    } 

    //checks button 3 
    if (b0State == HIGH) { 
    delay(1000); 
    analogWrite(res_8, 0); 
    analogWrite(res_4, 0); 
    analogWrite(res_2, 0); 
    analogWrite(res_0, 0); 
    } 
    else { 
    delay(1000); 
    analogWrite(res_8, 1023); 
    analogWrite(res_4, 1023); 
    analogWrite(res_2, 1023); 
    analogWrite(res_0, 1023); 
    } 

    //checks enter button 
    if (benterState == HIGH) { 
    delay(1000); 
    digitalWrite(in1_4, LOW); 
    digitalWrite(in1_2, LOW); 
    digitalWrite(in1_0, LOW); 
    digitalWrite(in2_4, LOW); 
    digitalWrite(in2_2, LOW); 
    digitalWrite(in2_0, LOW); 
    analogWrite(res_8, 0); 
    analogWrite(res_4, 0); 
    analogWrite(res_2, 0); 
    analogWrite(res_0, 0); 
    } 
    else { 
    delay(1000); 
    analogWrite(res_8, 1023); 
    analogWrite(res_4, 1023); 
    analogWrite(res_2, 1023); 
    analogWrite(res_0, 1023); 
    digitalWrite(in1_4, HIGH); 
    digitalWrite(in1_2, HIGH); 
    digitalWrite(in1_0, HIGH); 
    digitalWrite(in2_4, HIGH); 
    digitalWrite(in2_2, HIGH); 
    digitalWrite(in2_0, HIGH); 
    } 

// //delays 
// delay(250); 
} 

ありがとう!

答えて

0

問題はテスト中です。

//checks button 1 
    if (b4State == HIGH) { 
    // turn LEDs on for 1 second 
    } 
    else { 
    /* turn LEDs off 1 sec */   // button 4 released -> LEDs OFF, 
    /* even if button 2 is pushed! */ // even when button 2 is pushed 
    } 

    //checks button 2 
    if (b2State == HIGH) 
    { 
    // turn LEDs on 1 second 
    } 
    else 
    { 
    // turn LEDs off 1 sec - 
    // even when button 4 is pushed! 
    } 

したいロジック:テストがあれば/他シンプルに減少させることができるよう押す

//checks button 1 
    if (b4State == HIGH) 
    { 
    delay(1000); 
    digitalWrite(in1_4, LOW); 
    digitalWrite(in1_2, LOW); 
    digitalWrite(in1_0, LOW); 
    } 
    else if (b2State == HIGH)   // button 4 is not pushed... check button 2 
    { 
    delay(1000);      
    digitalWrite(in2_4, LOW); 
    digitalWrite(in2_2, LOW); 
    digitalWrite(in2_0, LOW); 
    } 
    else 
    { 
    delay(1000);      // only turn off the LED when both buttons 
    digitalWrite(in2_4, HIGH);   // are released 
    digitalWrite(in2_2, HIGH); 
    digitalWrite(in2_0, HIGH); 
    } 

はボタン2と4は、あなたが投稿したコードで同じ効果をもたらすが、私おそらくあなたのアプリにコードを追加する予定だと思います。

+0

これは意味があります、ありがとう!そして、ええ、第2と第3のボタンは同じことをしました、私はそれを修正するつもりだったが、私は一度に1つの問題を修正したい。さらに、これは私が実際に望むスケッチを書く前に私のボードを正しく配線したことを確認するためのスケッチにすぎませんでした。 – JetpackAwaaay

関連する問題