#include <Keypad.h>
// Define keypad settings
const byte ROWS = 2;
const byte COLS = 6;
// Define keypad button layout
char keys[ROWS][COLS] = {
{'A', 'B', 'C', 'D', 'E', 'F'},
{'G', 'H', 'I', 'J', 'K', 'L'},
// {'A', 'B', 'C', 'D', 'E'}
};
// Connect keypad rows and columns to the Arduino
byte rowPins[ROWS] = {A0, A1}; // Change according to your wiring
byte colPins[COLS] = {A2, A3, A4, A5, A6, A7};
// Initialize the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Relay pins
const int L1Button = 2; // Adjust pin numbers as per your setup
const int R1Button = 3;
const int L3Button = 4;
const int R3Button = 5;
const int XButton = 6;
const int TRIButton = 7;
const int RDButton = 8;
const int SQButton = 9;
const int UPButton = 10;
const int DownButton = 11;
const int LeftButton = 12;
const int RightButton = 0; // Invalid GPIO
// Timing constants
const int DelayInter = 100; // Milliseconds delay between actions
const int DelayHold = 100; // Milliseconds to hold the relays
// Function to activate a sequence
void activateSequence(int relay1, int relay2, int relay3 = -1) {
digitalWrite(relay1, HIGH);
delay(DelayInter);
digitalWrite(relay2, HIGH);
delay(DelayInter);
if (relay3 != -1) digitalWrite(relay3, HIGH);
delay(DelayInter);
delay(DelayHold);
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
if (relay3 != -1) digitalWrite(relay3, LOW);
}
void setup() {
// Set relay pins as output
pinMode(L1Button, OUTPUT);
pinMode(R1Button, OUTPUT);
pinMode(L3Button, OUTPUT);
pinMode(R3Button, OUTPUT);
pinMode(XButton, OUTPUT);
pinMode(TRIButton, OUTPUT);
pinMode(RDButton, OUTPUT);
pinMode(SQButton, OUTPUT);
pinMode(UPButton, OUTPUT);
pinMode(DownButton, OUTPUT);
pinMode(LeftButton, OUTPUT);
pinMode(RightButton, OUTPUT);
// Turn off all relays initially
digitalWrite(L1Button, LOW);
digitalWrite(R1Button, LOW);
digitalWrite(L3Button, LOW);
digitalWrite(R3Button, LOW);
digitalWrite(XButton, LOW);
digitalWrite(TRIButton, LOW);
digitalWrite(RDButton, LOW);
digitalWrite(SQButton, LOW);
digitalWrite(UPButton, LOW);
digitalWrite(DownButton, LOW);
digitalWrite(LeftButton, LOW);
digitalWrite(RightButton, LOW);
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey(); // Get the pressed key
if (key) {
switch (key) {
case 'A': // Fold/Unfold Equipment
activateSequence(L1Button, XButton);
Serial.println("Fold/Unfold Equipment");
break;
case 'B': // Lower/Lift Equipment
activateSequence(L1Button, RDButton);
Serial.println("Lower/Lift Equipment");
break;
case 'C': // PTO On/Off
activateSequence(L1Button, SQButton);
Serial.println("PTO On/Off");
break;
case 'D': // Engine On/Off
activateSequence(R1Button, SQButton);
Serial.println("Engine On/Off");
break;
case 'E': // Vehicle Light On/Off
activateSequence(R1Button, RDButton);
Serial.println("Vehicle Light On/Off");
break;
case 'F': // Vehicle Strobes On/Off
activateSequence(R1Button, UPButton);
Serial.println("Vehicle Strobes On/Off");
break;
case 'G': // Unload Deposit
activateSequence(R1Button, TRIButton);
Serial.println("Unload Deposit");
break;
case 'H': // Unload Any Spot
activateSequence(L1Button, R1Button, TRIButton);
Serial.println("Unload Any Spot");
break;
case 'I': // Left Flasher
activateSequence(R1Button, LeftButton);
Serial.println("Left Flasher");
break;
case 'J': // Right Flasher
activateSequence(R1Button, RightButton);;
Serial.println("Right Flasher");
break;
case 'K': // Cruise On/Off
//Serial.println("Cruise On/Off");
activateSequence(L1Button, R1Button, RDButton);
Serial.println("Cruise On/Off");
break;
case 'L': // UNASSIGNED
activateSequence(L1Button, R1Button, TRIButton);
Serial.println("UNASSIGNED");
break;
default:
// Do nothing for unrecognized keys
break;
}
delay(DelayInter); // Inter-sequence delay
}
}