Hallo, programmieren in der Schule gerade ein Lauflicht, nun kennen wir uns damit nicht wirklich aus xD... das ist unser Quellcode: #include<avr/io.h> #include<util/delay.h> main(viod) { int takt, takt2, takt3; DDRC = 0x00; DDRB = 0xFF; takt = 5000; takt2 = 2500; takt3 = 50; while (1) { _delay_ms(takt); PORTB =0x1F; _delay_ms(takt); PORTC = 0xF4; _delay_ms(takt); PORTC = 0x1F; _delay_ms(takt); PORTC = 0xF1; _delay_ms(takt); //Taste S5 if (!(PIND & (0<<PD6)) ) { PORTB = 0xFF; _delay_ms(takt); PORTB = 0xFE; _delay_ms(takt); PORTB = 0xFD; _delay_ms(takt); PORTB = 0xFB; _delay_ms(takt); PORTB = 0xF7; _delay_ms(takt); PORTB = 0xEF; _delay_ms(takt); PORTB = 0xDF; _delay_ms(takt); PORTB = 0xBF; _delay_ms(takt); PORTB = 0xEF; _delay_ms(takt); PORTB = 0xF7; _delay_ms(takt); PORTB = 0xFB; _delay_ms(takt); PORTB = 0xFD; _delay_ms(takt); PORTB = 0xFE; _delay_ms(takt); PORTB = 0xFF; _delay_ms(takt); } //Taste S6 if (!(PIND & (1<<PD7)) ) { PORTB = 0xFF; _delay_ms(takt2); PORTB = 0xFE; _delay_ms(takt2); PORTB = 0xFD; _delay_ms(takt2); PORTB = 0xFB; _delay_ms(takt2); PORTB = 0xF7; _delay_ms(takt2); PORTB = 0xEF; _delay_ms(takt2); PORTB = 0xDF; _delay_ms(takt2); PORTB = 0xBF; _delay_ms(takt2); PORTB = 0xEF; _delay_ms(takt2); PORTB = 0xF7; _delay_ms(takt2); PORTB = 0xFB; _delay_ms(takt2); PORTB = 0xFD; _delay_ms(takt2); PORTB = 0xFE; _delay_ms(takt2); PORTB = 0xFF; _delay_ms(takt2); } //Taste S2 if (!(PIND & (1<<PD3)) ) { PORTB = 0xFF; _delay_ms(takt); PORTB = 0xEF; _delay_ms(takt); PORTB = 0xF7; _delay_ms(takt); PORTB = 0xFB; _delay_ms(takt); PORTB = 0xFD; _delay_ms(takt); PORTB = 0xFE; _delay_ms(takt); PORTB = 0xFE; _delay_ms(takt); PORTB = 0xFD; _delay_ms(takt); PORTB = 0xFB; _delay_ms(takt); PORTB = 0xF7; _delay_ms(takt); PORTB = 0xEF; _delay_ms(takt); } } return 0; } Nun fragen wir uns wie wir das machen können, dass wenn wir den Knopf PD4 drücken das Licht was gerade durchläuft angehalten werden kann. Danke im vorraus.
Das wird so sowieso nicht richtig fnktionieren. Die _delay_XX-Funktionen funktionieren nämlich nur dann richtig, wenn ihnen konstante, zur Compile-Zeit bekannte Parameter übergeben werden. Wenn das nicht zutrifft, wird erstens die float-lib ins Programm eingebunden, damit die Werte zur Laufzeit berechnet werden können, und außerdem funktioniert das Timing nicht mehr. Variable delays macht man, wenn überhaupt, indem man ein _delay_XX mit fester länge in einer Schleife wiederholt aufruft. Außerdem sorgen die delays dafür, dass sich das ganze nicht ohne weiteres und ohne softwaretechnische Verrenkungen anhalten lässt. Für so etwas nimmt man einen Timer, den kann man jederzeit einfach anhalten! Abgesehen davon hast Du die Forenregeln, die Du beim Absenden bestätigen musstest, nicht beachtet! Es ist bei Anfragen im Betreff oder zumindest irgendwo im Text zu erwähnen, um welchen Controller es sich handelt! Da Du hier schreibst, gehe ich davon aus, dass Du auch des Lesens mächtig bist. Und für C-Code gibt es hier im Forum Formatierungsmöglichkeiten, die das ganze besser lesbar machen!
>Abgesehen davon hast Du die Forenregeln, die Du beim Absenden >bestätigen musstest, nicht beachtet! Es ist bei Anfragen im Betreff oder >zumindest irgendwo im Text zu erwähnen, um welchen Controller es sich >handelt! Da Du hier schreibst, gehe ich davon aus, dass Du auch des >Lesens mächtig bist. Und für C-Code gibt es hier im Forum >Formatierungsmöglichkeiten, die das ganze besser lesbar machen! Nu reg dich mal nicht so auf! Das ist für Leute in deinem Aletr gar nicht gut ;) >programmieren in der Schule gerade ein Lauflicht, nun kennen wir uns >damit nicht wirklich aus xD... Wird inzwischen in der Schule gelehrt, dass Sätze kein Subjekt mehr haben müssen? Habt Ihr schon mal etwas von Schleifen und Felder gelernt? Die Kombination aus diesem beiden würde dein Programm wesentlich verkürzen und dei gewünschte Funktionalität problemlos ermöglichen.
STK500-Besitzer wrote: > Nu reg dich mal nicht so auf! Das ist für Leute in deinem Aletr gar > nicht gut ;) Ich rege mich nicht auf. Wenn ich mich aufrege, sieht das anders aus! Außerdem: Woher willst Du wissen, wie alt ich bin? > Wird inzwischen in der Schule gelehrt, dass Sätze kein Subjekt mehr > haben müssen? Ach, aber anderen vorwerfen, sie regen sich auf. Hmmm...
>Habt Ihr schon mal etwas von Schleifen und Felder gelernt?
Aber erst den Oberlehrer machen.
Übrigens immer wieder gern gelesen: AVR-GCC-Tutorial... Finde es allerdings ein bisschen seltsam, dass die Betreuer solcher Schulversuche es nicht hinbekommen, ihren Schützlingen die Materie auf anschauliche Art nahezubringen. Und das mit den delays oben stimmt mich da ein bisschen nachdenklich...
> Und das mit den delays oben stimmt mich da ein bisschen nachdenklich... Ja, wenn das alles ist... :-/ Ich würde sowas sofort zur Erklärung einer for-Schleife hernehmen, wenn ich Lehrer wäre. > dass wenn wir den Knopf PD4 > drücken das Licht was gerade durchläuft angehalten werden kann. Also, so wie das Programm bisher aussieht, kann ein bisschen mehr Murks auch nicht schaden. Ich würde die Abfrage von PD4 in die _delay_ms() Routine einbauen, die wird ja dauernd aufgerufen. :-o
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.