私はArduino Unoの下のスケッチを作成するためにバディーと一緒に作業しましたが、問題が残っています。コードの目的は、Unoのピン1-6である6つのボタンからボタンプッシュを読み取って、格納されたボタンが格納されている配列をプッシュして正しいかどうかを確認することです。Arduinoで配列に値をチェックするときにエラーが発生する
ボタンを押すと、黄色のLEDが点灯します。 5つのボタンを入力すると、アレイと照合し、間違っている場合は赤いLEDを表示します。あなたが正しいなら、それはあなたに緑色のLEDを与え、次にリレーを開くようにトリガーします。
私たちが行っているコードは断続的に動作しますが、毎回機能しません。私はそれが配線問題ではないと信じています。なぜなら、私がボタンを押したときに毎回動作させることができるからです。
エラーの原因を特定できませんでした。私はそれを使用しているときに私はエラーを複製することができませんでしたが、それはエラーを続けます。エラーが発生したら、Arduinoを再起動して再度動作させる必要があります。
私の予想は、ボタンが押されているか、またはループ内でカウンタが開始され、再開されるようなことです。私はユーザを訓練することができないので、ボタンを押さえているか、そうでないとエラーになるかもしれない。
私はそれが簡単な答えであることを期待していますが、私はコーディングに熟練していないので、私はいくつかの助けを望んでいました。
// Button pins
const int button1 = 1;
const int button2 = 2;
const int button3 = 3;
const int button4 = 4;
const int button5 = 5;
const int button6 = 6;
const int grnLed = 11;
const int redLed = 9;
const int yellowLed = 10;
const int openRelay = 7;
const int brightness = 300;
// How long is our code, kind of personal
const int codelen = 5;
// Pin code values must match button pin values
char PIN[codelen] = {
'4', '1', '5', '3', '2'
};
// Attempted combination
char attempt[codelen] = {
'0', '0', '0', '0' ,'0'
};
// Attempt count
int z = 0;
void setup() {
// You've been set up
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
pinMode(button4, INPUT_PULLUP);
pinMode(button5, INPUT_PULLUP);
pinMode(button6, INPUT_PULLUP);
//pinMode(openRelay, OUTPUT);
// Set pullup resistor for buttons
digitalWrite(button1, HIGH);
digitalWrite(button2, HIGH);
digitalWrite(button3, HIGH);
digitalWrite(button4, HIGH);
digitalWrite(button5, HIGH);
digitalWrite(button6, HIGH);
//digitalWrite(openRelay, LOW);
}
void correctPIN()
{
pulseLED(grnLed, brightness, 3000);
pulseLED(openRelay, brightness, 1500);
//analogWrite(openRelay, HIGH);
//delay(2000);
//analogWrite(openRelay, LOW);
z = 0;
}
void incorrectPIN()
{
pulseLED(redLed, brightness, 2000);
z = 0;
}
void checkPIN()
{
int correct = 0;
int i;
for (i = 0; i < codelen; i++)
{
if (attempt[i] == PIN[i])
{
correct++;
}
}
if (correct == codelen)
{
correctPIN();
}
else
{
incorrectPIN();
}
for (int zz = 0; zz < codelen; zz++)
{
attempt[zz] = '0';
}
}
void checkButton(int button){
if (digitalRead(button) == LOW)
{
while (digitalRead(button) == LOW) { } // Do nothing
// Convert int to string for tracking/compare
char buttStr = button + '0';
attempt[z] = buttStr;
z++;
//Light up LED so we know botton press worked
pulseLED(yellowLed, brightness, 500);
}
}
void pulseLED(int ledpin, int brightness, int msec) {
analogWrite(ledpin, brightness);
delay(msec);
analogWrite(ledpin, LOW);
}
void loop() {
// Check buttons
checkButton(button1);
checkButton(button2);
checkButton(button3);
checkButton(button4);
checkButton(button5);
checkButton(button6);
// If number of buttons pressed, z, matches code/pin length then check
if (z >= codelen)
{
checkPIN();
}
}
は、私はデバウンス処理するために、任意のコードが表示されません。それをハードウェアで処理しましたか? –