Hallo Zusammen
Beschreibung:
Ich arbeite gerade an einem Projekt, bei dem es recht viel um Datenübertragung geht. Ich würde hier gerne ein struct für die Variablen der Schnittstelle benutzen. Zu der seriellen Schnittstelle soll noch eine I2C - Schnittstelle, zu einem zweiten Arduino Nano, hinzugefügt werden soll.
Problem:
In der 'while' Schleife werden zunächst die char sortiert und zu mehreren Strings zusammengeflickt, um diese in dem 'data_array' aus dem 'struct' speichern zu können. Der Teil funktioniert, denke ich auch schon ganz gut.
In dem Ausschnitt von dem SerialMonitor, sieht man was passiert, wenn ich "10,20,30,40," in die console eingebe.
Für den aktuellen Programmzyklus werden die Daten in das Array übergeben, aber schon in dem darauf volgendem Programmzyklus sind die Daten nicht mehr abrufbar.
Hier noch der code, welchen ich für die Fehlersuche zuletzt verwendet habe.
/*
Name: VD30_Master_Sketch.ino
Created: 5/29/2019 10:39:46 AM
Author:
Version: 3.0
*/
#include <SoftwareSerial.h>
#include <Wire.h>
#include <HX711.h>
#define PPM 2
struct data
{
char data_read;
String data_write;
String data_as_string_in;
String data_as_string_out;
int data_array[5] = {0,0,0,0,0};
};
int i = 0;
int servotime[8] = { 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200 };
int startintervall = 0;
unsigned long time = millis();
void setup() {
pinMode(PPM, OUTPUT);
digitalWrite(PPM, HIGH);
Serial.begin(115200);
Serial.println("------ Hello, im redy for rumble -------");
Serial.println("------- Baudrate Serial: 115200 --------");
Serial.println("");
Wire.begin();
}
void loop() {
//---------------------------------------------------------------- Serial Poert in ---
// --- read
data d_serial;
data d_wire;
i = 0;
d_serial.data_as_string_in = "";
while (Serial.available() > 0)
{
Serial.println("whil available");
d_serial.data_read = Serial.read();
if (d_serial.data_read == ',')
{
d_serial.data_as_string_in = "";
i += 1;
}
else
{
d_serial.data_as_string_in += d_serial.data_read;
d_serial.data_array[i] = d_serial.data_as_string_in.toInt();
Serial.print("d_serial.data_array["); Serial.print(i); Serial.print("] = "); Serial.println(d_serial.data_array[i]);
}
}
Serial.print("d_serial.data_array 0: "); Serial.println(d_serial.data_array[0]);
Serial.print("d_serial.data_array 1: "); Serial.println(d_serial.data_array[1]);
Serial.print("d_serial.data_array 2: "); Serial.println(d_serial.data_array[2]);
Serial.print("d_serial.data_array 3: "); Serial.println(d_serial.data_array[3]);
}
Ausgabe über den Seriallen Monitor:
d_serial.data_array 0: 0
d_serial.data_array 1: 0
d_serial.data_array 2: 0
d_serial.data_array 3: 0
d_serial.data_array 0: 0
d_serial.data_array 1: 0
d_serial.data_array 2: 0
d_serial.data_array 3: 0
whil available
d_serial.data_array[0] = 1
whil available
d_serial.data_array[0] = 10
whil available
whil available
d_serial.data_array[1] = 2
whil available
d_serial.data_array[1] = 20
whil available
whil available
d_serial.data_array[2] = 3
whil available
d_serial.data_array[2] = 30
whil available
whil available
d_serial.data_array[3] = 4
whil available
d_serial.data_array[3] = 40
d_serial.data_array 0: 10 <---So sollte es bleiben, da Serial.available <= 0
d_serial.data_array 1: 20 <---So sollte es bleiben, da Serial.available <= 0
d_serial.data_array 2: 30 <---So sollte es bleiben, da Serial.available <= 0
d_serial.data_array 3: 40 <---So sollte es bleiben, da Serial.available <= 0
d_serial.data_array 0: 0 <---Fehler: Wo sind die daten hin?
d_serial.data_array 1: 0 <---Fehler: Wo sind die daten hin?
d_serial.data_array 2: 0 <---Fehler: Wo sind die daten hin?
d_serial.data_array 3: 0 <---Fehler: Wo sind die daten hin?
d_serial.data_array 0: 0
d_serial.data_array 1: 0
d_serial.data_array 2: 0
d_serial.data_array 3: 0
d_serial.data_array 0: 0
d_serial.data_array 1: 0
d_serial.data_array 2: 0
d_serial.data_array 3: 0
d_serial.data_array 0: 0
d_serial.data_array 1: 0
d_serial.data_array 2: 0
d_serial.data_array 3: 0