im Zuge eines Projekts nehme ich die Messdaten einer Wägezelle auf (ca. 500 Werte). Diese würde ich gerne über die Serielle Schnittstelle an einen Raspberry Pi versenden und von dort aus in einer extra Datei ablegen. Anstatt jeden Wert einzeln zu übertragen, würde ich gerne alle Daten in einem Array ablegen und versenden. Hat jemand Erfahrungen damit machen können? Ist sowas möglich?
Wenn ich das richtig verstehe, willst du die Messdaten auf dem Arduino sammeln, bis 500 erreicht sind und dann diese 500 Messwerte an den Pi schicken? Du könntest einfach ein Array anlegen:
// Was auch immer du für einen Datentyp für deine Messdaten brauchst
datatype_t measuredValues[500];
Und die Messdaten darin speichern. Das Array kannst du dann einfach mit
for(int i = 0; i < 500; i++)
{
Serial.println(measuredValues[i]);
}
irgendwo zwischen gehen lernen (TO) und fliegen (combie) findet sich vieleicht so etwas :
/*
Anstatt jeden Wert einzeln zu übertragen, würde ich gerne alle Daten in einem Array ablegen und versenden.
http://forum.arduino.cc/index.php?topic=603522.msg4096329#new
beigesteuert von noiasca
*/
int payload [] = {1, 2, 3, 5, 7, 11, 13}; // was wollen wir übertragen
const char *prefixMessage = "?"; // Am Anfang einer neuen Nachricht
const char *prefixValue = ""; // vor einem neuem Wert
const char *postfixValue = ";"; // nach einem neuem Wert
const char *postfixMessage = "\n"; // Am Ende der Nachricht
void transmitPayloadVariant0() // Einfache Übertragung
{
for (auto ¤t : payload) { // for each für arme
Serial.print(current);
}
}
void transmitPayloadVariant1() // Übertragung mit prefix/postfix
{
Serial.print(prefixMessage);
for (auto ¤t : payload) { // for each für arme
Serial.print(prefixValue);
Serial.print(current);
Serial.print(postfixValue);
}
Serial.print(postfixMessage);
}
void transmitPayload() // reduzierung des ersten prefix/letzten postfix
{
uint16_t toTransmit = sizeof(payload) / sizeof(payload[0]);
Serial.print(prefixMessage);
for (uint16_t current = 0; current<toTransmit; current++) {
if (!current) Serial.print(prefixValue); // first value gets no prefix
Serial.print(current);
if (current!=toTransmit-1) Serial.print(postfixValue); // last value gets no postfix
}
Serial.print(postfixMessage);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
transmitPayload();
delay(3000); // dirty delay
}
Bedenke:
ein array von 500 Werten braucht 500, 1000 oder 2000 Byte (je nach Variablentyp byte/char, int oder long/float .
Die wenigsten Arduinomodelle haben genug RAM um diese Datenmenge im Speicher zu halten.