Hallo Programmierer! Ich muss für die Schule 2 Programme schreiben bis morgen, die nachfolgende Aufgabenstellung haben. Leider habe ich keine Ahnung wie man das umsetzen könnte, wäre toll wenn mir wer da weiter helfen könnte mit kleinen Beschreibungen neben den einzelnen Schritten! 1. Aufgabe Grundaufgabe – Programmierbares Lauflicht: Am Port A sollen beliebig einstellbare Bitmuster – mit einer Bitbreite von 7 Bit – nacheinander ablaufen. Dazu gibt es einen Konfigurations-Modus, in dem die anzuzeigenden Lauflichter eingestellt werden. Die Anzahl der Muster ist mit 5 begrenzt. Dann wird in den Ablaufmodus gewechselt, die eingestellten Muster werden nacheinander angezeigt. • Ein Muster wird am Port B händisch angestellt • Durch das Bit 2 am Port D (kurz PD_2) wird das Speichern des Musters ausgelöst. Durch die Abfolge PD_2 = 1 → PD_2 = 0 (fallende Flanke) wird das Muster abgespeichert. • Hat das Bit PD_3 den Wert 1 (Taster nicht gedrückt) werden die bis dahin gespeicherten Muster am Port A nacheinander angezeigt. • Hat das Bit PD_3 den Wert 0 können neue Muster eingestellt werden. Sind bereits 5 Muster eingegeben, wird das Bit PA_7 eingeschaltet. Vorgabe: Die Muster werden in einem Array abgespeichert, und von dort auf das PA kopiert. 2. Aufgabe Grundaufgabe – Memory -Spiel: Am Port A wird ein zufälliges Muster ausgegeben und wird eine kurze Zeit angezeigt. Dann soll das Muster vom Spieler am Port L händisch nachgestellt werden. • Mit dem Bit PD_2 wird durch die Abfolge PD_2 = 0 → PD_2 = 1 die aktuelle Eingabe am PL bestätigt. • Es sind maximal 5 Versuche möglich • Wird das Muster erraten, wird das Muster „blinkend“ angezeigt (abwechselnd Muster und 0xFF auf PA ausgeben) • Bei Nichterraten des Musters werden abwechselnd die Muster 0xAA und 0x55 angezeigt. • Durch Bit PD_3 (Abfolge PD_3 = 0 → PD_3 = 1) wird ein neues Zufallsmuster kurz angezeigt. Hinweis: Die Funktion für eine Zufallszahl heißt rand und man findet sie in STDLIB.H. Sie liefert eine Zahl zwischen 0 und 32767. Vielen Dank jetzt schon für eure Hilfe!
:
Verschoben durch User
Christoph Jasser schrieb: > Vielen Dank jetzt schon für eure Hilfe! Ist ein bischen schwierig da sinnvoll zu helfen. Denn eigentlich sind beide Aufgabenstellungen nicht besonders schwer. Den einzigen Hinweis, den ich jetzt erst mal geben würde: Leg die Tastatur beiseite und skizziere dir, wie das Programm aussehen sollte, wie die Abläufe sind. Das ganze ruhig umgangssprachlich, ohne Rücksicht auf eine konkrete Programmiersprache. Genau jetzt schlägt nämlich die Stunde von Programm Ablauf Plänen. Nicht alles auf einmal berücksichtigen wollen, sondern in Schritten arbeiten. Kannst du zb in der ersten Aufgabe erst mal ein Programm schreiben (bzw. beschreiben), welches aus einem Array (der Länge 5) nacheinander 'ein Muster' auf dem Port A ausgibt?
:
Bearbeitet durch User
Das ist aber gemein, wenn man sowas quasi übernacht machen muss obwohl man vorher nichts gelernt hat, was einem dabei helfen könnte. :-) Die Aufgabenstellung ist ziemlich präsize und Du hast doch bestimmt in letzter Zeit die Grundlagen dafür gelernt bekommen? Und auch bestimmt länger Zeit als einen Tag, aber leider ist morgen plötzlich der Abgabetermin? Dann würde ich als Vater meiner Kinder sie reinrasseln lassen, damit sie für's Leben lernen, dass man sein Zeugs rechtzeitig macht und nicht immer irgendjemand im letzten Moment hilft.
Vielleicht sollten die Administrationen mal eine gesonderte Rubrik erzeugen, wo Leute ihre Hausaufgaben reinstellen, die sie gerne gelöst haben. Dann steht das nicht mehr zwischen den wichtigen Dingen. Und an der Thread-Ersteller: stell doch bitte die Musterlösung der Lehrers noch hier rein, dann sind wir für das nächste Jahr gerüstet.
Es waren über 10 Aufgaben, nur bei den letzten 2 komme ich nicht mehr weiter :)
Ohne dass ich dich jz irgendwie blöd an machen will, aber mal kurz meine Meinung dazu: Ich habe einen gewissen Bezug dazu, ich bin auch noch Schüler. Wir machen zwar nix mit uCs, aber (leider) wird uns Java beigebracht. Und bei uns gibt es auch Leute die dann vor der Stunde oder am Tag vor einer Schulaufgabe angerannt kommen. Aber Mann kann programmieren nicht an einem Tag lernen. Ja, ich gehe davon aus, dass du darin (hoffentlich nur noch) nicht gut darin bist. Mein Tipp dazu: wenn du einen einigermaßen fairen Lehrer hast, dann gehe zu ihm und erkläre es ihm. Ich denke dass du Informatik nicht freiwillig gewählt hast, also sollte er es verstehen. Aber einen Kritikpunkt hab ich noch: je nach dem wo du zur Schule gehst ist es unterschiedlich, aber wir haben seit der 9. Programmiert, und auch erst wenn du im ersten Jahr beim proggen bist, dann ist aber das Schuljahr schon fortgeschritten, das zeigt dass du es entweder nicht verstehst oder du im Unterricht nicht aufpasst. Dritte Möglichkeit wäre noch, dass ihr einen schlechten Lehrer habt, aber ich weis auch, dass man die schuld gerne auf den Lehrer schiebt ;) So nun noch ein kurzer Denkanstoß: Ablauf aufzeichnen, am besten auch Papier. Danach irgendein Pseudocode Erst danach mal ans programmieren denke Geht alles innerhalb einer halben Stunde MfG nga
JassChr. schrieb: > Es waren über 10 Aufgaben, nur bei den letzten 2 komme ich nicht mehr > weiter :) Was genau bedeutet 'nicht mehr weiter'. Wie gesagt: die AUfgaben sind nicht wirklich schwer. Sie mögen dir beim Durchlesen der Aufgabenstelung so vorkommen, vor allen Dingen weil sie recht umfangreich beschrieben sind, aber so richtig schwer sind sie nicht. Wenn du dich Schritt für Schritt auf Teilaspekte konzentrierst und dann Schritt für Schritt erweiterst, dann sind sie sogar recht einfach zu lösen. Hinweis: eine sinnvolle Schritt-für-Schritt Vorgehensweise orientiert sich nicht notwendigerweise an der Aufzählung der geforderten Eigenschaften in der Aufgabenstellung. Sinnvoll ist es zum Beispiel oft, wenn man sich zuert mal um die Ausgabe kümmert und erst dann um die Eingaben. Denn um die Eingaben testen zu können muss man irgendwo Ausgaben machen. Daher fängt man gerne mit genau diesen an, wobei man erst mal alles weg lässt, was sich kompliziert anhört. In deiner Aufgabe 1 ist es so, dass man erst mal alles weg lassen kann, bis auf das Array mit den Bitmustern, die Zahl 5 und das die 5 Muster nacheinander auf dem Port A auszugeben sind. Beispielsweise so
1 | uint8_t Muster[5] = { 0b01010101, |
2 | 0b11110000, |
3 | 0b00001111, |
4 | 0b10101010, |
5 | 0b11001100 |
6 | };
|
7 | int main() |
8 | {
|
9 | Port A auf Ausgang stellen |
10 | |
11 | i = 0; |
12 | |
13 | while( 1 ) { |
14 | |
15 | Muster[i] am Port A ausgeben |
16 | i++; |
17 | if( i == 5 ) |
18 | i = 0; |
19 | |
20 | ein wenig warten |
21 | }
|
22 | }
|
Daraus entwickelt man dann die weiteren geforderten Eigenschaften. Zum Beispiel könnte man als nächstes den Punkt > • Hat das Bit PD_3 den Wert 1 (Taster nicht gedrückt) werden > die bis dahin gespeicherten Muster am Port A nacheinander angezeigt. insoweit einbauen, dass die Ausgabe nur dann läuft, wenn wie gefordert Bit 3 am Port D den Wert liefert. Dazu muss man natürlich wissen, was es da zunächste alles zu tun gibt, damit dieser Pin als Eingang fungieren kann und wie man so einen Pin abfrägt. Aber dann ist die Erweiterung des bisherigen wieder einfach.
1 | uint8_t Muster[5] = { 0b01010101, |
2 | 0b11110000, |
3 | 0b00001111, |
4 | 0b10101010, |
5 | 0b11001100 |
6 | };
|
7 | int main() |
8 | {
|
9 | Port A auf Ausgang stellen |
10 | |
11 | Port D, Pin3 auf seine Rolle als Tastereingang einstellen |
12 | |
13 | i = 0; |
14 | |
15 | while( 1 ) { |
16 | |
17 | if( Pin 3 am Port D steht nicht auf 0 ) { |
18 | Muster[i] am Port A ausgeben |
19 | i++; |
20 | if( i == 5 ) |
21 | i = 0; |
22 | |
23 | ein wenig warten |
24 | }
|
25 | }
|
26 | }
|
Und so geht es sukzessive dahin. Aus den geforderten Eigenschaften sucht man sich die raus, die man im nächsten Schritt implementieren kann und um die man das Programm erweitern kann. Schritt für Schritt. Eins nach dem anderen.
:
Bearbeitet durch User
Vielen Dank Karl Heinz! Es waren 10 Aufgaben, die ersten 8 waren kein Problem, nur bei den letzten 2 wusste ich nicht so richtig wie ich die angehen sollte! Auf jeden Fall hast du mir weiter geholfen!
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.