Hallo Ich möchte über eine tastenkombination meine Laufzeit für ein Blinklicht bestimmen, bloß weise ich meiner variable "laufzeit" die _delay_ms(xy) zu und dies geht leider nicht weil sie ja keine Rückgabewerte liefern hat jmd eine lösung?: #include <avr/io.h> #include <util/delay.h> int main(void) { int laufzeit; //variable für die Veränderung der Laufzeit DDRD=0xFF; PORTD= 0xFF; //Alle LEDS ausschalten PORTC=0x0F; //Aktivierung der Pull-up Widerstände switch(PINC) { case 0xFF: laufzeit= _delay_ms(50); break; case 0xFB: laufzeit= _delay_ms(100); break; case 0xF7: laufzeit= _delay_ms(200); break; case 0xF3: laufzeit= _delay_ms(500); break; default: PORTD= 0x00; } while(1) { laufzeit; PORTD=0x00; laufzeit; PORTD=0xFF; } }
> Ich möchte über eine tastenkombination meine Laufzeit für ein > Blinklicht bestimmen was willst du?
Du gibst hier der Variable Laufzeit nur den Rückgabewert einer Funktion. Und _delay_ms ist void also hat keinen Rückgabewert (http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html) Das müsste eher unabhängig von allem anderen so aussehen:
1 | case 0xFF: laufzeit= 50 |
2 | break; |
3 | ....
|
und
1 | hile(1) |
2 | {
|
3 | _delay_ms(laufzeit); |
4 | PORTD=0x00; |
5 | _delay_ms(laufzeit); |
6 | PORTD=0xFF; |
7 | |
8 | }
|
z.B drücke ich die taster an meinem Port PC0 und PC1 gleichzeitig dann soll meine LED in einem takt von 500ms blinken drücke ich nur PC0 soll sie mit 200ms blinken
Azubi schrieb: > laufzeit; warning: useless statement. Ich glaub du brauchst ein C-Buch. Ok, Tipp:
1 | void mydelayms(int delay) |
2 | {
|
3 | while(delay--) |
4 | _delay_ms(1); |
5 | }
|
6 | //...
|
7 | int laufzeit=725; |
8 | //...
|
9 | mydelayms(laufzeit); |
Nein, delay_ms direkt mit Variable aufrufen geht nicht, Standardfehler, siehe libc-Doku oder FOrensuche.
Phil J. schrieb: >http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html > _delay_ms(laufzeit); Zwar verlinkt aber selber nicht gelesen? >In order for these functions to work as intended, compiler optimizations >must be enabled, and the delay time must be an expression that is a known >constant at compile-time. >saugeil Nein, falsch. Ich warte schon auf den nächsten Thread "delay geht nicht" :-(
Phil J. schrieb: > Und _delay_ms ist void also hat keinen Rückgabewert > (http://www.nongnu.org/avr-libc/user-manual/group__...) Bitte lese den Inhalt unter dem von Dir geposteten Link auch. Dann wüsstest Du, dass das hier: > _delay_ms(laufzeit); nicht gemacht werden darf.
Asche auf mein Haupt. Aber eine passende Lösung wurde ja schon gepostet.
Und bald kommt die nächste Frage mit " Wieso werden die Taster nicht erkannt wenn gerade eine LED an ist ? "
Ralph schrieb: > " Wieso werden die Taster nicht erkannt wenn gerade eine LED an ist ? " Na dann gebe ich mal das Stichwort: "Timerinterrupt"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.