SEN208\2 Driver board

Heya,

At the moment I'm working with a test boards called SEN208\2.
I have to control 24 NX3DV2567 devices ( SOT1161-1 ) individually. I've already tried to learn the I2C code by watching and reading tutorials but i cant seem to figure it out myself. Somehow everything I think I understand doesn't seem to make sense within the coding.

I would be reall glad if once again someone would like to help me out :slight_smile:
This is the code in it's current state:

#include <SD.h> //Insert SD Library
#include <SPI.h> // Insert SPI communication library
#include <Wire.h>

const int PCA8574PW1 = 0x38;
const int PCA8574PW2 = 0x39;
const int PCA8574PW3 = 0x3A;


float refresh_rate = 0.0; //Set refreshrate, dit is de delay functie. Dit geeft aan hoe snel de data word ontvangen en geschreven.

long id = 1;// Oplopend getal voor alle data.

void setup() {
  
  Wire.begin();
  Serial.begin(9600);// Begin het programma op 9600baud, dit is nodig voor de COM om text in weer te geven
  Serial.println("Initializing Card");
  pinMode(4, OUTPUT);// Locatie op arduino voor SD pin

  if(!SD.begin(4))
  {
    Serial.println("Card Failed!");
    return;//Indien de SD kaart niet gevonden is geeft aan :Card Failed
  }
  else
  Serial.println("Card Ready.");
  delay(5000);
  
  File commandFile = SD.open("COMMAND.txt");// Het lezen van de SD card. (Refreshrate)
  if (commandFile)
  {
    Serial.println("Reading Command File");

    float decade = pow(10, (commandFile.available() - 1));
    while(commandFile.available())//programma gaat opzoek naar de Cammond file op de SD kaart
    {
      float temp = (commandFile.read() - '0');
      refresh_rate = temp*decade+refresh_rate;
      decade = decade/10;//Refreshrate van command file omgezet naar hexadecimale getallen
    }
    Serial.print("Refresh Rate = ");
    Serial.print(refresh_rate);
    Serial.println("ms");//refreshrate aangegeven op de COM
  }
 
  else
  {
    Serial.println("Couldn't read command file.");
    return;
  }
   
  File logFile = SD.open("CRASH.csv", FILE_WRITE);
  if (logFile)
  {
    logFile.println(", ,");
    String header = "ID, Voltage, Current, Display V, Display A";
    logFile.println(header);
    logFile.close();
    Serial.println(header);// Display op COM van data
  }
  else
  {
    Serial.println("Couldn't open log file");
  }  
  delay(10000);
}


void loop() {
 
 int val = analogRead(A10);
 int valC = analogRead(A11);// analoge ingangen (zelf aangeven) waar de voltages binnen komen.
  Wire.beginTransmission(PCA8574PW1);
  
  if (PCA8574PW1 == 0)
  {Serial.println ("No connection!");
  delay(refresh_rate);
  return;
  
  }
  
  else
    {
      Wire.write(byte highAddress);
      Wire.write(byte lowAddress);
      float Voltage = val*(5.0/1023.0);
      float Current = valC*(5.0/1023.0);
      float Display = ((val*(5.0/1023.0))*3);
      float DisplayC = ((valC*(5.0/1023.0))*2);
      String dataString = String(id) + ", " + String(Voltage) + ", " + String(Current) + ", " +String(Display) + ", " +String(DisplayC);//Display voor COM en Excel. 
    }
  Wire.endTransmission(PCA8574PW1);
  delay(refresh_rate);
  Wire.beginTransmission(PCA8574PW2);
  
  if (PCA8574PW2 ==0)
  {Serial.println("Lost connection.");
  delay(refresh_rate);
  return;}
  
  else
    {
      Wire.write(byte highAddress);
      Wire.write(byte lowAddress);
      float Voltage = val*(5.0/1023.0);
      float Current = valC*(5.0/1023.0);
      float Display = ((val*(5.0/1023.0))*3);
      float DisplayC = ((valC*(5.0/1023.0))*2);
      String dataString = String(id) + ", " + String(Voltage) + ", " + String(Current) + ", " +String(Display) + ", " +String(DisplayC);//Display voor COM en Excel. 
    }
  Wire.endTransmission(PCA8574PW2);
  delay(refresh_rate);
  Wire.beginTransmission(PCA8574PW3);
  
  if (PCA8574PW3 == 0)
  {
  Serial.println("Connection Lost.");
  delay(refresh_rate);
  return;
  }
  else
    {
      Wire.write(byte highAddress);
      Wire.write(byte lowAddress);
      float Voltage = val*(5.0/1023.0);
      float Current = valC*(5.0/1023.0);
      float Display = ((val*(5.0/1023.0))*3);
      float DisplayC = ((valC*(5.0/1023.0))*2);
      String dataString = String(id) + ", " + String(Voltage) + ", " + String(Current) + ", " +String(Display) + ", " +String(DisplayC);//Display voor COM en Excel.
      {
        File dataFile = SD.open("CRASH.csv", FILE_WRITE);
        if(dataFile)
  {
    dataFile.print(dataString);
    dataFile.close();
    Serial.println(dataString);
  }
  else
  {
    Serial.println("Couldn't create datalog"); 
      }
    }
    }
  
 Wire.endTransmission(PCA8574PW3);
  id++;  // code voor het feit dat iedere opgenome waarde i.p.v. 1-1-1-1-1-1-1 is 1-2-3-4-5 word.
  delay (2000);
}

The description is in dutch for some of my collealues. If necessary i can change that to english.

On forehand thanks!

if (PCA8574PW1 == 0)
  {Serial.println ("No connection!");

You've defined that variable as a const int, with a value of 0x38. According to my calculator, 0x38 is not equal to 0, so that if statement will always be false.

      Wire.write(byte highAddress);
      Wire.write(byte lowAddress);

Does that even compile? What are you attempting to do here?

      String dataString = String(id) + ", " + String(Voltage) + ", " + String(Current) + ", " +String(Display) + ", " +String(DisplayC);//Display voor COM en Excel.

After uselessly pissing away resources manipulating Strings, dataString immediately goes out of scope. It's creation was, therefore, a waste of time and effort.