私はアーティストであり、プログラマーではありません。しかし、私はArduinoとピンボールゲームを作っています。私はプログラマーがいないので、私はこの仕事をするために何ができるかを学んでいます。ピンボールターゲット - リセットしないでください
私はこれを行うコードを書こうとしています: - ヒットしたときにポイントを与え、LEDを点灯させる3つのターゲット(ボタン)。 - 同じボタンをもう一度押すと、ポイントが表示され、LEDは点灯したままです。 - 同時に3つのライトがすべて点灯している場合、ボーナススコアが与えられ、3つのライトすべてが消灯します。
私はArduinoフォーラムを使用しようとしましたが、私がそこから得ることができる最高のアドバイスは、「コードを学ぶ」ことでした。
私は「配列」について学ぶように言われていますが、私は試しましたが、私はそれの周りに私の頭を包んでいる重大な問題を抱えています。 'IF'と 'ELSE'ステートメントだけでこれを行うことができるのであれば、長くて非効率的なやり方をするのが本当に好きです。
ここは私の現在のコードです。現在、ブレッドボードには4つのライトがあります。ライト#4(D)は、デバッグのためすぐに点灯します。ボタンを押すと、他の3つのライト(ABC)のそれぞれが点灯します。 3つのライトがすべて点灯すると、(D)ライトは消灯しますが、(ABC)は点灯したままです。私は(D)がそうするときに出かける必要がある。なぜ彼らが習わなかったのか分かりません。私はコードが3つすべてがHIGHであると認識していることを知っています。 (D)が低くなるためです。私はなぜ(ABC)も低くならないのか分からない。
// 3 TARGET SCORE FUNCTION.
// WHEN A TARGET IS HIT IT LIGHTS UP AND PROVIDES POINTS.
// IF A TARGET IS HIT AGAIN WHILE IT IS ALREADY LIT, IT STILL SCORES POINTS AND STAYS LIT.
// WHEN ALL 3 TARGETS ARE LIT THEY FLASH AND PROVIDE A JACKPOT
// WHEN JACKPOT IS PROVIDED ALL LIGHTS TURN OFF. READY TO BE ACTIVATED AGAIN.
int dropButtonA = 2; // the number of the input pin
int dropButtonB = 3;
int dropButtonC = 4;
int dropLightA = 11; // the number of the output pin
int dropLightB = 12;
int dropLightC = 13;
int dropLightD = 10;
int stateA = LOW; // the current state of the output pin
int stateB = LOW;
int stateC = LOW;
int stateD = LOW;
int readingA; // the current reading from the input pin
int readingB;
int readingC;
int previousA = LOW; // the previous reading from the input pin
int previousB = LOW;
int previousC = LOW;
long time = 0; // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers
void setup()
{
pinMode(dropButtonA, INPUT);
pinMode(dropButtonB, INPUT);
pinMode(dropButtonC, INPUT);
pinMode(dropLightA, OUTPUT);
pinMode(dropLightB, OUTPUT);
pinMode(dropLightC, OUTPUT);
pinMode(dropLightD, OUTPUT);
}
void loop()
{
//droptarget_01//
readingA = digitalRead(dropButtonA);
if (readingA == HIGH && previousA == LOW && millis() - time > debounce) {
stateA = HIGH;
time = millis();
}
digitalWrite(dropLightA, stateA);
previousA = readingA;
//droptarget_02//
readingB = digitalRead(dropButtonB);
if (readingB == HIGH && previousB == LOW && millis() - time > debounce) {
stateB = HIGH;
time = millis();
}
digitalWrite(dropLightB, stateB);
previousB = readingB;
//droptarget_03//
readingC = digitalRead(dropButtonC);
if (readingC == HIGH && previousC == LOW && millis() - time > debounce) {
stateC = HIGH;
time = millis();
}
digitalWrite(dropLightC, stateC);
previousC = readingC;
//RESET TARGETS - BONUS SCORE
if (digitalRead(dropLightA)==HIGH && digitalRead(dropLightB)==HIGH && digitalRead(dropLightC)==HIGH)
{
digitalWrite(dropLightA, LOW);
digitalWrite(dropLightB, LOW);
digitalWrite(dropLightC, LOW);
digitalWrite(dropLightD, LOW);
}
else
{
digitalWrite(dropLightD, HIGH);
}
}