Absender: Frank Menzel
Datum: Di, 29.11.2011 19:21:39
In-reply-to:
<393B8E87-128D-4AD8-AD95-1E0EF6741AB3@xxxxxxxxxxxxxxx>
References:
<E171B4EB-B636-4646-A1B5-18365383D5A7@xxxxxxxxxxxxxxx><07C94192229C4D7B9D57263A625F7C3B@FrankPC><B0A7F2D09B5145188D7CDDCF05DC46A8@FrankPC><DA88D128-3438-4103-AB86-7F3DAD134A59@xxxxxxxxxxxxxxx><A2D70DD76A2D4A00A50C75CDB6D1DDDA@FrankPC> <393B8E87-128D-4AD8-AD95-1E0EF6741AB3@xxxxxxxxxxxxxxx>
Hallo Timo,inspiriert durch die Anfrage nach Displayausgabe habe ich dies mal verfolgt und für Basic gibt's jetzt 3 Displayroutinen, siehe das Beispielprog dazu. Man kann mit diesen den Cursor auf dem Display positionieren, den Screen löschen sowie einen festen String ausgeben. Das alles auf dem bereits vorhandenen Basic-Screen, die Funktionstasten-Ausgabe wird hierbei überschrieben. Mit der Taste 0 wird die Originalausgabe wieder raufgeschrieben. In Basic selbst ist die Stringverwendung ausgeschaltet, so dass vom Script her Stringvariable der Ausgaberoutine nicht übergeben werden können, eben nur feststehende Zeichen werden ausgegeben. Das Einschalten des entsprechenden Params hat diverse Fehler provoziert, hab ich wieder ausgeschaltet.
Hier mal das Beispielprog mit den neuen Routinen: 10: call("displ_clear") call("displ_cursor",1,6) call("displ_puts", "Zeile 1") call("displ_cursor",4,3) call("displ_puts", "Text in Zeile 4") end Gruß, Frank -------------------------------------------------- From: "Timo Sandmann" <mail@xxxxxxxxxxxxxxx> Sent: Monday, November 28, 2011 8:36 PM To: "Entwicklung rund um den c't-bot" <ct-bot-entwickler@xxxxxxxxxxxxxxxxx> Subject: Re: [ct-bot] Skriptsprache zur Bot-Programmierung
Hallo Frank, danke, jetzt hat das Patchen einwandfrei funktioniert. Gruß, Timo Am 28.11.2011 um 16:55 schrieb Frank Menzel:Hallo Timo, anbei der Patch im Zip-Format.Ja, stimmt, da sind ein paar Änderungen im Pfadplanungsverhalten drin, diese nicht übernehmen. Hatte da etwas versucht, dass der Bot immer Abstand hält von einem Hindernis. Die Idee hat aber so noch nicht geklappt. Mal sehen, ob ich da irgendwann weiter machen kann...Gruß, Frank -------------------------------------------------- From: "Timo Sandmann" <mail@xxxxxxxxxxxxxxx> Sent: Monday, November 28, 2011 12:48 PMTo: "Entwicklung rund um den c't-bot" <ct-bot-entwickler@xxxxxxxxxxxxxxxxx>Subject: Re: [ct-bot] Skriptsprache zur Bot-ProgrammierungHallo Frank,sehr schön, dass man so auch die Ergebnisse von Verhalten auswerten kann!Der Patch hat allerdings zwei Probleme:1. Alle Zeilen, die länger als 80 Zeichen sind, wurden (vermutlich vom Mail-Client) umgebrochen, so kann man den Patch leider nicht anwenden. 2. Im Patch sind auch Änderungen am Pfadplanungsverhalten enthalten - sind das undokumentierte Bugfixes, die auch ins SVN sollen, oder waren da beim Patch-Erstellen versehentlich zu viele Dateien angehakt? Schick mir den Patch doch bitte noch mal in ein zip-Archiv verpackt, damit das originale Format erhalten bleibt.Gruß, Timo Am 26.11.2011 um 20:35 schrieb Frank Menzel:Hallo Timo,um das Ergebnis des Messverhaltens auch in uBasic abfragen zu können, so wie im ABL-Script, habe ich etwas anpassen müssen. Anbei dazu der Patch und das Solve_maze-Verhalten mit dem Messverhalten zur Abstandsmessung. Die Version vorhin konnte das Messverhalten noch nicht abfragen und griff daher direkt auf die Abstandssensoren zurück.Gruß, Frank -------------------------------------------------- From: "Frank Menzel" <Menzelfr@xxxxxx> Sent: Saturday, November 26, 2011 5:07 PMTo: "Entwicklung rund um den c't-bot" <ct-bot-entwickler@xxxxxxxxxxxxxxxxx>; <mail@xxxxxxxxxxxxxxx>Subject: Re: [ct-bot] Skriptsprache zur Bot-ProgrammierungHallo Timo,im Anhang habe ich die Version des solve_maze Verhaltens mal als uBasicVariante analog des ABL-Scriptes... Gruß, Frank_______________________________________________ ct-bot-entwickler Mailingliste ct-bot-entwickler@xxxxxxxxxxxxxxxxx http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler<patch_beh_result.zip>_______________________________________________ ct-bot-entwickler Mailingliste ct-bot-entwickler@xxxxxxxxxxxxxxxxxhttp://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler
### Eclipse Workspace Patch 1.0 #P ct-Bot Index: include/bot-logic/ubasic_call.h =================================================================== --- include/bot-logic/ubasic_call.h (revision 1864) +++ include/bot-logic/ubasic_call.h (working copy) @@ -14,16 +14,17 @@ #define __UBASIC_CALL_H__ // Funktionspointertypen -//#define VOID_FUNC_VOID 0 +#define VOID_FUNC_VOID 0 //#define VOID_FUNC_INT 1 //#define INT_FUNC_INT 2 -//#define VOID_FUNC_2INT 3 +#define VOID_FUNC_2INT 3 //#define VOID_FUNC_4INT 4 //#define VOID_FUNC_2INT_CHAR 5 //#define UCHAR_FUNC_UCHAR 6 #define VOID_FUNC_2INT16 20 #define BOOL_FUNC_BEH 21 #define VOID_FUNC_RC 22 +#define INT_FUNC_CHAR 23 // Strukturdefinition fuer Funktionspointertabelle typedef struct { @@ -36,7 +37,7 @@ union ftp { void (*VoidFuncVoid) (void); void (*VoidFuncInt) (int); - void (*VoidFunc2Int) (int, int); + void (*VoidFunc2Int) (int16_t, int16_t); void (*VoidFunc4Int) (int, int, int, int); void (*VoidFunc2IntChar)(int, int, char*); int (*IntFuncInt) (int); @@ -44,6 +45,7 @@ void (*VoidFunc2Int16) (int16_t, int16_t); uint8_t (* BoolFuncBeh) (Behaviour_t *); int8_t (* VoidFuncRC)(Behaviour_t *, const char *, const remote_call_data_t *); + uint8_t (*IntFuncChar)(const char*); } funct_ptr; unsigned char typ; } callfunct_t; Index: ct-Bot.h =================================================================== --- ct-Bot.h (revision 1864) +++ ct-Bot.h (working copy) @@ -72,7 +72,7 @@ #define POS_STORE_AVAILABLE /*!< Positionsspeicher vorhanden */ -//#define MAP_AVAILABLE /*!< Aktiviert die Kartographie */ +#define MAP_AVAILABLE /*!< Aktiviert die Kartographie */ #define MAP_2_SIM_AVAILABLE /*!< Sendet die Map zur Anzeige an den Sim */ //#define SPEED_CONTROL_AVAILABLE /*!< Aktiviert die Motorregelung */ @@ -86,7 +86,7 @@ //#define MMC_AVAILABLE /*!< haben wir eine MMC/SD-Karte zur Verfuegung? */ //#define SPI_AVAILABLE /*!< verwendet den Hardware-SPI-Modus des Controllers, um mit der MMC zu kommunizieren. Muss ausserdem _immer_ an sein, wenn der Hardware-SPI-Umbau durchgefuehrt wurde! Hinweise in mcu/mmc.c beachten! */ //#define MMC_VM_AVAILABLE /*!< Virtual Memory Management mit MMC / SD-Card oder PC-Emulation */ -//#define BOT_FS_AVAILABLE /*!< Aktiviert das Dateisystem BotFS (auf MCU nur mit MMC moeglich) */ +#define BOT_FS_AVAILABLE /*!< Aktiviert das Dateisystem BotFS (auf MCU nur mit MMC moeglich) */ #define OS_AVAILABLE /*!< Aktiviert BotOS fuer Threads und Scheduling */ //#define EEPROM_EMU_AVAILABLE /*!< Aktiviert die EEPROM-Emulation fuer PC */ Index: Changelog.txt =================================================================== --- Changelog.txt (revision 1864) +++ Changelog.txt (working copy) @@ -1,5 +1,7 @@ CHANGELOG fuer c't-Bot ====================== +2011-11-29 Frank Menzel [Menzelfr@xxxxxx]: Basic-Erweiterung zur Ausgabe auf dem Basic-Scree Display, siehe Basic Beispielprog + 2011-11-26 Frank Menzel [Menzelfr@xxxxxx]: Anpassungen fuer uBasic: neue Routine beh_result zur Ermittlung des Ergebnisses eines Verhaltens (Messverhalten wie im ABL Script verwendet) 2011-11-25 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: Servos und Klappen-Sensor auch fuer simulierte Bots Index: bot-logic/behaviour_ubasic.c =================================================================== --- bot-logic/behaviour_ubasic.c (revision 1864) +++ bot-logic/behaviour_ubasic.c (working copy) @@ -71,6 +71,8 @@ char current_proc[MAX_PROG_NAME_LEN]; /**< aktueller Programmname */ static uint8_t result_behav; /**< Puffer fuer Verhaltens-Ergebnis */ +static uint8_t show_first=0; /**< nur beim ersten Aufruf Screen mit FTasten darstellen sonst via Basic ueberschreibbar */ + /** * Laedt ein uBasic-Programm aus deiner BotFS-Datei * \param *filename Dateiname des Programms @@ -234,13 +236,23 @@ RC5_Code = 0; break; #endif // RC5_CODE_STOP + +#ifdef RC5_CODE_0 + case RC5_CODE_0: + // Darstellung des Screens mit den FTasten in urspruenglicher Darstellung + show_first = 0; + break; +#endif // RC5_CODE_STOP } } /** * Display fuer das uBasic-Verhalten */ + void ubasic_display(void) { +if (show_first==0) { + show_first=1; display_cursor(1, 1); display_puts("- uBasic -"); #ifdef RC5_CODE_PLAY @@ -253,7 +265,7 @@ display_cursor(4, 1); display_puts("STOPP:Prog abbrechen"); #endif - +} ubasic_disp_key_handler(); // Aufruf des Key-Handlers } Index: include/bot-logic/ubasic_config.h =================================================================== --- include/bot-logic/ubasic_config.h (revision 1864) +++ include/bot-logic/ubasic_config.h (working copy) @@ -125,7 +125,7 @@ #define UBASIC_DATA 0 // String-Support -#define UBASIC_STRING 0 +#define UBASIC_STRING 1 // exit(1) in Fehlersituationen macht sich bei AVRs etwas schlecht... #ifndef BREAK_NOT_EXIT Index: bot-logic/ubasic_call.c =================================================================== --- bot-logic/ubasic_call.c (revision 1864) +++ bot-logic/ubasic_call.c (working copy) @@ -19,6 +19,7 @@ #include "tokenizer.h" #include "ubasic_config.h" #include "ubasic_call.h" +#include "display.h" #if USE_AVR && USE_LC7981 #include "../lc7981/lc7981.h" @@ -63,6 +64,9 @@ { "beh_active", .funct_ptr.BoolFuncBeh = ubasic_behaviour_is_active, BOOL_FUNC_BEH }, { "RC", .funct_ptr.VoidFuncRC = bot_remotecall, VOID_FUNC_RC }, { "beh_result", .funct_ptr.BoolFuncBeh = behaviour_result, BOOL_FUNC_BEH }, + {"displ_clear", .funct_ptr.VoidFuncVoid=display_clear, VOID_FUNC_VOID}, + {"displ_cursor", .funct_ptr.VoidFunc2Int=display_cursor, VOID_FUNC_2INT}, + {"displ_puts", .funct_ptr.IntFuncChar=display_puts, INT_FUNC_CHAR}, {"", {NULL}, 255} }; @@ -76,9 +80,11 @@ #if defined VOID_FUNC_INT || defined INT_FUNC_INT || defined VOID_FUNC_2INT || defined VOID_FUNC_4INT || defined VOID_FUNC_2INT_CHAR int p1=0; int p2=0; +#if defined VOID_FUNC_4INT // sonst Warning wegen unbenutzter Vars wenn nicht alle 4 Verwendung finden int p3=0; int p4=0; #endif +#endif int r=0; accept(TOKENIZER_CALL); @@ -181,6 +187,19 @@ #endif break; #endif +#ifdef INT_FUNC_CHAR + case INT_FUNC_CHAR: + + accept(TOKENIZER_COMMA); + accept(TOKENIZER_STRING); + #if USE_PROGMEM + uint8_t (* f4)(const char*) = (uint8_t (*)(const char*)) pgm_read_word(&callfunct[idx].funct_ptr.IntFuncChar); + r=f4( (const char*)tokenizer_last_string_ptr()); + #else + r=callfunct[idx].funct_ptr.IntFuncChar((const char*)tokenizer_last_string_ptr()); + #endif + break; +#endif #ifdef UCHAR_FUNC_UCHAR case UCHAR_FUNC_UCHAR: // <-- naja, koennte ins Auge gehen... #endif Index: bot-logic/basic/test_display.txt =================================================================== --- bot-logic/basic/test_display.txt (revision 0) +++ bot-logic/basic/test_display.txt (revision 0) @@ -0,0 +1,7 @@ +10: +call("displ_clear") +call("displ_cursor",1,6) +call("displ_puts", "Zeile 1") +call("displ_cursor",4,3) +call("displ_puts", "Text in Zeile 4") +end \ No newline at end of file