04-02-2024, 09:37 PM
Hi all,
I'm trying to program the KC868-A4 to activate the relay, as long as the corresponding digital input is activated. When I release the button the corresponding relay should deactivates.
With the code I wrote, when I close the digital input the relevant relay turns on. But when I open the digital imput, The relay remains on. Can some one tell me where is a mistake ? Below the code in use. Thank You
#define Relay1 2
#define Relay2 15
#define Relay3 5
#define Relay4 4
#define Key1 36
#define Key2 39
#define Key3 27
#define Key4 14
int KEY_NUM1; // KEY_1 value
int KEY_NUM2; // KEY_2 value
int KEY_NUM3; // KEY_3 value
int KEY_NUM4; // KEY_4 value
void setup() {
pinMode(Relay1, OUTPUT); // Relay1 IO2
pinMode(Relay2, OUTPUT); // Relay2 IO15
pinMode(Relay3, OUTPUT); // Relay1 IO5
pinMode(Relay4, OUTPUT); // Relay1 IO4
pinMode(Key1, INPUT); // Dig. Input1 IO36
pinMode(Key2, INPUT); // Dig. Input2 IO39
pinMode(Key3, INPUT); // Dig. Input3 IO27
pinMode(Key4, INPUT); // Dig. Input4 IO14
}
void loop() {
ScanKey1(); // Call function to scan Key1
ScanKey2(); // Call function to scan Key2
ScanKey3(); // Call function to scan Key3
ScanKey4(); // Call function to scan Key4
}
void ScanKey1() {
KEY_NUM1 = 0;
// Check if Key1 is pressed
if (digitalRead(Key1) == LOW) { // Key1 Pressed
delay(20); // Wait for button debounce
if (digitalRead(Key1) == LOW) {
KEY_NUM1 = 1;
// Toggle relay1 state until Key1 is released
while (digitalRead(Key1) == LOW) {
digitalWrite(Relay1, !digitalRead(Relay1)); // Toggle relay1 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}
void ScanKey2() {
KEY_NUM2 = 0;
// Check if Key2 is pressed
if (digitalRead(Key2) == LOW) { // Key2 Pressed
delay(20);
if (digitalRead(Key2) == LOW) {
KEY_NUM2 = 1;
// Toggle relay2 state until Key2 is released
while (digitalRead(Key2) == LOW) {
digitalWrite(Relay2, !digitalRead(Relay2)); // Toggle relay2 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}
void ScanKey3() {
KEY_NUM3 = 0;
// Check if Key3 is pressed
if (digitalRead(Key3) == LOW) { // Key3 Pressed
delay(20);
if (digitalRead(Key3) == LOW) {
KEY_NUM3 = 1;
// Toggle relay3 state until Key3 is released
while (digitalRead(Key3) == LOW) {
digitalWrite(Relay3,HIGH); // Toggle relay3 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}
void ScanKey4() {
KEY_NUM3 = 0;
// Check if Key4 is pressed
if (digitalRead(Key4) == LOW) { // Key4 Pressed
delay(20);
if (digitalRead(Key4) == LOW) {
KEY_NUM3 = 1;
// Toggle relay4 state until Key4 is released
while (digitalRead(Key4) == LOW) {
digitalWrite(Relay4,HIGH); // Toggle relay4 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}
I'm trying to program the KC868-A4 to activate the relay, as long as the corresponding digital input is activated. When I release the button the corresponding relay should deactivates.
With the code I wrote, when I close the digital input the relevant relay turns on. But when I open the digital imput, The relay remains on. Can some one tell me where is a mistake ? Below the code in use. Thank You
#define Relay1 2
#define Relay2 15
#define Relay3 5
#define Relay4 4
#define Key1 36
#define Key2 39
#define Key3 27
#define Key4 14
int KEY_NUM1; // KEY_1 value
int KEY_NUM2; // KEY_2 value
int KEY_NUM3; // KEY_3 value
int KEY_NUM4; // KEY_4 value
void setup() {
pinMode(Relay1, OUTPUT); // Relay1 IO2
pinMode(Relay2, OUTPUT); // Relay2 IO15
pinMode(Relay3, OUTPUT); // Relay1 IO5
pinMode(Relay4, OUTPUT); // Relay1 IO4
pinMode(Key1, INPUT); // Dig. Input1 IO36
pinMode(Key2, INPUT); // Dig. Input2 IO39
pinMode(Key3, INPUT); // Dig. Input3 IO27
pinMode(Key4, INPUT); // Dig. Input4 IO14
}
void loop() {
ScanKey1(); // Call function to scan Key1
ScanKey2(); // Call function to scan Key2
ScanKey3(); // Call function to scan Key3
ScanKey4(); // Call function to scan Key4
}
void ScanKey1() {
KEY_NUM1 = 0;
// Check if Key1 is pressed
if (digitalRead(Key1) == LOW) { // Key1 Pressed
delay(20); // Wait for button debounce
if (digitalRead(Key1) == LOW) {
KEY_NUM1 = 1;
// Toggle relay1 state until Key1 is released
while (digitalRead(Key1) == LOW) {
digitalWrite(Relay1, !digitalRead(Relay1)); // Toggle relay1 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}
void ScanKey2() {
KEY_NUM2 = 0;
// Check if Key2 is pressed
if (digitalRead(Key2) == LOW) { // Key2 Pressed
delay(20);
if (digitalRead(Key2) == LOW) {
KEY_NUM2 = 1;
// Toggle relay2 state until Key2 is released
while (digitalRead(Key2) == LOW) {
digitalWrite(Relay2, !digitalRead(Relay2)); // Toggle relay2 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}
void ScanKey3() {
KEY_NUM3 = 0;
// Check if Key3 is pressed
if (digitalRead(Key3) == LOW) { // Key3 Pressed
delay(20);
if (digitalRead(Key3) == LOW) {
KEY_NUM3 = 1;
// Toggle relay3 state until Key3 is released
while (digitalRead(Key3) == LOW) {
digitalWrite(Relay3,HIGH); // Toggle relay3 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}
void ScanKey4() {
KEY_NUM3 = 0;
// Check if Key4 is pressed
if (digitalRead(Key4) == LOW) { // Key4 Pressed
delay(20);
if (digitalRead(Key4) == LOW) {
KEY_NUM3 = 1;
// Toggle relay4 state until Key4 is released
while (digitalRead(Key4) == LOW) {
digitalWrite(Relay4,HIGH); // Toggle relay4 state
delay(100); // Adjust delay as needed to control toggle speed
}
}
}
}