More complicated test program that generates text, coloured sprites and sound.
Dependencies: Gameduino mbed CommonTypes
GameduinoTest.cpp@1:c8ec5f958f3c, 2012-05-05 (annotated)
- 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?
User | Revision | Line number | New 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 | } |