Zeichen aus Schleifen anreihen

Hallo zusammen,
bin C Neuling und möchte die Zeichen aus mehreren Schleifen aneinander reihen, so dass eine Zeichenkette entsteht, welche ich mit einer anderen Zeichenkette vergleichen kann.

Aktuell werden die Zeichen aus “buf” nacheinander auf ein LCD ausgegeben. Die Zeichen repräsentieren ASCII Werte, der Vergleich sollte dann auch mit einem ASCII String erfolgen. Der Vergleichsstring wäre so z.B.: 123ABCDEFG (10 Zeichen)

Die Schleifen sehen wie folgt aus:

for(int i = 5; i < 8; i++)
{
    lcd.print((char)buf[i]); // liefert 3 Zeichen
}

for(int i = 1; i < 8; i++)
{
    lcd.print((char)buf[i]); // liefert 7 Zeichen
}

Ich würde nun zwei Variablen definieren:

unsigned char soll = 123ABCDEFG; // Soll- oder Vergelichswert
unsigned char ist; // Zeichenfolge aus den Schleifen

Mit PHP würde ich in die Schleife schreiben:

$ist = $ist.$buf*;*
Wie geht so etwas unter C, dass es auf dem Arduino läuft?
Vielen Dank, Frank

Wie geht so etwas unter C, dass es auf dem Arduino läuft?

C++, nicht C

void setup() 
{
  Serial.begin(9600);
  Serial.println("Start");

  
  char quelle[] = "123ABCDEFG"; 
  char ziel[100]; // gross genug waehlen

  char * zielZeiger = ziel;

  for(int i = 5; i < 8; i++)
  {
    *zielZeiger++ = quelle[i]; // liefert 3 Zeichen
  }

  for(int i = 1; i < 8; i++)
  {
    *zielZeiger++ = quelle[i]; // liefert 7 Zeichen
  } 
  
  *zielZeiger = 0;

  Serial.println(ziel);
}

void loop() {}

digidax:
Mit PHP würde ich in die Schleife schreiben:

Den Umstieg finde ich hart ::slight_smile:

Eine Zeichenkette muß als Feld gespeichert werden, außerdem benötigt man nicht selten Zeiger, die mit dem Sternchen (*zielZeiger).

Ich habe hier ein Programm veröffentlicht, mit dem Zeichen von der seriellen Schnittstelle in einen Puffer eingelesen und mit einer konstanten Zeichenkette verglichen werden. Den Vergleich liefert memcmp. Das "_P" gibt nur an, daß die Vergleichszeichenkette im Programmspeicher steht.

Ich hoffe, es hilft Dir :slight_smile:

Das Vergleichen von Zeichenketten geht übrigens nicht mit == oder =
Jedenfalls nicht in C. ( combie, bitte keinen Verwirr-Trick, wie es doch geht :wink: )

strcmp

( combie, bitte keinen Verwirr-Trick, wie es doch geht :wink: )

Es ist nie nicht mein Ziel, irgendjemanden zu verwirren.

Bedenke:
Die Verwirrung entsteht im Kopf des Betrachters.

Den Umstieg finde ich hart ::slight_smile:

Komme auch aus der PHP Ecke.

Oh sorry, dass ich es für C gehalten hab. Wurde ins kalte Wasser mit dem Arduino und C++ geschmissen, aber dank vieler netter Menschen hier im Forum macht mir C++ Spaß, die Umstellung ist aber wirklich hart. Man wird zum sauberen Programmieren gezwungen und viele Sachen wie die String Geschichte basiert auf binären Urschleim, so wie es aber wirklich ist. Umgedreht wäre es einfacher aber man kann nie genug lernen. Danke erst mal für Eure Hilfe.

Die Beispiele für anreihen des Strings aus den Schleifen heraus und das Vergleichen habe ich verstanden.

Eine Frage noch: ist memcmp() in den Standard Libs der Arduino IDE enthalten?
Falls nicht, wie finde ich heraus, welche Lib ich benötige?

lg Frank

ist memcmp() in den Standard Libs der Arduino IDE enthalten?

ja. Gibt aber auch strcmp, was für Texte (char Arrays mit 0 als EndeKennung) besser/einfacher ist.

Eine Frage noch: ist memcmp() in den Standard Libs der Arduino IDE enthalten?

Lesetipp

combie:
Lesetipp

Klasse Referenz. Danke.

Die richtige original-Doku ist oft besser als Tutorials und Lehrbücher.
Und besser als Forum-Geheimtipps.

Danke, combie. Schön, dass du immerhin Links weitergibst, auch wenn du dich (sinnvollerweise) weigerst, daraus vorzulesen :wink:

Och...
Mache ich doch gerne...

Wobei ..?

Oft genug gibts auch Haue für so einen Link.

"Arrogant", "von oben herab"
"du willst gar nicht helfen"
usw.

Aber hier haben wir einen digidax, der mit einem solchen Link drei mal mehr anfangen kann.
Fein!

Wie auch immer, manchmal hat man(ich) Glück mit einem solchen Testballon.

Ich weiß nicht mehr wer das war (und bin zu faul zum Suchen) aber einer hat das hier mal schön auf den Punkt gebracht:

Niveau sieht nur von sehr weit unten wie Arroganz aus.

Gruß Tommy

hüstel
-->Schön zu wissen, dass man einen bleibenden Eindruck hinterlässt :smiley:

Wirklich ein tolles Forum hier, so einen respektvollen Umgang hat man selten. Liegt wahrschenlich daran, dass man erst nachdenkt, bevor man schreibt. So spart man sich auch Ärger beim Programmieren, wie wenns einen dann der Compiler um die Ohren haut. Nur da macht es wenig Sinn, diesen verbal in die Knie zu zwingen. Der ist völlig emotionslos resistent gegen Beleidigungen. :slight_smile:

zu Topic Thema:

Es funktioniert wie gewollt: die per OBD ausgelesene VIN des Autos wird mit der hinterlegten verglichen und erst wenn diese übereinstimmen die Befehle auf dem CAN BUS gesendet.

Leider gibt es bei der von mir gewählten Hardwarekombination ein Problem Arduino Uno / Seeed CAN Shield mit dem MCP2515 (CAN BUS Controller) ein Problem. Der kann nur zwei Messages intern speichern und der Arduino holt nicht schnell genug ab.

Daher nun neuer Versuch mit einem Teensy. Der hat CAN on Chip. Mal sehen, wann das Teil eintrifft.

lg Frank

Da der Teensy immer mal, auch von mir, als schnellere Alternative angeboten wird, fände ich einen Erfahrungsbericht von Dir in diesem Forum hilfreich.

Stolpere nicht über die vielen Bits :slight_smile:

Wenn man 32 Bit drin hat stolpert doch jeder.

sorry musste sein

Gruß
DerDani

Teensy ist da, mußte einiges wegen der anderen Lib am Code anpassen, aber läuft. Der Geschwindigkeitszuwachs ist gigantisch, er hat ja einen CAN Controller on Board, nur noch ein externer Tranceiver nötig. Kann in Echtzeit die Daten in einem Intervall von 10 ms pollen, ohne dass etwas durcheinander kommt. Jetzt noch den Stringvergleich programmieren, dann bin ich glücklich. Danke für Eure Hilfe.