Hallo! Ich hab da mal eine Frage und zwar weiß ich nicht wie ich eine Start-Stopp-Funktion für das Knightrider Lauflicht in C programmieren soll. Kann mir da jemand helfen? Also ich habe das TI Launchpad F28027 mit 4 LEDs, ich hab das Lauflicht über eine for-Schleife programmiert. [while(1) { for (counter = 0; counter < 7; counter++) { if (counter == 0) { GpioDataRegs.GPACLEAR.all = 0x8; // turns LED4(GPIO3) on } if (counter == 1) { GpioDataRegs.GPASET.bit.GPIO3 = 1; // turns LED1 off GpioDataRegs.GPACLEAR.all = 0x4; // turns LED3(GPIO2) on } if (counter == 2) { GpioDataRegs.GPASET.bit.GPIO2 = 1; // turns LED2 off GpioDataRegs.GPACLEAR.all = 0x2; // turns LED2(GPIO2) on } if (counter == 3) { GpioDataRegs.GPASET.bit.GPIO1 = 1; // turns LED3 off GpioDataRegs.GPACLEAR.all = 0x1; // turns LED1(GPIO0) on } if (counter == 4) { GpioDataRegs.GPASET.bit.GPIO0 = 1; // turns LED1 off GpioDataRegs.GPACLEAR.all = 0x2; // turns LED2(GPIO1) on } if (counter == 5) { GpioDataRegs.GPASET.bit.GPIO1 = 1; // turns LED1(GPIO0) off GpioDataRegs.GPACLEAR.all = 0x4; // turns LED1(GPIO0) on } if (counter == 6) { GpioDataRegs.GPASET.bit.GPIO2 = 1; // turns LED1(GPIO0) off GpioDataRegs.GPACLEAR.all = 0x8; // turns LED1(GPIO0) on } for(i = 0; i < 1000000; i++) { EALLOW; SysCtrlRegs.WDKEY = 0x55; SysCtrlRegs.WDKEY = 0xAA; EDIS; } } }] Danke schon mal im Voraus. LG. Mario
Gast
#4565481
- Nutze eine bool Variable "laufend" und nutze die anstatt des true in der while. - Packe dann den ganzen Code in eine Funktion und rufe diese mit einer Endlosschleife auf. Da verschenkst du natürlich Rechenzeit, aber darum geht es dir wohl eh nicht momentan? Mit laufend kannst du dann regulieren ob es laufen soll oder nicht. z.B. via Vergleich eines Inputpins (Dann brauchst du nur nen Schalter der dauerhaft eine Spannung anlegt) oder via Interrupt (Taster statt Schalter)
Gast
#4565582
Nein auf die Rechenzeit kommt es nicht drauf an. Danke für Deine Hilfe!
Gast
#4565598
Mario F. schrieb: > ich hab das Lauflicht über eine for-Schleife programmiert. Findest du nicht, dass dein Programm ungefähr 10 x so lang wie nötig ist und damit wartungs- und änderungsunfreundlich ? Ja, einen PortPin Zustand sollte man schon einlesen. Ist da ein Schalter dran, kann er direkt das Lauflicht stoppen.
Gast
#4565708
Hallo MaWin! Ja klar ist das Programm bissl lang, aber es funktioniert. Bin ja auch noch Anfänger. Ja da ist ein Schalter dran am Port GPIO12. Danke für den Tipp! LG. Mario
Mario F. schrieb: > Kann mir da jemand helfen? Lege eine IF-Abfrage auf Schalterzustand gleich nach 'while(1)'
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Gast
#4565863
Hallo Marc Vesely! Danke für den Tipp. Das ist echt sehr nett und hilft mir sehr. LG. Mario
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
Gast
#4565947
Hallo Falk! Danke für den Tipp! Aber irgendwie funktioniert das nicht. LG. Mario
Es ist unvollständig, die Initialisierung fehlt!
Hier ein komplettes CCS5 Projekt. Kleiner Tip für Anfänger. ACHTUNG!!! Die Projekte vom CCS initialisieren statische und globale Variablen ohne explizite Initialisierung NICHT mit 0, wie es der Rest der Compiler dieser Welt tut!!! Wenn man das will, muss man das per ASM-Schnipsel selber machen! Den hab ich aber im Moment nicht hier. Also Workaround muss man ALLE statischen und globalen Variablen EXPLIZIT initialisieren. Also überall bei der Definition einen Initialwert zuweisen!
Gast
#4567678
Hallo Falk! Da wären wir gleich bei der nächsten Frage. Wie kann ich CCS-Projekte direkt öffnen? Also wir müssen im Praktikum immer ein neues Projekt erstellen und danach das Projekt vom vorhergehenden Mal, welches in eine Zip-Datei gesichert wurde wieder importieren. LG. Mario P.S.: Trotzdem erstmal vielen Dank für das Programm!
@Mario F. (Gast) >Wie kann ich CCS-Projekte direkt öffnen? Man muss sie in den Workspace importieren. Menu Project -> Import existing CCS project >Also wir müssen im Praktikum immer ein neues Projekt erstellen Das muss man nicht. >und >danach das Projekt vom vorhergehenden Mal, welches in eine Zip-Datei >gesichert wurde wieder importieren. Das muss man.
Gast
#4568793
Hallo Falk! Danke erstmal. Ja okay verstehe, aber was mach ich wenn ich keine Zip-Datei habe? Also kann man das Projekt auch so irgendwie öffnen? LG. Mario
@ Mario F. (Gast) >Ja okay verstehe, aber was mach ich wenn ich keine Zip-Datei habe? Das ZIP ist doch nur zum Packen und Zusammenfassen der Daten. Man kann das Projektverzeichnis auch normal kopieren und importieren. >Also kann man das Projekt auch so irgendwie öffnen? Ja, mittels Import in den Workspace.
Gast
#4568853
Hallo Falk! Okay, danke schön! LG. Mario
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.