MSBPackage Software Library für Multiplex Sensor Bus an Arduino Plattform

Gorbi

User
In der Zwischenzeit bin ich mit meinen C/C++ Kentnissen doch etwas weiter gekommen.
1675005963963.png


Lese zuerst alle MLINK Werte aus, um einen Header bilden zu können (erste Zeile des anschliessend zu schreibenden Inhalts der Log-Datei).
Anschliessend durchlaufe ich z.B. 10x eine Schleife, damit ich möglichst alle MSB Werte auf einmal erhalte und anschliessend schreibe ich diese Werte. Das funktioniert schon einmal recht gut. Mein Problem mit dem GPS ist nur, dass man über MLINK nicht die Koordinaten erhalten kann (zumindest nicht über die WSTEch / OpenXSensor) Varianten. Wäre aber schön, wenn man nach dem Flug die Flugroute via Google darstellen könnte.

Anbei noch mein aktueller Code:


#include <NewSoftSerial.h> //Spezial Library für die serielle Kommunikation
#include <MSBPackage.h> // Spezial Library für die Kommunikation mit dem Multiplex MSB Bus

MSBProcess myMSB(4); // Benutze Digital Pin 4 für die Verbindung zum Multiplex Empfänger Sensor Bus

String ArrayHeader[31] = {"Date", "Time", "MLINK0: ", "MLINK1: ", "MLINK2: ", "MLINK3: ", "MLINK4: ", "MLINK5: ", "MLINK6: ", "MLINK7: ", "MLINK8: ", "MLINK9: ", "MLINK10: ", "MLINK11: ", "MLINK12: ", "MLINK13: ", "MLINK14: ", "MLINK15: ", "Cell1: V", "Cell2: V", "Cell3: V", "Cell4: V", "Cell5: V", "Cell6: V", "Temp: C°", "accX", "accY", "accZ", "gyrX", "gyrY", "gyrZ"};
float ArrayValue[31] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
String ActualHeader;
int ArrayHeaderInit = 0; //Schlaufen-Wert für die Anzahl Durchläufe für die Generierung des Datei-Headers

MSBPackage P;
char Buffer[10]; //Einheit des jeweiligen MSB Sensors
float value; //Wert des jeweiligen MSB Sensors
boolean inLimit; //Ist die MSB Adresse im Limit oder nicht


void setup()
{
Serial.begin(57600); // Nicht vergessen die Serial Monitor auch auf diese Geschwindigkeit umzustellen.

while (ArrayHeaderInit < 30) {
myMSB.ReadPackage(P);
if (P.isValid()) {
if (P.getDisplayValue(Buffer,sizeof(Buffer),value,inLimit)) {

switch (P.getAddress()) {
case 0:
if (ArrayHeader[2] == "MLINK0: "){
ActualHeader = ArrayHeader[2];
ArrayHeader[2] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[2]);
}
break;
case 1:
if (ArrayHeader[3] == "MLINK1: "){
ActualHeader = ArrayHeader[3];
ArrayHeader[3] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[3]);
}
break;
case 2:
if (ArrayHeader[4] == "MLINK2: "){
ActualHeader = ArrayHeader[4];
ArrayHeader[4] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[4]);
}
break;
case 3:
if (ArrayHeader[5] == "MLINK3: "){
ActualHeader = ArrayHeader[5];
ArrayHeader[5] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[5]);
}
break;
case 4:
if (ArrayHeader[6] == "MLINK4: "){
ActualHeader = ArrayHeader[6];
ArrayHeader[6] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[6]);
}
break;
case 5:
if (ArrayHeader[7] == "MLINK5: "){
ActualHeader = ArrayHeader[7];
ArrayHeader[7] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[7]);
}
break;
case 6:
if (ArrayHeader[8] == "MLINK6: "){
ActualHeader = ArrayHeader[8];
ArrayHeader[8] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[8]);
}
break;
case 7:
if (ArrayHeader[9] == "MLINK7: "){
ActualHeader = ArrayHeader[9];
ArrayHeader[9] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[9]);
}
break;
case 8:
if (ArrayHeader[10] == "MLINK8: "){
ActualHeader = ArrayHeader[10];
ArrayHeader[10] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[10]);
}
break;
case 9:
if (ArrayHeader[11] == "MLINK9: "){
ActualHeader = ArrayHeader[11];
ArrayHeader[11] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[11]);
}
break;
case 10:
if (ArrayHeader[12] == "MLINK10: "){
ActualHeader = ArrayHeader[12];
ArrayHeader[12] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[12]);
}
break;
case 11:
if (ArrayHeader[13] == "MLINK11: "){
ActualHeader = ArrayHeader[13];
ArrayHeader[13] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[13]);
}
break;
case 12:
if (ArrayHeader[14] == "MLINK12: "){
ActualHeader = ArrayHeader[14];
ArrayHeader[14] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[14]);
}
break;
case 13:
if (ArrayHeader[15] == "MLINK13: "){
ActualHeader = ArrayHeader[15];
ArrayHeader[15] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[15]);
}
break;
case 14:
if (ArrayHeader[16] == "MLINK14: "){
ActualHeader = ArrayHeader[16];
ArrayHeader[16] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[16]);
}
break;
case 15:
if (ArrayHeader[17] == "MLINK15: "){
ActualHeader = ArrayHeader[17];
ArrayHeader[17] = ActualHeader + String(Buffer);
Serial.println(ArrayHeader[17]);
}
break;
}

}
}
ArrayHeaderInit = ArrayHeaderInit + 1;
Serial.println(ArrayHeaderInit);
}

Serial.println("Header");
Serial.print(ArrayHeader[0]);
Serial.print(";");
Serial.print(ArrayHeader[1]);
Serial.print(";");
Serial.print(ArrayHeader[2]);
Serial.print(";");
Serial.print(ArrayHeader[3]);
Serial.print(";");
Serial.print(ArrayHeader[4]);
Serial.print(";");
Serial.print(ArrayHeader[5]);
Serial.print(";");
Serial.print(ArrayHeader[6]);
Serial.print(";");
Serial.print(ArrayHeader[7]);
Serial.print(";");
Serial.print(ArrayHeader[8]);
Serial.print(";");
Serial.print(ArrayHeader[9]);
Serial.print(";");
Serial.print(ArrayHeader[10]);
Serial.print(";");
Serial.print(ArrayHeader[11]);
Serial.print(";");
Serial.print(ArrayHeader[12]);
Serial.print(";");
Serial.print(ArrayHeader[13]);
Serial.print(";");
Serial.print(ArrayHeader[14]);
Serial.print(";");
Serial.print(ArrayHeader[15]);
Serial.print(";");
Serial.print(ArrayHeader[16]);
Serial.print(";");
Serial.print(ArrayHeader[17]);
Serial.println(";");
}


void monitor()
{

int ArrayValueCollect = 0;
long int t1 = millis();



while (ArrayValueCollect < 12) {
myMSB.ReadPackage(P);


if (P.isValid()) {
// Nun mit der GetDisplayValue Methode die Werte für die Ausgabe aufbereiten und ausgeben
if (P.getDisplayValue(Buffer,sizeof(Buffer),value,inLimit)) {
switch (P.getAddress()) {
case 0:
if (ArrayValue[2] == 0){
ArrayValue[2] = value;
//Serial.println(ArrayValue[2]);
}
break;
case 1:
if (ArrayValue[3] == 0){
ArrayValue[3] = value;
//Serial.println(ArrayValue[3]);
}
break;
case 2:
if (ArrayValue[4] == 0){
ArrayValue[4] = value;
//Serial.println(ArrayValue[4]);
}
break;
case 3:
if (ArrayValue[5] == 0){
ArrayValue[5] = value;
//Serial.println(ArrayValue[5]);
}
break;
case 4:
if (ArrayValue[6] == 0){
ArrayValue[6] = value;
//Serial.println(ArrayValue[6]);
}
break;
case 5:
if (ArrayValue[7] == 0){
ArrayValue[7] = value;
//Serial.println(ArrayValue[7]);
}
break;
case 6:
if (ArrayValue[8] == 0){
ArrayValue[8] = value;
//Serial.println(ArrayValue[8]);
}
break;
case 7:
if (ArrayValue[9] == 0){
ArrayValue[9] = value;
//Serial.println(ArrayValue[9]);
}
break;
case 8:
if (ArrayValue[10] == 0){
ArrayValue[10] = value;
//Serial.println(ArrayValue[10]);
}
break;
case 9:
if (ArrayValue[11] == 0){
ArrayValue[11] = value;
//Serial.println(ArrayValue[11]);
}
break;
case 10:
if (ArrayValue[12] == 0){
ArrayValue[12] = value;
//Serial.println(ArrayValue[12]);
}
break;
case 11:
if (ArrayValue[13] == 0){
ArrayValue[13] = value;
//Serial.println(ArrayValue[13]);
}
break;
case 12:
if (ArrayValue[14] == 0){
ArrayValue[14] = value;
//Serial.println(ArrayValue[14]);
}
break;
case 13:
if (ArrayValue[15] == 0){
ArrayValue[15] = value;
//Serial.println(ArrayValue[15]);
}
break;
case 14:
if (ArrayValue[16] == 0){
ArrayValue[16] = value;
//Serial.println(ArrayValue[16]);
}
break;
case 15:
if (ArrayValue[17] == 0){
ArrayValue[17] = value;
//Serial.println(ArrayValue[17]);
}
break;
}


}


}


ArrayValueCollect = ArrayValueCollect + 1;

//Serial.println(ArrayValueCollect);
}
long int t2 = millis();
ArrayValue[1] = t2-t1;

Serial.print(ArrayValue[0]);
ArrayValue[0] = 0;
Serial.print(";");
Serial.print(ArrayValue[1]);
ArrayValue[1] = 0;
Serial.print(";");
Serial.print(ArrayValue[2]);
ArrayValue[2] = 0;
Serial.print(";");
Serial.print(ArrayValue[3]);
ArrayValue[3] = 0;
Serial.print(";");
Serial.print(ArrayValue[4]);
ArrayValue[4] = 0;
Serial.print(";");
Serial.print(ArrayValue[5]);
ArrayValue[5] = 0;
Serial.print(";");
Serial.print(ArrayValue[6]);
ArrayValue[6] = 0;
Serial.print(";");
Serial.print(ArrayValue[7]);
ArrayValue[7] = 0;
Serial.print(";");
Serial.print(ArrayValue[8]);
ArrayValue[8] = 0;
Serial.print(";");
Serial.print(ArrayValue[9]);
ArrayValue[9] = 0;
Serial.print(";");
Serial.print(ArrayValue[10]);
ArrayValue[10] = 0;
Serial.print(";");
Serial.print(ArrayValue[11]);
ArrayValue[11] = 0;
Serial.print(";");
Serial.print(ArrayValue[12]);
ArrayValue[12] = 0;
Serial.print(";");
Serial.print(ArrayValue[13]);
ArrayValue[13] = 0;
Serial.print(";");
Serial.print(ArrayValue[14]);
ArrayValue[14] = 0;
Serial.print(";");
Serial.print(ArrayValue[15]);
ArrayValue[15] = 0;
Serial.print(";");
Serial.print(ArrayValue[16]);
ArrayValue[16] = 0;
Serial.print(";");
Serial.print(ArrayValue[17]);
ArrayValue[17] = 0;
Serial.println(";");


}

void loop()
{
monitor();

}
 
Bitte benutze Code Tags wenn Du Programmcode im Forum postest, da bleibt die Formatierung erhalten.
Beschäftigte Dich mit dem Prinzip der for Schleife, anstatt 17 mal das gleiche zu schreiben. Anstatt case kannst Du den Wert von getAddress direkt als index für Dein Array verwenden, dann wird der Code sehr viel kürzer und Du kannst ihn leichter ändern.
 
Ansicht hell / dunkel umschalten
Oben Unten