Jump and Run

Hallo zusammen,

ich bin gerade dabei ein Jump and Run Spiel zu entwickeln. Ich verwende einen Arduino uno, der über ein Steckbrett mit einem LCD-Display 16x2 verbunden ist. Die Entwicklungsumgebung ist das Atmel-Studio und programmiert wird in C. Außerdem werden 2 Taster zum steuern verwendet.

Das Display habe ich zum Anzeigen gebracht. Die Taster sind richtig angeschlossen und funktionieren auch. Ich habe es geschafft mein Männchen auf Tasterdruck springen zu lassen. Auch habe ich es geschafft Blöcke von rechts nach links laufen zu lassen. Beides läuft bei mir in der gleichen for-Schleife. Aber es flakert dauernd, da ich mit delays arbeite. Jetzt komme ich aber gar nicht mehr weiter. Ich bin in Programmieren nicht gerade ein Profi.

Ich möchte am Ende ein Männchen, dass auf dem LCD-Bildschirm auf einer Stelle ist und eine Laufbewegung macht. Von rechts sollen unterschiedlich lange Blöcke kommen, die in der oberen bzw unteren Zeile sind. Je nachdem soll man dann mit dem Taster springen und ausweichen. Nebenbei soll noch ein Timer laufen, der mitstoppt, wie lange man durchhält. Könnt ihr mir da weiterhelfen? Ich habe nicht wirklich einen Ansatz wie genau das funktionieren soll.

Hier ist mein Code. Die Kommentierung dient mir nur als Übersicht.

ISR(PCINT0_vect) // Interrupt für Taster1
{
 if(Taster1()==1 )
 {
 k=1;
 }
 else
 {
 k=2;
 }
 
} // Ende Interrupt

 
int main(void)
{
 DDRB = 0x00;
 PORTB = 0xFF;
 
 PCMSK0 |= (1<<PCINT3); // gehört zu Interrupt
 PCICR |= (1<<PCIE0);
 sei();
 
 lcd_init();
 
 lcd_generatechar(LCD_GC_CHAR0, chrdata); //Strichmännchen 1 speichern
 lcd_generatechar(LCD_GC_CHAR1, chrdata2); //Strichmännchen 2 speichern
 lcd_generatechar(LCD_GC_CHAR2, chrdata3);
 
 
 lcd_setcursor(4,1); //Anzeige auf Bildschirm bei Start
 lcd_string("PRESS TO");
 lcd_setcursor(6,2);
 lcd_string("START");
 
 k=2;
 
 while(1)
 {
 if(Taster2()==1)
 {
 lcd_clear(); 
 
 while(1)
 {
 for (j=0; j<30; j++)
 {
 char block[20]={0xFF};
 lcd_setcursor(1, k);
 lcd_data(LCD_GC_CHAR0);
 _delay_ms(200);
 lcd_clear(); 
 lcd_setcursor(1, k);
 lcd_data(LCD_GC_CHAR1);
 _delay_ms(200);
 lcd_clear(); 
 lcd_setcursor(16-j, 2);
 lcd_string(block);
 lcd_string(block);
 lcd_string(block);
 lcd_string(block);
 lcd_string(block);
 _delay_ms(100);
 lcd_clear();
 }
 }
 }
 }
}

lcd_clear(); macht das Display flackern.
Du darfst nicht das Display löschen und neu aufbauen sondern die zu ändernden Zeichen überschreiben (entweder mit Leerzeichen oder anderen Zeichen).

Wirf delay() total raus. Sihe millis() und Nachtwächtererklährung.

Tasterabfragen gehören nicht in einen Interuptroutine. Da kannst Du nicht entprellen.

Wo ist die “Taster1()” Funktion?

Gib und das vollständige Programm.

Grüße Uwe