Hallo zusammen, Ich arbeite derzeit an einem Quizspiel mit einem Atmega32 und dem Pollin TG12864b Grafikdisplay. Das Spiel soll 15 Fragen haben (im Code habe ich erstmal nur 3 Fragen zum Test vorgesehen). Beim Start soll kurz "Quizmaster 2012" eingeblendet werden, danach soll das Spiel beginnen, erste Frage soll dargestelllt werden. Wenn eine Antwort ausgewählt wurde, soll die Zeile mit der richtigen Antwort invertiert dargestellt werden um die Auswahl zu markieren, die anderen Antworten sollen normal dargestellt werden. Wenn die Antwort falsch ist soll das Programm kurz zur Hauptanzeige Lcdat 4 , 1 , "QUIZMASTER 2012" Springen und dann die erste Frage laden (erstmal ohne zufällige Auswahl der Fragen). Wenn die Antwort richtig ist, soll er den nächsten Frage, Antwort, Geldblock darstellen. Sind alle Fragen durch, soll er zurück zur Hauptanzeige springen. Den Code schreibe ich mit Bascom AVR. Ich hatte mir gedacht das Display so zu gestalten (es stehen mit einer 8x8 Font 8 zeilen und 16 Zeichen zur verfügung): Frage: 50EUR Wer hat im Film. ..die Hauptrolle gespielt? A:(AntwortA) B:(AntwortB) C:(AntwortC) D:(AntwortD) Das ganze möchte ich mit 4 Tasten bedienen (Für jede Antwort eine Taste) Nun zu meiner Frage: Mit welchem Befehl kann ich den nächsten Block darstellen? Mit "Next" funzt das irgendwie nicht so richtig. Oder muss man da mit Cnt = Cnt+1 arbeiten? Ich stehe dort gerade ein bisschen auf dem Schlauch. Der Code sieht bisher so aus: (Da sind sicherlich einige Dinge die noch nicht so optimal gelöst wurden, aber man lernt ja noch dazu) 'Chipkonfiguration und Quarzfrequenz $regfile = "m32def.dat" $crystal = 8000000 'Hauptkonfiguration der Ein-und Ausgänge: Config Portd.3 = Input Config Portd.4 = Input Config Portd.5 = Input Config Portd.6 = Input 'Pullup-Widerstände aktivieren Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 'Grafik-LCD Konfiguration $lib "glcdKS108.lbx" Wait 2 Print "Config" Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 0 , Ce2 = 1 , Cd = 4 , Rd = 3 , Reset = 2 , Enable = 5 Cls Setfont Font8x8 Cls Dim A As Integer Dim X As Integer Dim Loesung(3) As Integer Dim Frage(3) As String * 16 Dim Geldanzeige(3) As String * 16 Dim Antworta(3) As String * 16 Dim Antwortb(3) As String * 16 Dim Antwortc(3) As String * 16 Dim Antwortd(3) As String * 16 Wait 1 Cls Goto Hauptanzeige Hauptanzeige: Lcdat , 4 , 1 , " QUIZMASTER " , 1 Lcdat , 5 , 1 , " 2012 " , 1 Gosub Tasterabfrage Frage(1) = "Was ist ein Aal?" Frage(2) = "Wie heisse ich? " Frage(3) = "Wie alt bin ich?" Loesung(1) = 1 Loesung(2) = 4 Loesung(3) = 2 'Antwortmöglichkeiten (nicht negiert): Antworta(1) = "A:Fischart " Antwortb(1) = "B:Werkzeug " Antwortc(1) = "C:Maschine " Antwortd(1) = "D:Krankheit " Antworta(2) = "A:Peter " Antwortb(2) = "B:Klaus " Antwortc(2) = "C:Matthias " Antwortd(2) = "D:Florian " Antworta(3) = "A:10 Jahre alt " Antwortb(3) = "B:20 Jahre alt " Antwortc(3) = "C:30 Jahre alt " Antwortd(3) = "D:40 Jahre alt " 'Geldanzeige für die drei Fragen: Geldanzeige(1) = "Frage: 50EUR" Geldanzeige(2) = "Frage: 100EUR" Geldanzeige(3) = "Frage: 250EUR" Do Tasterabfrage: For X = 1 To 3 Step 1 'Ersten Frage-und Antwortenblock darstellen Lcdat 1 , 1 , Geldanzeige(x) , 1 Lcdat 2 , 1 , Frage(x) Lcdat 5 , 1 , Antworta(x) Lcdat 6 , 1 , Antwortb(x) Lcdat 7 , 1 , Antwortc(x) Lcdat 8 , 1 , Antwortd(x) If Loesung(x) = A Then Next X 'nächsten Frageblock darstellen! Wie? If Loesung(x) <> A Then Gosub Hauptanzeige 'Zurück zur Hauptanzeige If Loesung(x) = 0 Then Gosub Tasterabfrage 'Die Tasten abragen wenn keine Taste gedrückt wurde 'Antwortzuweisung der jeweiligen Taste, Hauptfunktion des Programms If Pind.3 = 0 Then A = 1 If Pind.4 = 0 Then A = 2 If Pind.5 = 0 Then A = 3 If Pind.6 = 0 Then A = 4 If Pind.3 = 1 And Pind.4 = 1 And Pind.5 = 1 And Pind.6 = 1 Then A = 0 Return Loop End $include "font8x8.font"
Florian K. schrieb: > Frage: 50EUR > Wer hat im Film. > ..die Hauptrolle > gespielt? Und da hast du dann genau ein Zeichen, um den Filmnamen hinzuschreiben? Das heisst wohl entweder ein anderes Display nehmen, oder Text scrollen. Zu deiner eigentlichen Frage: Du hast doch einen ganz simplen Programmablauf. Schreib den im Detail auf, dann setz ihn in bascom um. Z.B. - Frage x darstellen - In Schleife ständig die vier Tasten abfragen, bis eine gedrückt wird - Prüfen ob die richtige Taste gedrückt wurde - JA - Print "Gratulation..." - Geld = Geld + Gewinn - Frage = Frage + 1 - NEIN - Print "Falsch..." - Geld = 0 - Frage = 1 - Gehe zu Start Einfacher wäre es natürlich, sowas auf dem PC zu testen. Das ist ja schliessliche keine typische µc-Aufgabe.
Johannes G. schrieb: > Und da hast du dann genau ein Zeichen, um den Filmnamen hinzuschreiben? > Das heisst wohl entweder ein anderes Display nehmen, oder Text scrollen. Das war doch nur ein Beispiel rein vom Aufbau!! Die Fragen werden dann kürzer sein. Das Problem was ich habe ist wie ich den nächsten Frage,Geld,Antwortenblock darstellen soll? Mit Next so wie ich das eingebunden habe flackert der Bildschirm nur da sich der Befehl nur schnell wiederholt. Ich möchte aber wenn die Antwort richtig ist, den nächsten Block darstellen und die Tasten abfrage OHNE das der Atmega immer wieder zurückspringt zur ersten Frage. Oder muss man da anstatt: "For 1 to 3 Step 1" If Pin.() = 1 Then next X eher schreiben: Cnt = cnt + 1 also um eine Variable hochzählen (das der uC mitzählt)? Er soll ja dann beim nächsten Block stehen bleiben und die Tasten erneut abfragen. Das Funktioniert aber nicht richtig. Wie muss ich den Next befehl denn einbinden damit meine Funktion gewährleistet ist? Auch die Bascom Hilfe bringt mich da nicht richtig weiter.
Johannes G. schrieb: > - Frage x darstellen > - In Schleife ständig die vier Tasten abfragen, bis eine gedrückt wird > - Prüfen ob die richtige Taste gedrückt wurde > - JA > - Print "Gratulation..." > - Geld = Geld + Gewinn > - Frage = Frage + 1 > - NEIN > - Print "Falsch..." > - Geld = 0 > - Frage = 1 > - Gehe zu Start Hast du überhaupt gelesen und verstanden, was ich da geschrieben habe? Es tönt so als ob du erst mal Basic lernen musst. Leg doch den µc zur Seite, und lern Basic-Grundlagen am PC (mit Textausgabe in die Konsole etc.).
Johannes G. schrieb: > Hast du überhaupt gelesen und verstanden, was ich da geschrieben habe? Ja das habe ich. Anscheinend hast du schwierigkeiten mir meine Frage Florian K. schrieb: > Wie muss ich den Next > befehl denn einbinden damit meine Funktion gewährleistet ist? nicht verstanden. Johannes G. schrieb: >> - Frage x darstellen >> - In Schleife ständig die vier Tasten abfragen, bis eine gedrückt wird >> - Prüfen ob die richtige Taste gedrückt wurde >> - JA >> - Print "Gratulation..." >> - Geld = Geld + Gewinn >> - Frage = Frage + 1 >> - NEIN >> - Print "Falsch..." >> - Geld = 0 >> - Frage = 1 >> - Gehe zu Start Der Ablauf ist mir klar, aber das ist doch im endeffekt nichts anderes was ich schon größtenteils im Programm stehen habe! Johannes G. schrieb: > Es tönt so als ob du erst mal Basic lernen musst. Wie bitte? Johannes G. schrieb: > Leg doch den µc zur > Seite, und lern Basic-Grundlagen am PC (mit Textausgabe in die Konsole > etc.). Das hat bei mir nicht funktioniert, sonst hätte ich das benutzt. Das mit dem Terminal Emulator funzt nicht richtig und bei der Simulation gibt es nur einen Simulator für 2x16 Zeichen Lcds aber keinen für Grafikdisplays!
Ich will dir nicht deine sinnlose Frage beantworten, wie du "next" zu benutzen hast, ich will dass du die geeignete Programmstruktur für dein Problem kapierst. Du hast doch da eine riesen-Schleife in der du alles mögliche machst. Das entspricht hinten und vorne nicht dem Ablaufplan den ich skizziert habe. Irgendwas hast du also doch nicht verstanden. Florian K. schrieb: > Das hat bei mir nicht funktioniert, sonst hätte ich das benutzt. > Das mit dem Terminal Emulator funzt nicht richtig und bei der Simulation > gibt es nur einen Simulator für 2x16 Zeichen Lcds aber keinen für > Grafikdisplays! Und das hast du auch nicht verstanden. Mit Basic kann man auch PC-Programme schreiben (hat rein garnichts mit µc oder Simulator etc. zu tun). Die Konsole ist kein Terminalprogramm sondern ein Textfenster wo du Ausgaben des Programms als Text darstellen kannst.
Da sind strukturelle Probleme in der Hauptschleife
1 | Do |
2 | Tasterabfrage: |
3 | For X = 1 To 3 Step 1 |
4 | If Loesung(x) = A Then Next X |
5 | If Loesung(x) <> A Then Gosub Hauptanzeige |
6 | If Loesung(x) = 0 Then Gosub Tasterabfrage Return |
7 | Loop |
Die For-Schleife muss immer mit Next beendet werden, nicht nur wenn Loesung(x)=A ist.
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.