Datum:
Hallo, ich bin dabei ein Snake Spiel(Architektur), das ich vor einiger Zeit einmal am PC programmiert habe, auf den AT2560 (AVR Einsteigerset) zu konvertieren. Bei kleinen hanwerklichen Versuchen muss ich jedoch ein Problem feststellen. Zunächst einmal einen Balken, der sich solange nach rechts bewegt, wie der Joystick gedrückt ist. Jedoch "flackert " der Baclken am rechten Rand, die Bewegung ist nicht sauber. Woran könnte das liegen? Schönen Dank, Jochen
#define F_CPU 16000000 #include <avr/io.h> #include <avr/io.h> #include "Auto.h" int main(void) { Auto a; a.init(); a.refresh(); DDRB=0xff; DDRK=0x00; // Port-K komplett auf EINGANG PORTK= 0xFF; // alle Pull-Up Widerstände aktivieren PORTK= 0xFF; while(1) { while( (PINK&0b01000000)==0){ a.right(); } } } Auto.cpp #include <avr/io.h> #include <string.h> #include <MK3_2560_LCD.h> #include <math.h> #include <util/delay.h> #include "auto.h" void Auto::left() { x = x-1; } void Auto::right() { x = x+1; refresh(); } void Auto::refresh() {unsigned int n; y=0; for(int i=0;i<10;i++) { MK3_LCD_PIXEL_AT(x+i,y,MODE_SET); MK3_LCD_PIXEL_AT(x+i,y+1,MODE_SET); } _delay_ms(1000); } void Auto::init() { char led_wert=0; char x,y; MK3_INIT_LCD(); // init des LCD MK3_LCD_CLEAR(); // LCD loeschen MK3_LCD_LIGHT(true); // beleuchtung einschalten MK3_LCD_SETCURSOR(0,0); } |
Datum:
Ist der Code so unübersichtlich;)?
Datum:
Jochen schrieb: > Ist der Code so unübersichtlich;)? Nö. Aber hier weiß keiner, was passiert bzw. was MK3_LCD_PIXEL_AT macht, wenn in MK3_LCD_PIXEL_AT(x+i,y,MODE_SET); eine x-Position ausserhalb des zulässigen Bereichs angegeben wird.
Datum:
Zum Ansteuern des LCD verwende ich den Treiber von http://www.mikrocontroller-4u.de 06 = Grafik-LCD-Treiber In der Schleife der Funktion refresh() in meinem Code zeichne ich zwei übereinander liegende Linien. Beim Rechtsklick des Joysticks trifft die Bedingung while( (PINK&0b01000000)==0) aus der Main Routine zu und es wird die Funktion right auf der Instanz a aufgerufen. Das führt dazu, dass die x Korrdinate erhöht wird und die oben beschriebene Funktion refresh aufgerufen wird. Diese zeichnet in Abhängigkeit vom x-wert die Linien erneut.
Datum:
Die Bewegung ist wie gesagt nicht sauber und bei langem gedrückthalten des Joysticks nach rechts flackert es auch leicht, besonders am rechten Rand der Linie.