//without oled
#include <Wire.h>
#include <SD.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
//oled i2c
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C // 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//pins
int pinsCable[] ={22,23,24,25,26,27,28,29,30,31,39,38,47,46,45,44,43,42,41,40};
//SD
#define CS_PIN 53
File root;
int m=0;int k =0;int j = 0;int numWires = 0;int h=0;
int pinsCableBegin[8];
int pinsCableEnd[8];
String tabref[8];
String infoCable[16];
String userreference = "";
String result="";
bool foundReference = false;
String Cresult="";
String Wresult="";
String shortResult="";
String Sresult="";
String continuityResult ="";
String inversionResult ="";
String detailedRusult="m";
void pins(){
Serial.println(foundReference);
if (foundReference) {
Serial.print("Number of wires: ");
Serial.println(numWires);
for (int i = 0; i < numWires; i++) {
pinsCableBegin[i] = pinsCable[i]; // Pins from 22 to 25
pinMode(pinsCableBegin[i], INPUT_PULLUP);
pinsCableEnd[i] = pinsCable[15 - i]; // Pins from 40 to 37
pinMode(pinsCableEnd[i], OUTPUT);
digitalWrite(pinsCableEnd[i], HIGH);
delay(100);
}
//affichge pins
Serial.println("Pins in pinsCableBegin array:");
for (int i = 0; i < numWires; i++) {
Serial.print("Pin ");
Serial.print(i + 1);
Serial.print(": ");
Serial.println(pinsCableBegin[i]);
}
Serial.println("Pins in pinsCableEnd array:");
for (int i = 0; i < numWires; i++) {
Serial.print("Pin ");
Serial.print(i + 1);
Serial.print(": ");
Serial.println(pinsCableEnd[i]);
}
}
}
void setup() {
Serial.begin(9600);
pinMode(53, OUTPUT);
Serial.print("Initializing SD card... ");
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true){}
}
Serial.println("initialization done.");
Serial.println("Files in the card:");
root = SD.open("/");
printDirectory(root, 0);
Serial.println("");
File csvFile = SD.open("ref.csv");
if (csvFile) {
while (csvFile.available()) {
String line = csvFile.readStringUntil('\n');
if (line.length() > 1) {
String reference = line.substring(0, line.indexOf(';'));
if(reference.length() == 4){
tabref[m] = reference;
Serial.print("tabref= ");
Serial.println(tabref[m]);
m++;}
}
}}
csvFile.close();
File refFile = SD.open("ref.csv");
if (refFile) {
while (refFile.available()) {
String line = refFile.readStringUntil('\n');
if (line.length() > 1) {
String reference = line.substring(0, line.indexOf(';'));
Serial.print(reference);
if (reference == userreference) {
foundReference = true;
}
else if(foundReference && reference.length() == 4) {
break;
}
if (foundReference) {
foundReference = true;
int startPos = line.indexOf(';') + 1;
Serial.print(startPos);
int endPos = line.indexOf(';', startPos);
Serial.print(endPos);
while (endPos != -1) { // Loop until no more semicolons are found
String data = line.substring(startPos, endPos);
Serial.println(data);
infoCable[h] = data;
Serial.print("infoCable: ");
Serial.println(infoCable[h]);
startPos = endPos + 1; // Move to the next position after the semicolon
Serial.print(startPos);
endPos = line.indexOf(';', startPos);
Serial.print(endPos);
h++;
}
String lastData = line.substring(startPos); // Add the last data element after the last semicolon
infoCable[h] = lastData;
Serial.print("infoCable: ");
Serial.println(infoCable[h]);
h++;
numWires++;
}
}}}
refFile.close();
for (int i = 0; i < h; i++) {
Serial.print("hh");
Serial.println(h);
Serial.print("infoCable1: ");
Serial.println(infoCable[i]);
}
}
void loop() {
Serial.print("numm");
Serial.println(numWires);
for (int i = 0; i < numWires; i++) {
pinsCableBegin[i] = pinsCable[i]; // Pins from 22 to 31
pinMode(pinsCableBegin[i], INPUT_PULLUP);
pinsCableEnd[i] = pinsCable[19 - i]; // Pins from 40 to 39
pinMode(pinsCableEnd[i], OUTPUT);
digitalWrite(pinsCableEnd[i], HIGH);
delay(100);
}
//affichge pins
Serial.println("Pins in pinsCableBegin array:");
for (int i = 0; i < numWires; i++) {
Serial.print("Pin ");
Serial.print(i + 1);
Serial.print(": ");
Serial.println(pinsCableBegin[i]);
}
Serial.println("Pins in pinsCableEnd array:");
for (int i = 0; i < numWires; i++) {
Serial.print("Pin ");
Serial.print(i + 1);
Serial.print(": ");
Serial.println(pinsCableEnd[i]);
}
Serial.print("endd: ");
Serial.println(pinsCableEnd[0]);
runTest();
}
String runTest() {
continuityResult += "\nContinuity:";
inversionResult +="\ninversion:";
shortResult +="\nshort:";
int tableindex=0;
Serial.println(detailedRusult);
for (int i = 0; i <numWires ; i++) {
digitalWrite(pinsCableEnd[i], LOW);
delay(100);
Serial.print("wiree: ");
Serial.println(digitalRead(pinsCableEnd[i]));
continuityResult += continuity(pinsCableEnd[i], pinsCableBegin[i], tableindex);
tableindex=tableindex+2;
}
Serial.println(continuityResult);
/*
delay(100);
tableindex=0;
for (int i = 0; i <numWires; i++) {
digitalWrite(pinsCableEnd[i], LOW);
delay(100);
inversionResult += wrongConnection(pinsCableEnd[i], pinsCableBegin[i],tableindex);
tableindex=tableindex+2;
}
delay(100);
tableindex=0;
for (int i = 0; i < numWires; i++) {
digitalWrite(pinsCableEnd[i], LOW);
delay(100);
shortResult = shortCircuit(i,tableindex);
tableindex=tableindex+2;}*/
detailedRusult ="test results:\n" + continuityResult+"\n"+inversionResult+"\n"+shortResult+"\n" ;
Serial.println(detailedRusult);
}
String continuity(int wireE,int wireB,int tableIndex) {
//String result = "testing...";
int status = digitalRead(wireB); delay(50);
Serial.print("wireb: ");
Serial.println(status);
Cresult += "";
if (status == LOW) {
//String cableStatus = (digitalRead(pinsCableBegin[tableindex]) == LOW && digitalRead(pinsCableEnd[tableindex]) == LOW) ? "v (connected)" : "x (not connected)";
Cresult = infoCable[tableIndex] + " connected to " + infoCable[tableIndex + 1]+"\n";
} else {
Cresult = "Connection failed for " + infoCable[tableIndex] + " and " + infoCable[tableIndex + 1]+"\n";
}
digitalWrite(wireE, HIGH);
return Cresult;
}
/*
String wrongConnection(int pin1, int pin2,int tableIndex) {
int statusA = digitalRead(pin2);
int statusC = digitalRead(pin1);
if (statusA != statusC) {
Wresult = "Wrong Connection for " + infoCable[tableIndex] + " and " + infoCable[tableIndex + 1]+"\n";
} else {
Wresult = infoCable[tableIndex] + " Connected Correctly to " + infoCable[tableIndex + 1]+"\n";
}
digitalWrite(pin1, HIGH);
return Wresult;
}
String shortCircuit(int k,int tabi){
for( int j=0; j<numWires; j++){
delay(200);
if( digitalRead(pinsCableEnd[j]) == LOW){
if(j!=k){
Sresult += infoCable[tabi] + " short circuit to wire " + infoCable[tabi + 2]+"\n";
}}
else if( digitalRead(pinsCableBegin[j]) == LOW){
if(j!=k){
Sresult += infoCable[tabi] + " short circuit to wire " + infoCable[j+j+1]+"\n";
}}
else{
Sresult += "no short circuit to wire \n";
}
digitalWrite(pinsCableEnd[k], HIGH);
}
return Sresult;
}*/
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}