#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd_1(A0, A1, A2, A3, A4, A5);
LiquidCrystal lcd_2(A6, A7, A8, A9, A10, A11);
String shortedPins;
int shortedData[20];
int c = 0;
int numpins;
// for keyboard mapping
const int ROWS = 4;
const int COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte pin_rows[ROWS] = {A12, A13, A14, A15};
byte pin_column[COLS] = {50, 51, 52, 53};
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROWS, COLS );
void setup()
{
Serial.begin(9600);
lcd_1.begin(16, 2);
lcd_2.begin(16, 2);
lcd_1.setCursor(0, 0);
lcd_1.print("Testing Cable");
lcd_1.setCursor(0, 1);
lcd_1.print("Continuity Test"); lcd_2.setCursor(0, 0); lcd_2.print("Shorting test");
delay(2000);
lcd_1.clear();
lcd_2.clear();
lcd_2.setCursor(0, 0);
lcd_2.print("S-");
}
void loop() {
char key = keypad.getKey();
if (key) {
int pin=hexToDec(key);
numpins=2*pin;
Serial.println(numpins);
int status[numpins][numpins];
String shortedData[numpins];
int outputPins[numpins];
int inputPins[numpins];
int j;
// keypad
for (int k=0;k<numpins;k++)
{
if(k<numpins/2){
outputPins[k] =k+2;
inputPins[k] = k+26;
}
else{
outputPins[k] =j+14;
inputPins[k] = j+38;
j++;
}
}
// output input pin define
for (int i = 0; i < numpins; i++)
{
pinMode(outputPins[i], OUTPUT);
pinMode(inputPins[i], INPUT);
}
// storing data in array matrix form
for (int i = 0; i < numpins; i++) {
digitalWrite(outputPins[i], HIGH);
for (int j = 0; j < numpins; j++) {
if (digitalRead(inputPins[j]))
{
status[i][j]=(j+1);
}
else
{
status[i][j]=0;
}
}
digitalWrite(outputPins[i], LOW);
}
// printing data array matrix
for (int i=0; i<numpins ; i++)
{
for (int j=0 ; j<numpins; j++)
{
Serial.print(status[i][j]);
Serial.print(" ");
}
Serial.println("");
}
// checking continuity
lcd_1.setCursor(0, 1);
for (int i=0; i<numpins/2 ; i++)
{
for (int j=i ; j<numpins; j++)
{
if ((j-numpins/2)==(i)&&(status[i][j]-(numpins/2)==(i+1)))
{
c++;
}
else
{
if((j-numpins/2)==i && status[i][j]==0)
{
Serial.println((j-numpins/2)+1);
lcd_1.print((j-numpins/2)+1);
}
}
}
}
if (c==numpins/2)
{
lcd_1.setCursor(0, 0);
lcd_1.print("Continuity OK");
Serial.print("Continuity OK");
}
else{
lcd_1.setCursor(0, 0);
lcd_1.print("Not OK");
Serial.println("Not ok");
}
//shorting case
lcd_2.setCursor(2, 0);
for (int i=0; i<numpins ; i++)
{
for (int j=0 ; j<numpins; j++)
{
if (status[i][j]!=0 )
{
shortedPins+=status[i][j];
}
}
shortedData[i]=shortedPins;
shortedPins="";
// Serial.print(shortedData[i]+",");
if (shortedData[i].length() > 1) {
Serial.print(shortedData[i]+",");
lcd_2.print(shortedData[i]);
lcd_2.print(",");
}
}
}
}
//Hex to Decimal Conv
int hexToDec(char hexChar) {
int decValue = 0;
if (hexChar >= '0' && hexChar <= '9') {
decValue = hexChar - '0';
} else if (hexChar >= 'A' && hexChar <= 'F') {
decValue = 10 + hexChar - 'A';
}
return decValue;
}