diff --git a/config.yml b/config.yml
index b21ad45af74cf32710441f55ff1e7301682b4212..200c16ede02103b5c2d0216edc6642f4e6528700 100644
--- a/config.yml
+++ b/config.yml
@@ -14,6 +14,6 @@ InfoLogger:
         - WARNING
 
 Data:
-    factors: [1, 1, 1, 1] # factors for the 4 dms
+    factors: [9.6474, 0, 10.9132, -11.6764] # factors for the 4 dms
     delta_time: 30 # time between logging data
     smoothing: false # whether to smoothe the logged data
diff --git a/main.py b/main.py
index e434cc0c3d02fe35e3e9210744306880a1830208..82aa784661b8a22db354f1891d7f3a736c1846aa 100644
--- a/main.py
+++ b/main.py
@@ -176,7 +176,7 @@ def main(config: Any) -> None:
 
             if time.time() - last_write > delta_time:
                 # write data
-                data_logger.info(",".join([f"{value/n * factors + offsets:.5f}" for value in data]) + f",{n}")
+                data_logger.info(",".join([f"{value/n * factors[i] + offsets[i]:.5f}" for i, value in enumerate(data)]) + f",{n}")
                 logger.debug("Wrote data")
                 n = 0
                 data = np.zeros((8,))
diff --git a/scripts/serial_id.py b/scripts/serial_id.py
index 7061c9c7e22636abf8b6d71fabaa0dc0a7035995..aa610052304db785e0f14956634d501bc8af71a6 100644
--- a/scripts/serial_id.py
+++ b/scripts/serial_id.py
@@ -9,7 +9,8 @@ if __name__ == "__main__":
             con.write(1)
 
             try:
-                print(int(con.readline().decode("utf-8")))
+                data = con.readline().decode("utf-8").replace('\r','').replace('\n','')
+                print(int(float(data)))
                 break
             except (TypeError, ValueError):
                 time.sleep(1)
diff --git a/scripts/write.bash b/scripts/write.bash
index 828047c301069b48e4802b88fc3ab2d5174c0bae..5346725a41d0722749b4e7228c2ef34233c89443 100755
--- a/scripts/write.bash
+++ b/scripts/write.bash
@@ -2,7 +2,7 @@
 
 cd `dirname "$0"`/../sketches
 
-fqbn=arduino:avr:nano
+fqbn=arduino:avr:uno
 core=arduino:avr
 
 id=$(python3 ../scripts/serial_id.py)
@@ -11,14 +11,15 @@ if [[ $id == "1" ]]
 then
     serial_dms=/dev/ttyACM0
     serial_temp=/dev/ttyACM1
-elif [[ $id == "0" ]]
+elif [[ $id == "2" ]]
 then
     serial_temp=/dev/ttyACM0
     serial_dms=/dev/ttyACM1
 else
     echo -e "\x1b[31mError: Something went wrong.\x1b[0m"
     echo -e "Exiting"
-    exit 1
+    serial_dms=/dev/ttyACM1
+    serial_temp=/dev/ttyACM0
 fi
 
 echo -e "Info: DMS arduino: $serial_dms, Temp arduino: $serial_temp"
@@ -26,20 +27,22 @@ echo -e "Info: DMS arduino: $serial_dms, Temp arduino: $serial_temp"
 echo "Checking connected devices..."
 
 device_list=$(arduino-cli board list)
-connected_devices=$(echo -e $device_list | grep "^\(\($serial_dms\)\|\($serial_temp\)\).*$fqbn.*$core$" | wc -l)
+connected_devices=$(echo $device_list | grep "^\(\($serial_dms\)\|\($serial_temp\)\).*$fqbn.*$core" | wc -l)
 
 if [[ $connected_devices != "2" ]] 
 then
-    echo -e "\x1b[31mError: not all arduino devices are connected,\x1b[0m"
+    echo -e "\x1b[31mError: not all arduino devices are connected, only found: $connected_devices.\x1b[0m"
     echo -e "Connected devices are:\n$device_list"
     echo -e "Exiting."
-    exit 1
+    
 fi
 
 echo "Checking installed cores..."
 
 core_list=$(arduino-cli core list)
-core_list_installed=$(echo -e $core_list | grep "^$core")
+core_list_installed=$(echo $core_list | grep "$core")
+echo $core_list
+echo $core_list | grep "$core"
 
 if [[ -z $core_list_installed ]]
 then
@@ -91,7 +94,7 @@ fi
 
 echo "Uploading sketches..."
 
-upload=$(arduino-cli upload -p $serial_dms --fqbn $fqbn DmsMessung)
+upload=$(arduino-cli upload --port $serial_dms --fqbn $fqbn DmsMessung)
 if [[ $? -gt 0 ]]
 then
     echo -e "\x1b[31mError: Upload of DmsMessung failed:\x1b[0m"
@@ -100,7 +103,7 @@ then
     exit 1
 fi
 
-upload=$(arduino-cli upload -p $serial_temp --fqbn $fqbn Temperaturmessung)
+upload=$(arduino-cli upload --port $serial_temp --fqbn $fqbn Temperaturmessung)
 if [[ $? -gt 0 ]]
 then
     echo -e "\x1b[31mError: Upload of Temperaturmessung failed:\x1b[0m"
@@ -109,4 +112,4 @@ then
     exit 1
 fi
 
-echo "Finished"
\ No newline at end of file
+echo "Finished"
diff --git a/sketches/DmsMessung/DmsMessung.ino b/sketches/DmsMessung/DmsMessung.ino
index 487765e157b37af08f10d1d5246723f04a0e766f..2b41249bab2247be7d7e293e793db4e4bdc401d5 100644
--- a/sketches/DmsMessung/DmsMessung.ino
+++ b/sketches/DmsMessung/DmsMessung.ino
@@ -1,57 +1,197 @@
 #include <HX711_ADC.h>
-#include "cstring"
 
-HX711_ADC loadCells[] = {HX711_ADC(2, 3), HX711_ADC(6, 7), HX711_ADC(8, 9), HX711_ADC(12, 13)};
-float measurements[4];
-float offsets[4];
+// Ein Objekt mit dem Konstruktor aus der Bibliothek erstellen
+HX711_ADC LoadCell(2, 3);
+HX711_ADC LoadCell2(6, 7);
+HX711_ADC LoadCell3(8, 9);
+HX711_ADC LoadCell4(12, 13);
 
-int count = 100; // number of measurements
-long stabilization = 2000;
+// Globale Variablen intialisieren
 
-void readData() {
-    // write the averaged data over 'count' measurements into 'measurements'.
+static float Offset  = 0;
+static float Offset2 = 0;
+static float Offset3 = 0;
+static float Offset4 = 0;
 
-    std::memset(measurements, 0, sizeof measurements); // zero out measurements
+int anzahl         = 100;
+int caltime        = 2;
+float calFac       = 2429;
+float calFac2      = 2406;
+float calFac3      = 2442;
+float calFac4      = 2454;
+long stabilisation = 2000;
+boolean t_are      = true;
+float messwertges;
+float messwertges2;
+float messwertges3;
+float messwertges4;
 
-    for (int i = 0; i < count; i++) {
-        for (int j = 0; j < sizeof(loadCells) / sizeof(*loadCells); j++) {
-            loadCells[j].update();
-            measurements[j] += loadCells[j].getRareData() - offsets[j];
-        }
-    }
+float messwert;
+float messwert2;
+float messwert3;
+float messwert4;
+
+void regelbetrieb(HX711_ADC zelle, HX711_ADC zelle2, HX711_ADC zelle3, HX711_ADC zelle4) {
+    float messwertAlt  = messwert;
+    float messwertAlt2 = messwert2;
+    float messwertAlt3 = messwert3;
+    float messwertAlt4 = messwert4;
+    messwert           = 0;
+    messwert2          = 0;
+    messwert3          = 0;
+    messwert4          = 0;
+
+    for (int i = 1; i <= anzahl; i++) {
+        // Eingänge der Pins neu auslesen
+
+        zelle.update();
+        zelle2.update();
+        zelle3.update();
+        zelle4.update();
+
+        // Messwert aufsummieren
+
+        messwert  = messwert + (getDaten(Offset, zelle));
+        messwert2 = messwert2 + (getDaten(Offset2, zelle2));
+        messwert3 = messwert3 + (getDaten(Offset3, zelle3));
+        messwert4 = messwert4 + (getDaten(Offset4, zelle4));
 
-    for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) {
-        measurements[i] /= count;
+        // messwert=getDaten(Offset);
+        // Serial.println(messwert);
+        // 1 Millisekunden warten((1/1000) Sekunde)
+        delay(1);
     }
+
+    // Berechne Mittelwert der letzten 1000 Messwerte aus der
+    // letzten Sekunde
+
+    messwert  = messwert / anzahl;
+    messwert2 = messwert2 / anzahl;
+    messwert3 = messwert3 / anzahl;
+    messwert4 = messwert4 / anzahl;
+
+    messwert  = messwert / calFac;
+    messwert2 = messwert2 / calFac2;
+    messwert3 = messwert3 / calFac3;
+    messwert4 = messwert4 / calFac4;
+
+    // Methode für schreiben in Datenbank
+    //  messwert=epsilonumgebung(messwert,messwertAlt);
+    //  messwert2=epsilonumgebung(messwert2,messwertAlt2);
+    //  messwert3=epsilonumgebung(messwert3,messwertAlt3);
+    //  messwert4=epsilonumgebung(messwert4,messwertAlt4);
+
+    // Es fehlt noch die kalbrierte Umrechnung auf Mikrostrain.
+    //  Serial.println("Die Daten betragen ");
+    //  Serial.println(messwert,1);
+    //  Serial.println(Offset,1);
+    // delay(1000);
 }
+// Methode zum berechnen der Spannung
+float getDaten(float offset, HX711_ADC zelle) {
+    float Offsetnew = offset;
 
-void setup() {
-    Serial.begin(9600);
+    // Hilfsvariablen initialisieren
+    float data;
 
-    for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) {
-        loadCells[i].begin();
+    // Methode getRareData() aus der Bibliothek abzüglich dem vorher
+    // gemessenen Offset-Wert
 
-        loadCells[i].start(stabilization, true);
-    }
+    data = (float)zelle.getRareData() - Offsetnew;
 
-    // zero out load cells
-    readData();
-    std::memcpy(offsets, measurements, sizeof offsets);
+    // Gemessene Spannung als Rückgabewert
+
+    return data;
 }
 
-void loop() {
+// Hier steht die Methode zum schreiben in eine Datenbank
+
+void writeInData() {
+    // Wenn eine serielle Verbindung verfügbar ist soll das Programm ausgefuehrt
+    // werden
     if (Serial.available()) {
+        // Der Arduino wartet auf eine Anfrage vom Pi
         Serial.read();
+        // Damit der Pi die Gelegenheit bekommt sich auf das Einlesen der Messwerte
+        // vorzubereiten wird ein Delay von 10ms eingeführt
+        delay(10);
 
+        Serial.println(1);
         delay(10);
+        // In diesem Testskript wird eine zufällige Zahl zwischen 0 und 100
+        // festgelegt
 
-        Serial.println(1);  // for identification
+        regelbetrieb(LoadCell, LoadCell2, LoadCell3, LoadCell4);
 
-        readData();
+        // Die Zahl wird dann an den Pi übermittelt
+        // Serial.print("Zelle 1   ");
+        Serial.println(messwert);
+        delay(10);
+        // Serial.print("Zelle 2   ");
+        Serial.println(messwert2);
+        delay(10);
+        // Serial.print("Zelle 3    ");
+        Serial.println(messwert3);
+        delay(10);
+        // Serial.print("Zelle 4    ");
+        Serial.println(messwert4);
+        delay(10);
+    }
+}
 
-        for (int i = 0; i < sizeof(loadCells) / sizeof(*loadCells); i++) {
-            Serial.println(measurements[i]);
-            delay(10);
-        }
+float epsilonumgebung(float hierMesswert, float hierMesswertAlt) {
+    if (hierMesswert < hierMesswertAlt + 0.25 && hierMesswert > hierMesswertAlt - 0.25) {
+        hierMesswert = hierMesswertAlt;
     }
-}
\ No newline at end of file
+    return hierMesswert;
+}
+// In der Setup steht die bestimmung des Nullpunkts
+
+void setup() {
+    Serial.begin(9600);
+
+    // Serial.println(Offset);
+
+    LoadCell.begin();
+    LoadCell2.begin();
+    LoadCell3.begin();
+    LoadCell4.begin();
+
+    LoadCell.start(stabilisation, t_are);
+    LoadCell2.start(stabilisation, t_are);
+    LoadCell3.start(stabilisation, t_are);
+    LoadCell4.start(stabilisation, t_are);
+
+    LoadCell.update();
+    LoadCell2.update();
+    LoadCell3.update();
+    LoadCell4.update();
+
+    // Messwert aufsummieren
+
+    Offset  = getDaten(0, LoadCell);
+    Offset2 = getDaten(0, LoadCell2);
+    Offset3 = getDaten(0, LoadCell3);
+    Offset4 = getDaten(0, LoadCell4);
+
+    delay(500);
+
+    /*
+     //Eingänge der Pins neu auslesen
+     float Offsetsum;
+     caltime=caltime*1000;
+     for (int i=1; i<=caltime; i++){
+     delay(1);
+  }
+   Offset=Offsetsum/caltime;
+   */
+}
+// In der loop steht der Regelbetrieb der Waage
+
+void loop() {
+    writeInData();
+}
+
+// mögliche Nachbesserungen
+// millis() läuft nach 50 Tagen über und geht zurück auf 0
+// millis(): https://www.arduino.cc/reference/de/language/functions/time/millis/
\ No newline at end of file
diff --git a/sketches/Temperaturmessung/Temperaturmessung.ino b/sketches/Temperaturmessung/Temperaturmessung.ino
index 8f2d2977f07ac017f9cba6204bda09a3defc45e5..bf4ef188a66b9e39ffbe2022a2a4163060bcaa59 100644
--- a/sketches/Temperaturmessung/Temperaturmessung.ino
+++ b/sketches/Temperaturmessung/Temperaturmessung.ino
@@ -7,13 +7,13 @@
 
 #define DHT_Typ DHT11
 
-DHT dths[] = {DHT(DHT1_Pin, DHT_Typ), DHT(DHT2_Pin, DHT_Typ), DHT(DHT3_Pin, DHT_Typ), DHT(DHT4_Pin, DHT_Typ)};
+DHT dhts[] = {DHT(DHT1_Pin, DHT_Typ), DHT(DHT2_Pin, DHT_Typ), DHT(DHT3_Pin, DHT_Typ), DHT(DHT4_Pin, DHT_Typ)};
 
 void setup() {
     Serial.begin(9600);
 
-    for (int i = 0; i < sizeof(dhts); i++) {
-        dths[i].begin();
+    for (int i = 0; i < sizeof(dhts) / sizeof(*dhts); i++) {
+        dhts[i].begin();
     }
 }
 
@@ -25,7 +25,7 @@ void loop() {
 
         Serial.println(2);  // for identification
 
-        for (int i = 0; i < sizeof(dths) / sizeof(*dths); i++) {
+        for (int i = 0; i < sizeof(dhts) / sizeof(*dhts); i++) {
             float temp = dhts[i].readTemperature();
 
             Serial.println(temp);