#include <LiquidCrystal.h>
#include <Encoder.h>
// Pin definitions
const int confirmButtonPin = 5; // Confirm button pin
const int triggerButtonPin = 5; // Trigger button pin
const int relayPin = 12; // Relay pin for triggering the welder
const int rotaryPinA = 2; // Rotary encoder CLK pin
const int rotaryPinB = 3; // Rotary encoder DT pin
const int rotaryPinSwitch = 4; // Rotary encoder switch pin
// Rotary encoder object
Encoder encoder(rotaryPinA, rotaryPinB);
// LCD setup
LiquidCrystal lcd(6, 7, 8, 9, 10, 11);
// Variables for time adjustment
long position = 0; // Encoder position
long previousPosition = 0;
int weldingTime = 10; // Default welding time (in ms)
bool isConfirmed = false; // Confirmation flag
void setup() {
// Initialize relay pin
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // Ensure relay is off initially
// Initialize button pins
pinMode(confirmButtonPin, INPUT_PULLUP);
pinMode(triggerButtonPin, INPUT_PULLUP);
// Initialize rotary encoder switch pin
pinMode(rotaryPinSwitch, INPUT_PULLUP);
// Initialize LCD
lcd.begin(20, 4);
lcd.setCursor(0, 0);
lcd.print(" MNG proSystems ");
lcd.setCursor(0, 1);
lcd.print(" Spot Welder ");
delay(3000); // Wait for 2 seconds before next welding
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Spot Welder Settings");
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(weldingTime);
lcd.print(" ms");
// Instructions on the screen
lcd.setCursor(0, 2);
lcd.print("Press Rotary Button");
lcd.setCursor(0, 3);
lcd.print("to Confirm");
}
void loop() {
// Read rotary encoder position
position = encoder.read() / 4; // Scale down the position
// If the position has changed, update the welding time
if (position != previousPosition) {
weldingTime = map(position, 0, 100, 0, 1000); // Map encoder value to 0-5000 ms range
lcd.setCursor(6, 1);
lcd.print(" "); // Clear previous value
lcd.setCursor(6, 1);
lcd.print(weldingTime);
lcd.print(" ms");
previousPosition = position;
}
// Check for rotary switch press to confirm
if (digitalRead(rotaryPinSwitch) == LOW && !isConfirmed) {
isConfirmed = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Welding Time Set");
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(weldingTime);
lcd.print(" ms");
delay(2000); // Wait for 2 seconds before prompting for trigger button
// Prompt for pressing the trigger button
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Press Trigger Button");
}
// If trigger button is pressed, start the welding process
if (digitalRead(triggerButtonPin) == LOW && isConfirmed) {
triggerWelding();
}
}
void triggerWelding() {
// Activate the relay for the specified welding time
digitalWrite(relayPin, HIGH); // Trigger relay (start welding)
lcd.clear();
lcd.setCursor(0, 2);
lcd.print(" Welding...");
delay(weldingTime); // Keep the relay on for the set welding time
digitalWrite(relayPin, LOW); // Deactivate relay (stop welding)
delay(1000); // Wait for 2 seconds before next welding
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Welding Time Set to");
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(weldingTime);
lcd.print(" ms");
lcd.setCursor(0, 3);
lcd.print("Press Trigger Button");
}