リレースイッチに問題があります。私はArduinoで使用するために5V、4つのリレースイッチを持っています。私はボタンを押すと1つのリレーが点灯し、もう一度押すと同じリレーが消えるようにしています。Arduinoリレーボタン
この概念は、1つのリレーを使用する場合のコードで機能します。しかし、問題は私のコードが1つのリレーと1つのリレーだけで動作することです。コードを変更して複数の変数を作成すると、機能しません。
FYI、私はArduinoのUNO R3 ATMEGA 328
が一つだけの中継のため、この最初のコードは、作業を行うことに注意してください使用しています。ボタンを押して電源を入れた後、ボタンをもう一度押すと機能します。
const int rl1 = 7;
const int rl2 = 12;
const int rl3 = 2;
const int rl4 = 8;
const int button1 = 11;
const int button2 = 10;
const int button3 = 3;
const int button4 = 4;
int rl1State = LOW;
int rl2State = LOW;
int rl3State = LOW;
int rl4State = LOW;
int buttonState = LOW;
int lastButtonState = HIGH;
int reading;
long lastDebounceTime=0;
long debounceDelay = 50;
void setup() {
Serial.begin(9600);
pinMode(rl1, OUTPUT);
pinMode(rl2, OUTPUT);
pinMode(rl3, OUTPUT);
pinMode(rl3, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
}
void loop() {
reading = digitalRead(button1);
if(reading != lastButtonState){
lastDebounceTime = millis();
lastButtonState = reading;
}
if((millis() - lastDebounceTime) > debounceDelay){
if(buttonState != lastButtonState){
buttonState = lastButtonState;
if(buttonState == HIGH){
rl1State = !rl1State;
digitalWrite(rl1, rl1State);
}
}
}
}
私は、複数のリレーのためにこのコードを試してみました:
const int rl1 = 7;
const int rl2 = 12;
const int rl3 = 2;
const int rl4 = 8;
const int button1 = 11;
const int button2 = 10;
const int button3 = 3;
const int button4 = 4;
int rl1State = LOW;
int rl2State = LOW;
int rl3State = LOW;
int rl4State = LOW;
//States
int buttonState1 = LOW;
int lastButtonState1 = HIGH;
int buttonState2 = LOW;
int lastButtonState2 = HIGH;
int buttonState3 = LOW;
int lastButtonState3 = HIGH;
int buttonState4 = LOW;
int lastButtonState4 = HIGH;
//Read State
int reading1;
int reading2;
int reading3;
int reading4;
long lastDebounceTime1=0;
long debounceDelay1 = 50;
long lastDebounceTime2=0;
long debounceDelay2 = 50;
long lastDebounceTime3=0;
long debounceDelay3= 50;
long lastDebounceTime4=0;
long debounceDelay4 = 50;
void setup() {
Serial.begin(9600);
pinMode(rl1, OUTPUT);
pinMode(rl2, OUTPUT);
pinMode(rl3, OUTPUT);
pinMode(rl3, OUTPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
pinMode(button4, INPUT);
}
void loop() {
reading1 = digitalRead(button1);
reading2 = digitalRead(button2);
reading3 = digitalRead(button3);
reading4 = digitalRead(button4);
//Relay 1
if(reading1 != lastButtonState1){
lastDebounceTime1 = millis();
lastButtonState1 = reading1;
}
if(reading1 != lastButtonState1){
lastDebounceTime1 = millis();
lastButtonState1 = reading1;
}
if((millis() - lastDebounceTime1) > debounceDelay1){
if(buttonState1 != lastButtonState1){
buttonState1 = lastButtonState1;
if(buttonState1 == HIGH){
rl1State = !rl1State;
digitalWrite(rl1, rl1State);
}
}
}
//Relay 2
if(reading2 != lastButtonState2){
lastDebounceTime2 = millis();
lastButtonState2 = reading2;
}
if((millis() - lastDebounceTime2) > debounceDelay2){
if(buttonState2 != lastButtonState2){
buttonState2 = lastButtonState2;
if(buttonState2 == HIGH){
rl2State = !rl2State;
digitalWrite(rl2, rl2State);
}
}
}
}
私も各ボタンやリレーの再作成、すべての変数にしようとしたが、それはまだ動作しません。
私のリレーのいずれかがピンに接続されているとき(すべてのピンが接続されているとき)は機能しませんが、ピンの1つが接続されていないときにのみ機能します。本当に変だ。私はリレーをテストし、それは問題ないと私はArduinoを変更しましたが、同じ問題がまだあります。
?あなたは1つの地上チャンネルに接続しましたか?たぶんあなたが1つを押すと、ボタンが現れているので、ピンの地面はもはや低くはないので、ピンはArduinoによってHIGHと認識される可能性があります。 –
ボタンはすべて同じ地面に接続されています。最初のボタンは魅力的なように機能しますが、実際には完全に反応します。他のボタンはまったく反応しません。遅れて申し訳ありませんが、私は夏期クラスの試験を受けました。 –