More complicated test program that generates text, coloured sprites and sound.

Dependencies:   Gameduino mbed CommonTypes

Committer:
RichardE
Date:
Sat May 05 17:18:35 2012 +0000
Revision:
1:c8ec5f958f3c
Parent:
0:13f69384ff8a
Child:
2:5604e16b78bd
Sinmple sprite commands and waitvblank working.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 0:13f69384ff8a 1 /*
RichardE 0:13f69384ff8a 2 * SOURCE FILE : GameduinoTest.cpp
RichardE 0:13f69384ff8a 3 *
RichardE 0:13f69384ff8a 4 * Definition of class GameduinoTest.
RichardE 0:13f69384ff8a 5 * Tests a Gameduino object.
RichardE 0:13f69384ff8a 6 *
RichardE 0:13f69384ff8a 7 */
RichardE 0:13f69384ff8a 8
RichardE 0:13f69384ff8a 9 #include "GameduinoTest.h" // this module's prototypes
RichardE 0:13f69384ff8a 10 #include "mbed.h" // mbed library
RichardE 1:c8ec5f958f3c 11 #include "sprite.h" // sprite data
RichardE 0:13f69384ff8a 12
RichardE 0:13f69384ff8a 13 /***************/
RichardE 0:13f69384ff8a 14 /* CONSTRUCTOR */
RichardE 0:13f69384ff8a 15 /***************/
RichardE 0:13f69384ff8a 16 GameduinoTest::GameduinoTest() {
RichardE 0:13f69384ff8a 17 }
RichardE 0:13f69384ff8a 18
RichardE 0:13f69384ff8a 19 /**************/
RichardE 0:13f69384ff8a 20 /* DESTRUCTOR */
RichardE 0:13f69384ff8a 21 /**************/
RichardE 0:13f69384ff8a 22 GameduinoTest::~GameduinoTest() {
RichardE 0:13f69384ff8a 23 }
RichardE 0:13f69384ff8a 24
RichardE 1:c8ec5f958f3c 25 /*********************/
RichardE 1:c8ec5f958f3c 26 /* DO ANIMATION TEST */
RichardE 1:c8ec5f958f3c 27 /*********************/
RichardE 1:c8ec5f958f3c 28 // Pass pointer to Gameduino to use in gd.
RichardE 1:c8ec5f958f3c 29 void GameduinoTest::AnimationTest( Gameduino *gd ) {
RichardE 1:c8ec5f958f3c 30 Int16 x = 0;
RichardE 1:c8ec5f958f3c 31 Int8 dir = 1;
RichardE 1:c8ec5f958f3c 32 for( UInt16 i = 0; i < 1000; ++i ) {
RichardE 1:c8ec5f958f3c 33 gd->waitvblank();
RichardE 1:c8ec5f958f3c 34 gd->sprite( 100, x, 100, 0, 0 );
RichardE 1:c8ec5f958f3c 35 x += dir;
RichardE 1:c8ec5f958f3c 36 if( x > 200 ) {
RichardE 1:c8ec5f958f3c 37 dir = -1;
RichardE 1:c8ec5f958f3c 38 }
RichardE 1:c8ec5f958f3c 39 else if( x < 0 ) {
RichardE 1:c8ec5f958f3c 40 dir = 1;
RichardE 1:c8ec5f958f3c 41 }
RichardE 1:c8ec5f958f3c 42 }
RichardE 1:c8ec5f958f3c 43 }
RichardE 1:c8ec5f958f3c 44
RichardE 0:13f69384ff8a 45 /****************/
RichardE 0:13f69384ff8a 46 /* RUN THE TEST */
RichardE 0:13f69384ff8a 47 /****************/
RichardE 0:13f69384ff8a 48 void GameduinoTest::Run( void ) {
RichardE 0:13f69384ff8a 49 // Make a serial port for communicating with PC.
RichardE 0:13f69384ff8a 50 Serial pc( USBTX, USBRX );
RichardE 0:13f69384ff8a 51 // Sign on message.
RichardE 0:13f69384ff8a 52 pc.printf( "Up and running!\r\n" );
RichardE 0:13f69384ff8a 53 // Make a digital output for use with Gameduino.
RichardE 0:13f69384ff8a 54 DigitalOut cs( p8 );
RichardE 0:13f69384ff8a 55 // Initialise an SPI link for communications with Gameduino.
RichardE 0:13f69384ff8a 56 // Use pin 5 for MOSI.
RichardE 0:13f69384ff8a 57 // Use pin 6 for MISO.
RichardE 0:13f69384ff8a 58 // Use pin 7 for SCK.
RichardE 0:13f69384ff8a 59 SPI spi( p5, p6, p7 );
RichardE 0:13f69384ff8a 60 // 4MHz clock should be OK since this is default on an Arduino.
RichardE 0:13f69384ff8a 61 spi.frequency( 4000000 );
RichardE 0:13f69384ff8a 62 // Set SPI format to use.
RichardE 0:13f69384ff8a 63 // Use 8 bits per SPI frame.
RichardE 0:13f69384ff8a 64 // Use SPI mode 0.
RichardE 0:13f69384ff8a 65 spi.format( 8, 0 );
RichardE 0:13f69384ff8a 66 // Make a Gameduino and pass SPI link and digital output for chip select.
RichardE 0:13f69384ff8a 67 Gameduino gd( &spi, &cs );
RichardE 0:13f69384ff8a 68 // Reset the Gameduino.
RichardE 0:13f69384ff8a 69 gd.begin();
RichardE 0:13f69384ff8a 70 // Lets have a default ASCII character set.
RichardE 0:13f69384ff8a 71 gd.ascii();
RichardE 1:c8ec5f958f3c 72 // Fill sprite image and palette memory.
RichardE 1:c8ec5f958f3c 73 gd.copy( Gameduino::RAM_SPRIMG, sprite_sprimg, sizeof( sprite_sprimg ) );
RichardE 1:c8ec5f958f3c 74 gd.copy( Gameduino::RAM_SPRPAL, sprite_sprpal, sizeof( sprite_sprpal ) );
RichardE 0:13f69384ff8a 75 // Read from ident register.
RichardE 0:13f69384ff8a 76 UInt8 id = gd.rd( Gameduino::IDENT );
RichardE 0:13f69384ff8a 77 // Report back to PC.
RichardE 0:13f69384ff8a 78 pc.printf( "Gameduino ID is 0x%02X.\r\n", (int)id );
RichardE 0:13f69384ff8a 79 // Write something to character memory.
RichardE 0:13f69384ff8a 80 gd.__wstart( Gameduino::RAM_PIC );
RichardE 0:13f69384ff8a 81 for( UInt8 c = 'A'; c <= 'Z'; ++c ) {
RichardE 0:13f69384ff8a 82 gd.__tr8( c );
RichardE 0:13f69384ff8a 83 }
RichardE 0:13f69384ff8a 84 gd.__end();
RichardE 1:c8ec5f958f3c 85 // Test copy method.
RichardE 1:c8ec5f958f3c 86 UInt8 copyData[] = "HELLO";
RichardE 1:c8ec5f958f3c 87 gd.copy( Gameduino::RAM_PIC + 64, copyData, 5 );
RichardE 1:c8ec5f958f3c 88 // Test putstr method.
RichardE 1:c8ec5f958f3c 89 gd.putstr( 3, 10, "Ambidextrous!" );
RichardE 1:c8ec5f958f3c 90 // Show some sprites.
RichardE 1:c8ec5f958f3c 91 UInt16 y = 140;
RichardE 1:c8ec5f958f3c 92 UInt8 spriteNum = 0;
RichardE 1:c8ec5f958f3c 93 for( UInt8 rot = 0; rot < 8; ++rot ) {
RichardE 1:c8ec5f958f3c 94 UInt16 x = 0;
RichardE 1:c8ec5f958f3c 95 for( UInt8 spriteImage = 0; spriteImage < 10; ++spriteImage ) {
RichardE 1:c8ec5f958f3c 96 gd.sprite( spriteNum++, x, y, spriteImage, 0, (Gameduino::Rotation)rot );
RichardE 1:c8ec5f958f3c 97 x += 18;
RichardE 1:c8ec5f958f3c 98 }
RichardE 1:c8ec5f958f3c 99 y += 18;
RichardE 1:c8ec5f958f3c 100 }
RichardE 1:c8ec5f958f3c 101 // Do some sprite animation.
RichardE 1:c8ec5f958f3c 102 AnimationTest( &gd );
RichardE 1:c8ec5f958f3c 103 // Finished with Gameduino.
RichardE 1:c8ec5f958f3c 104 gd.end();
RichardE 0:13f69384ff8a 105 }