LPCxpresso - Kurzbericht

dino03

Aktives Mitglied
27 Okt 2008
6,755
17
38
Sprachen
  1. BascomAVR
  2. Assembler
Hallo Heinrich,

hast du schonmal mit HTML und klickbaren Grafiken gearbeitet ? So ähnlich mache ich das. Man muß also wissen auf welchen Positonen die Buttons liegen und prüft ob der Klickpunkt innerhalb dieser Positionen ist.

Der Einfachheit halber habe ich die gesamte Fläche in 64x64 große Rasterflächen geteilt in die ich dann genau die Buttons einpasse. Dann kann man über die X und Y-Koordinate des Klickpunktes eine laufende Nummer erzeugen.

Zum Beispiel ...

lfd_position = ( int(Y/64) ) * 256 + int(X/64)

Damit bekommt man eine 16Bit-Zahl die Zeilenweise von links nach rechts durchläuft und die 64x64-Felder durchnummeriert.
Wenn man nun Buttons mit 64x64 Größe baut und so platziert das sie genau in den Feldern liegen dann muß man lediglich die laufende Nummer kontrollieren ob sie für den Button paßt.

Gruß
Dino
 

Cassio

Aktives Mitglied
29 Okt 2008
4,027
17
38
Region Hannover
Sprachen
  1. BascomAVR
Hallo Heinrich!

Ich mache das auch so wie Dino....

Je nach Option, ob ich den Touch nun per Pen bediene oder per Finger, habe ich mehrere Raster die ich im laufenden Programm definieren kann.
Einmal ein 16x16 Pixel Raster, dann ein 32x32Pixel Raster und noch ein 48x48Pixel Raster (weil mein Screen nur 480x272 Pixel hat).

Je nachdem welche Rasterweite ich ausgewählt habe, bekomme ich dann nur noch die "Kästchennummer".
Danach muss ich nur noch prüfen, welcher Button zu dem Kästchen gehört.
Das Ganze sieht dann zum Beispiel so aus:
Userfont_2_Raster.jpg

...oder auch auch so:
HCU_Qwertz48.jpg


Wie Dino schon geschrieben hat, sollte man natürlich die Button passend zur Rasterweite erstellen, das erleichtert ein später das Programmieren. :wink:


Grüße,
Cassio
 

Hemi

Aktives Mitglied
Premium Benutzer
30 Nov 2008
1,085
18
38
Korntal-Münchingen, Germany
Sprachen
  1. ANSI C
  2. C++
  3. PHP
  4. Java
Npaar Ideen werden gebraucht

Hallo zusammen,

ich bräuchte mal npaar Vorschläge. Und zwar, ich spiele die Musikdateien vom USB-Stick ab. Die Dateien liegen in verschiedenen Ordner und die die Dateien sind in einer m3u-Datei referenziert. Ich mache die Datei auf, lese eine Zeile ein und spiele die Datei ab. Das funktioniert auch problemlos. Jetzt brauche ich ja noch die Steuerung dafür.

Als erstes habe ich eine StateMachine gebaut:

Code:
enum {
	Stopped
	, Playing
	, Paused
	, Next
} playStatus;

Über diese StateMachine wird gesteuert, was der Player machen soll.

Hier ist die Routine, die die Liste zeilenweise liest und die Dateien abspielt:

Code:
	res = f_mount(0, &fatfs);
	if (res == FR_OK) {
		res = f_open(&file, fileName, FA_READ);

		if (res == FR_OK) {
			while (f_eof(&file) == 0) {
				f_gets(path, sizeof(path), &file);
				usart0_sendString(path);
				usart0_sendString("\r\n");
				vs1053b_playFile(path);
			}
		}
	}

	res = f_close(&file);
	res = f_mount(0,NULL);

Also eigentlich primitiv.

Und hier die die Routine, die die Dateien dann abspielt:

Code:
void vs1053b_playFile (const TCHAR *fileName) {
	FRESULT rc;
	FIL file;
	unsigned int br = 0, readedBytes = 0, f=0, decoder_time = 0;
	unsigned char buffer[4096];


	rc = f_open(&file, fileName, FA_READ);
	if (rc == FR_OK) {
		playStatus = Playing;
		while (readedBytes < file.fsize) {

			switch (playStatus) {
				case Playing:
					rc = f_read(&file, buffer, sizeof(buffer), &br);
					data_buffer = &buffer[0];	//set pointer to start of 512 bytes
					for (f=0 ; f < br ; f+=32) {
					  vs1053b_write32Byte();	//pump them down in 32 byte blocks
					  decoder_time = vs1053b_readRegister(SCI_DECODE_TIME); // get decoding time
					}
					readedBytes += br;
					break;
				case Paused:
					break;
				case Stopped:
					vs1053b_stopPlay();
					rc = f_close(&file);
					return;
				case Next:
					vs1053b_stopPlay();
					rc = f_close(&file);
					return;
			}
		}
		// clear the file handlers.
		rc = f_close(&file);
	} else {
		return;
	}
}

Der Status im enum wird von extern über USART gesetzt.

Das Ganze funktioniert auch sauber und zuverlässig, nur gefallen will es mir noch nicht so 100%. Habt Ihr eine Idee, wie man es vielleicht besser/anders lösen kann?

Danke & Grüße
Heinrich
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)