#include <LiquidCrystal_I2C.h> // LiquidCrystal I2C - Version: 1.1.1
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // LCD HEX address 0x27
#define PB1 1
#define PB2 2
#define PB3 3
#define PB4 4
#define PB5 5
#define PB6 6
#define PB7 7
#define PB8 8
#define PB9 9
#define PB10 10
#define PB11 11
#define PB12 12
#define PB13 13
#define PB14 14
#define PB15 15
#define PB16 16
#define Alt1 17
#define Alt2 34
#define Alt3 35
#define Alt4 36
#define out1 18
#define out2 19
#define out3 38
#define out4 39
#define out5 22
#define out6 23
#define out7 24
#define out8 25
#define out9 26
#define out10 27
#define out11 28
#define out12 29
#define out13 30
#define out14 31
#define out15 32
#define out16 33
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
int f = 0;
int g = 0;
int h = 0;
int i = 0;
int j = 0;
int k = 0;
int l = 0;
int push1 = 0;
int push2 = 0;
int push3 = 0;
int push4 = 0;
int push5 = 0;
int push6 = 0;
int push7 = 0;
int push8 = 0;
int push9 = 0;
int push10 = 0;
int push11 = 0;
int push12 = 0;
int push13 = 0;
int push14 = 0;
int push15 = 0;
int push16 = 0;
int m = 0;
int n = 0;
int o = 0;
int p = 0;
// Store them in an array for easy access
const int ledPins[] = {out1, out2, out3, out4, out5, out6, out7, out8,
out9, out10, out11, out12, out13, out14, out15, out16
};
const int numLEDs = 16;
unsigned long previousMillis = 0;
const long interval = 100; // Time interval for LED updates (milliseconds)
const long offDelay = 500; // Delay before turning all LEDs off
int currentLED = 0;
bool sequenceComplete = false;
unsigned long turnOffTime = 0;
void setup() {
Serial.begin(9600);
Serial.println("here We Go");
for (int pin = 1; pin <= 16; pin++) { // For pins 2 through 10
pinMode(pin, INPUT_PULLUP); // Set them as OUTPUT
}
for (int pin = 18; pin <= 19; pin++) { // For pins 2 through 10
pinMode(pin, OUTPUT); // Set them as OUTPUT
}
for (int pin = 22; pin <= 33; pin++) { // For pins 2 through 10
pinMode(pin, OUTPUT); // Set them as OUTPUT
}
int inputPins[] = {17, 34, 35, 36};
for (int i = 0; i < sizeof(inputPins) / sizeof(inputPins[0]); i++) {
pinMode(inputPins[i], INPUT_PULLUP); // Set each as INPUT
for (int i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], LOW); // Ensure all LEDs start off
}
}
lcd.begin(16, 2);
lcd.init(); // initialize the lcd
lcd.backlight(); // turns on the backlight
lcd.setCursor(0, 0); // set cursor to first row
lcd.print("PLC and Arduino"); // print out to LCD
lcd.setCursor(0, 1); // set cursor to first row
lcd.print("Test Board"); // print out to LCD
delay(3000);
lcd.clear();
delay(1000);
lcd.setCursor(0, 0);
lcd.print("Mode: Select a Mode");
}
void loop() {
m = digitalRead(Alt1);
n = digitalRead(Alt2);
o = digitalRead(Alt3);
p = digitalRead(Alt4);
if (m == LOW) a = 1, b = 0, c = 0, d = 0, f = 0;
if (n == LOW) b = 1, a = 0, c = 0, d = 0, e = 0, f = 0;
if (o == LOW) c = 1, a = 0, b = 0, d = 0, e = 0, f = 0;
if (p == LOW) d = 1, a = 0, b = 0, c = 0, e = 0, f = 0;
while ( a == 1) {
if (e == 0) Serial.println("Test Mode "), e = 1;
lcd.setCursor(6, 0);
lcd.print("Test Mode ");
push1 = digitalRead(PB1);
if (push1 == LOW) digitalWrite(out1, HIGH); else; digitalWrite(out1, LOW);
push2 = digitalRead(PB2);
if (push2 == LOW) digitalWrite(out2, HIGH); else; digitalWrite(out2, LOW);
push3 = digitalRead(PB3);
if (push3 == LOW) digitalWrite(out3, HIGH); else; digitalWrite(out3, LOW);
push4 = digitalRead(PB4);
if (push4 == LOW) digitalWrite(out4, HIGH); else; digitalWrite(out4, LOW);
push5 = digitalRead(PB5);
if (push5 == LOW) digitalWrite(out5, HIGH); else; digitalWrite(out5, LOW);
push6 = digitalRead(PB6);
if (push6 == LOW) digitalWrite(out6, HIGH); else; digitalWrite(out6, LOW);
push7 = digitalRead(PB7);
if (push7 == LOW) digitalWrite(out7, HIGH); else; digitalWrite(out7, LOW);
push8 = digitalRead(PB8);
if (push8 == LOW) digitalWrite(out8, HIGH); else; digitalWrite(out8, LOW);
push9 = digitalRead(PB9);
if (push9 == LOW) digitalWrite(out9, HIGH); else; digitalWrite(out9, LOW);
push10 = digitalRead(PB10);
if (push10 == LOW) digitalWrite(out10, HIGH); else; digitalWrite(out10, LOW);
push11 = digitalRead(PB11);
if (push11 == LOW) digitalWrite(out11, HIGH); else; digitalWrite(out11, LOW);
push12 = digitalRead(PB12);
if (push12 == LOW) digitalWrite(out12, HIGH); else; digitalWrite(out12, LOW);
push13 = digitalRead(PB13);
if (push13 == LOW) digitalWrite(out13, HIGH); else; digitalWrite(out13, LOW);
push14 = digitalRead(PB14);
if (push14 == LOW) digitalWrite(out14, HIGH); else; digitalWrite(out14, LOW);
push15 = digitalRead(PB15);
if (push15 == LOW) digitalWrite(out15, HIGH); else; digitalWrite(out15, LOW);
push16 = digitalRead(PB16);
if (push16 == LOW) digitalWrite(out16, HIGH); else; digitalWrite(out16, LOW);
if (n == LOW or o == LOW or p == LOW) {
e = 0;
}
break;
}
while (b == 1) {
test();
Serial.print("B= ");
Serial.println(b);
if (f == 0) {
lcd.setCursor(6, 0);
lcd.print("Light Test ");
f = 1;
}
break;
}
}
void test() {
unsigned long currentMillis = millis();
if (!sequenceComplete) {
// Turn on LEDs one by one until we reach the last one
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Turn on the next LED
digitalWrite(ledPins[currentLED], HIGH);
currentLED++;
// If we reached the last LED, start the countdown to turn them off
if (currentLED >= numLEDs) {
sequenceComplete = true;
turnOffTime = millis(); // Mark the time we finished lighting up LEDs
}
}
} else {
// After 1 second, turn all LEDs off
if (currentMillis - turnOffTime >= offDelay) {
for (i = 0; i < numLEDs; i++) {
digitalWrite(ledPins[i], LOW);
}
// Reset for the next cycle
currentLED = 0;
sequenceComplete = false;
previousMillis = millis(); // Restart timing
}
}
}