Arduino String Split

Fra HTX Arduino
Spring til navigation Spring til søgning

Når man arbejder med Arduino, så kan det være rart at kunne splitte strenge op i flere dele ved at skille dem ad med et skilletegn.

Det kan være at man ønsker at indlæse en X- og en Y-værdi fra Serial Monitor, men ikke vil indtaste to strenge, med alle de muligheder for fejl der er der. Det kan så gøre ved at man taster strengen 123;654, hvor 123 er X-værdien og 654 er Y-værdien.

Kodeeksempel der tester String Split

Hele kodeeksemplet kan hentes i denne ZIP-fil.

Koden der tester funktionen er lavet som følger:

String stringOne;

String result[10];

void loop() {
  if (Serial.available()) {
    stringOne = Serial.readStringUntil('\n');
    stringOne.trim();
    int antal = strSplit(result, stringOne, ':');
    Serial.println("Splitting with :");
    for (int i = 0; i < antal; i++) {
      Serial.println(result[i]);
    }
    antal = strSplit(result, stringOne, '-');
    Serial.println("Splitting with -");
    for (int i = 0; i < antal; i++) {
      Serial.println(result[i]);
    }
  }
}

Koden leder først efter input fra Seriel-porten, og når det kommer, så læses en hel linje ind i stringOne.

Når man har linjen, så testes den på to forskellige karakterer. Først splittes strengen op ved karakteren ':', hvor resultatet gemmes i et array af String (maksimalt 10 dele), hvorefter hver del printes ud.

På den samme streng laves derefter samme analyse med strSplit ved karakteren '-', og resultatet printes ud.

Funktionen strSplit()

Funktionen er lidt speciel, da den ikke returnerer de opsplittede strenge direkte - den returnerer i stedet det antal strenge der blev resultatet af spilt-operationen.

Resultatet af split-operationen bliver lagret i den første parameter, der skal være et String-array, som kan indeholde det maksimale antal strenge der ønskes returneret.

Selve funktionen ser ud som følger:

int strSplit(String * res, String txt, char splitChar) {
  int pos;
  int i = 0;
  while (txt.indexOf(splitChar) > 0) {
    pos = txt.indexOf(splitChar);
    res[i] = txt.substring(0, pos);
    i++;
    txt = txt.substring(pos + 1);
  }
  res[i] = txt;
  i++;
  return i;
}

Funktionen skal have 3 parametre:

  1. Det array der skal lagre resultatet af split-processen
  2. Den streng txt, der skal splittes op
  3. Den karakter der skal splittes ud fra

Funktionen bliver ved med at splitte strenge op, så længe splitkarakteren er til stede i den resterende del af strengen.

Hver gang trækkes der den første del af resten ud, indtil der ikke er flere split-karakterer.

Den sidste del lægges også i resultatet, så selv en streng uden split-karakterer vil returnere en streng.

Til slut returneres det antal strenge der blev fundet.

Programmering
Programmeringsbegreber Initialisering - Sekvens - Algoritme - Hexadecimal - Det Binære Talsystem - HEX-fil - ASCII - Interrupt - Events - Styresystem - Autocomplete - Selvstudie Programmering - Hour Of Code - Stepwise Improvement - Syntaks - Prog-links - Microcontroller
Grundlæggende C C float - C double - C-løkker - Datatyper - Konstanter - Regnearter - Funktioner - Return - Returværdi - Rekursion - Semikolon
Variabel Typer boolean - byte - int - unsigned int - word - long - unsigned long - short - float - double - char - unsigned char - string - char array - String - object - Array - 2-dimensionelt Array - void
Program-klassikere Polling - State-machine - Trykknap - Forkant - Bagkant - Prel
Arduino Arduino til Programmering - C til Arduino - Programmering Shield - Arduino PC-software - Arduino Udviklingsmiljø - Arduino Pin Library - Funktion - Arduino Seriel - Arduino String - Arduino String Split - Arduino StateChangeDetection - setup() - loop() - Compilerdirektiver - Asynkron kommunikation - millis() - micros() - Scratch for Arduino - Send fra Arduino til Excel - [[]] - [[]]
Processing Grafik i Processing‎ - Keyboard i Processing - Mus i Processing‎ - Tid i Processing‎ - Draw() - Setup() - Tal Input til Processing - Syntaksfarvning - Kommunikation fra Arduino til Processing - Kommunikation fra Processing til Arduino
javaScript Javascript input‎ - Javascript output‎ - Javascript strukturer‎ - Javascript syntaks‎ - Tid i javaScript - Objekt‎ - AJAX
Serverprogrammering PHP - MySQL - Task Scheduler - WeMOS
PIC JAL - [[]]
Scratch for Arduino S4A Installation - S4A programmering - S4A undervisningsforløb - S4A begrænsninger
Program Dokumentation Algoritme - Flowchart - Pseudokode - Datastruktur - Dataabstraktion - Pulsplaner - Program-kommentar - Teori - Test - UML