Hallo!
Ich hoffe, bin hier in richtigem Forum mit meinem Problem.
Bin dabei die Programmierung vom Arduino zu erlernen und bei der
Aufgabe,woran ich gerade dran bin, stösse ich auf eine
Schwierigkeit, die ich nicht weiß, wie ich sie lösen soll.
Der Code-Ausschnitt soll 3 verschiedene Texte an dem seriellen Monitor
Buchstabenweise ausgeben. Welcher Text zum Anzeigen kommt, werde ich
später mit switch-case auswählen. Wichtig ist, daß der main-Loop
zyklisch
weitere Anweisungen ausführt, während gerade ein ausgewählter Text
Buchstabenweise angezeigt wird. (jede sec 1Buchstabe)
Die Grundaufgabe, wie ich das mit einem Text (string) mache, konnte
ich lösen. Dazu habe ich die Anzeige in ein Funktion gepackt, bisher
ohne "Wertübergabe". Somit kann ich den string anzeigen,während
dessen im main-Loop andere Aufgaben "gleichzeitig" ablaufen.
Ich möchte also sowas wie eine Art Multitasking machen.
Nun, mein Problem ist, daß ich nicht weiß, wie ich an diese Funktion
die verschiedene Texte( string1, string2 usw) einzeln nacheinander
übergebe?
Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte!
Aus meinen Büchern über C,C++ werde ich einfach nicht schlau genug,
irgendwie habe ich gerade ein Logig-kurzschluss ;-((
hier ist die funktionierende Funktion mit einem Text;
1
// Funktion für Char Ausgabe aus einem string
2
// Testprogramm 2015 ohne DELAY
3
//
4
unsignedlongzeitstempel;// Variable um den aktuellen Zeitwert zu speichern
5
unsignedlongdisplaychar;
6
intwiederholung=1000;// alle 1 sec ein char anzeigen
7
8
charstring[]="Hallo-Arduino";
9
charstring1[]="Beispieltext";
10
charstring2[]="Zahlen-123456789";
11
12
intstringlaenge=strlen(string);
13
char*s=string;// Pointer zeigt auf erste char im string
@Irgendwer
...der Vorschlag von Dir funktioniert an sich, danke! So weit war ich
aber
schon. In der Funktion darf keine schleife vorkommen, weil dann
der kompletter Text auf einem Rutsch ausgegeben wird!
Die Funktion soll den string übernehmen und dann char-weise
alle Sekunde eine Buchstabe ausgeben!
Ich habe es verstanden wie man ein string an eine Funktion übergibt.
(Dein Beispiel zeigt es schön genau das).
Wie kann ich aber der Funktion sagen, dass sie den string
übernimmt, und dann den Text Buchstabenweise abarbeitet, während dessen
aber diese gleiche Funktion über main-Loop viele male aufgerufen wird,
und den string aber solange nicht von neuem übernehmen darf, solange
der erste Text ausgegeben wird.....
????ich hoffe, ich drücke mich verständlich aus (ssschwitz))sorry:-)
DANKE!
Erstens, die Variable stringlaenge brauchst du nicht.
Zweitens, zu deinem Problem:
Setzte einen 2. Pointer auf (nennen wir den derText), der auf den
erwünschten string zeigt. Wenn dann s am String-ende angekommen ist,
weisst du s den Wert von derText zu, statt den fixen Wert string.
In deiner Mainloop kannst du dann den Wert von derText beliebig
ändern. Also etwa so:
Ohhh, Danke!
Bis heute Abend ziehe ichs mir rein :-))
.....erstmal vielen Dank!
ich sehe es.... mein nächstes Weichnachtsgeschenk ist ein neues c-Buch!
Gruß!!!
Ich möchte noch meine gelöste Frage posten.
@beric, vielen Dank für Deine Anregung und Lösung!!!
Dein Codeschnipselchen mit der TASK Funktion ist interresant und
animiert mich dazu, c++ intensiv weiter zu lernen.
Im Moment kann ich ihn nicht verwenden,weil das ein großer Sprung
in meinem Selbststudium wäre( muss Schritt für Schritt vorankommen).
Ich habe aber deinen ersten Vorschlag gut nutzen können, allerdings
konnte ich es nicht mit 2 Pointers umsetzen, da mir als Anfänger
diese Pointer-Arbeit noch etwas schwierig zu Verstehen ist :-((
Immerhin verstehe ich nach dieser Übung, wie ein String der Funktion
übergeben wird; immer mit einem Zeiger auf dem ersten char im String.
Aus der c++ Literatur lerne ich gerade, dass man statt Pointer auch
ein Feldindex nehmen kann, um auf ein char im String zu zeigen.
Mein funktionierender Code sieht jetzt so aus;
1
// Funktion für Char Ausgabe aus mehreren strings
2
// Testprogramm 2015 ohne DELAY
3
//
4
unsignedlongzeitstempel;// Variable um den aktuellen Zeitwert zu speichern
5
unsignedlongdisplaychar;
6
intwiederholung=1000;// alle 1 sec ein char anzeigen
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.