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 | unsigned long zeitstempel; // Variable um den aktuellen Zeitwert zu speichern
|
5 | unsigned long displaychar;
|
6 | int wiederholung = 1000; // alle 1 sec ein char anzeigen
|
7 |
|
8 | char string[] = "Hallo-Arduino";
|
9 | char string1[] = "Beispieltext";
|
10 | char string2[] = "Zahlen-123456789";
|
11 |
|
12 | int stringlaenge=strlen(string);
|
13 | char* s=string; // Pointer zeigt auf erste char im string
|
14 |
|
15 | void setup(){
|
16 | Serial.begin(19200);
|
17 | Serial.print(" Stringlaenge ");
|
18 | Serial.println(stringlaenge);//
|
19 | Serial.println(" Programm stertet..... ");
|
20 | delay(1000);
|
21 | }
|
22 | //---------------------FUNKTION--------------------------------
|
23 | void Char_Anzeige_Update() {
|
24 | if (*s != 0)// solange die Nullterminierung am Ende vom string erreicht wird...
|
25 | {
|
26 | char chr=*s;
|
27 | Serial.print(" StringLaenge= ");Serial.println(stringlaenge);
|
28 | Serial.print(" Char durch Pointer *s, chr: ");Serial.print(chr);
|
29 | Serial.print(" : ");
|
30 | Serial.print(" Scrolltext string s: ");Serial.println(s);// Der ganze übrige string
|
31 | // im Fehlerfall zurück zum main loop
|
32 | if (chr < 32) { Serial.println(" char ist kein druckbarer code "); return; }
|
33 | stringlaenge--;
|
34 | s++;// Pointer auf nächste Char im String
|
35 | }
|
36 | if(stringlaenge==0)
|
37 | {
|
38 | Serial.println(" Stringlaenge wird neu ermittelt ");
|
39 | stringlaenge=strlen(string);
|
40 | s=string; // Pointer auf erste char im string
|
41 | }
|
42 | }
|
43 | //-------------------FUNKTION ENDE---------------------------
|
44 |
|
45 | void loop() { //--------------------Main Loop-----------------
|
46 | zeitstempel=millis();
|
47 | Serial.println(" ---------------neues Loop ----------- ");
|
48 | if ((zeitstempel - displaychar) >= wiederholung)
|
49 | {
|
50 | Char_Anzeige_Update();// Funktionsaufruf
|
51 | displaychar = zeitstempel;
|
52 | }
|
53 |
|
54 | // WEITERE PROGRAMMANWEISUNGEN
|
55 | Serial.println(" ---TUE ETWAS---- ");
|
56 | } //----------------------------Loop Ende----------------------------
|
Bitte verzeiht mir die viele Serial.prints, die sind drin um
den Programmablauf genau beobachten zu können...
Gruß, csaba.