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
digidax:
Mit PHP würde ich in die Schleife schreiben:
Den Umstieg finde ich hart :
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.
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?
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.
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.
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.