Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: N5110 PinDetect PowerControl mbed
main.cpp@14:b4fed570abaf, 2015-05-09 (annotated)
- Committer:
- Siriagus
- Date:
- Sat May 09 14:39:48 2015 +0000
- Revision:
- 14:b4fed570abaf
- Parent:
- 13:7ab71c7c311b
- Child:
- 17:d6a3b29cab31
Added function for generating random seed from two unconnected AnalogIn pins.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Siriagus | 0:1f92de30d43e | 1 | /** |
| Siriagus | 10:f2488a0ecab7 | 2 | * @file main.cpp |
| Siriagus | 10:f2488a0ecab7 | 3 | * @brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds |
| Siriagus | 10:f2488a0ecab7 | 4 | * @author Andreas Garmannslund |
| Siriagus | 10:f2488a0ecab7 | 5 | */ |
| Siriagus | 0:1f92de30d43e | 6 | |
| Siriagus | 0:1f92de30d43e | 7 | #include "mbed.h" |
| Siriagus | 0:1f92de30d43e | 8 | #include "N5110.h" |
| Siriagus | 1:0cfe2255092a | 9 | #include "PowerControl.h" |
| Siriagus | 1:0cfe2255092a | 10 | #include "PinDetect.h" |
| Siriagus | 4:d6661b976359 | 11 | #include <string> |
| Siriagus | 7:678873947b29 | 12 | #include <sstream> |
| Siriagus | 4:d6661b976359 | 13 | #include <ctime> |
| Siriagus | 1:0cfe2255092a | 14 | |
| Siriagus | 0:1f92de30d43e | 15 | #include "Joystick.h" |
| Siriagus | 1:0cfe2255092a | 16 | |
| Siriagus | 5:100d960fc6d5 | 17 | #include "StateManager.h" |
| Siriagus | 1:0cfe2255092a | 18 | #include "State.h" |
| Siriagus | 1:0cfe2255092a | 19 | #include "images.h" |
| Siriagus | 4:d6661b976359 | 20 | #include "InputManager.h" |
| Siriagus | 1:0cfe2255092a | 21 | |
| Siriagus | 4:d6661b976359 | 22 | |
| Siriagus | 0:1f92de30d43e | 23 | |
| Siriagus | 1:0cfe2255092a | 24 | // Redefine pin names for simple access. |
| Siriagus | 1:0cfe2255092a | 25 | #define JOY_H p17 |
| Siriagus | 1:0cfe2255092a | 26 | #define JOY_V p16 |
| Siriagus | 1:0cfe2255092a | 27 | #define JOY_BTN p15 |
| Siriagus | 1:0cfe2255092a | 28 | |
| Siriagus | 1:0cfe2255092a | 29 | #define LED_POT p20 |
| Siriagus | 1:0cfe2255092a | 30 | |
| Siriagus | 2:0ae5ac8b0cac | 31 | #define BUTTON_A p28 |
| Siriagus | 2:0ae5ac8b0cac | 32 | #define BUTTON_B p27 |
| Siriagus | 1:0cfe2255092a | 33 | #define BUTTON_C p29 |
| Siriagus | 1:0cfe2255092a | 34 | |
| Siriagus | 4:d6661b976359 | 35 | // Input and Output |
| Siriagus | 10:f2488a0ecab7 | 36 | N5110 *lcd; /// Display |
| Siriagus | 4:d6661b976359 | 37 | |
| Siriagus | 10:f2488a0ecab7 | 38 | InputManager *input; /// Responsible for managing user input |
| Siriagus | 4:d6661b976359 | 39 | |
| Siriagus | 0:1f92de30d43e | 40 | // Brightness potentiometer |
| Siriagus | 1:0cfe2255092a | 41 | AnalogIn ledPot(LED_POT); |
| Siriagus | 0:1f92de30d43e | 42 | |
| Siriagus | 0:1f92de30d43e | 43 | // Debugging |
| Siriagus | 0:1f92de30d43e | 44 | BusOut leds(LED1, LED2, LED3, LED4); |
| Siriagus | 0:1f92de30d43e | 45 | |
| Siriagus | 10:f2488a0ecab7 | 46 | void init(); /// Set up initial variables |
| Siriagus | 10:f2488a0ecab7 | 47 | void cleanUp(); /// Frees remaining allocated memory |
| Siriagus | 1:0cfe2255092a | 48 | |
| Siriagus | 5:100d960fc6d5 | 49 | StateManager* fsm; |
| Siriagus | 5:100d960fc6d5 | 50 | |
| Siriagus | 14:b4fed570abaf | 51 | AnalogIn randomPin(p18); // Unconnected pin => noise, used for generating a random seed. |
| Siriagus | 14:b4fed570abaf | 52 | AnalogIn randomPin2(p19); // Unconnected pin |
| Siriagus | 14:b4fed570abaf | 53 | |
| Siriagus | 14:b4fed570abaf | 54 | /// Function for generating a random seed by using a unconnected analog input pin |
| Siriagus | 14:b4fed570abaf | 55 | // Problem: Not trully random as pin is fairly stable. It is unfortunately connected to the ground layer (often returning 0). Would be better to connect it to a "loose wire"/bad connection |
| Siriagus | 14:b4fed570abaf | 56 | unsigned int getRandSeed() |
| Siriagus | 14:b4fed570abaf | 57 | { |
| Siriagus | 14:b4fed570abaf | 58 | unsigned int randNum = 0; |
| Siriagus | 14:b4fed570abaf | 59 | unsigned int lsb; // least significant bit |
| Siriagus | 14:b4fed570abaf | 60 | |
| Siriagus | 14:b4fed570abaf | 61 | for (unsigned int i = 0; i < 16; ++i) |
| Siriagus | 14:b4fed570abaf | 62 | { |
| Siriagus | 14:b4fed570abaf | 63 | lsb = 1 & (randomPin.read_u16()); // Read least significant bit in randomInput - value depends on noise |
| Siriagus | 14:b4fed570abaf | 64 | randNum |= (lsb << i); // Set bit nr.i to lsb in randomInput |
| Siriagus | 14:b4fed570abaf | 65 | |
| Siriagus | 14:b4fed570abaf | 66 | lsb = 1 & (randomPin2.read_u16()); |
| Siriagus | 14:b4fed570abaf | 67 | randNum |= (lsb << (16+i)); |
| Siriagus | 14:b4fed570abaf | 68 | } |
| Siriagus | 14:b4fed570abaf | 69 | |
| Siriagus | 14:b4fed570abaf | 70 | return randNum; |
| Siriagus | 14:b4fed570abaf | 71 | } |
| Siriagus | 14:b4fed570abaf | 72 | |
| Siriagus | 14:b4fed570abaf | 73 | Serial term(USBTX, USBRX); // TO DELETE - DEBUGGING ONLY |
| Siriagus | 14:b4fed570abaf | 74 | |
| Siriagus | 1:0cfe2255092a | 75 | int main() |
| Siriagus | 14:b4fed570abaf | 76 | { |
| Siriagus | 14:b4fed570abaf | 77 | srand(getRandSeed()); |
| Siriagus | 14:b4fed570abaf | 78 | |
| Siriagus | 1:0cfe2255092a | 79 | init(); |
| Siriagus | 1:0cfe2255092a | 80 | |
| Siriagus | 7:678873947b29 | 81 | Timer timer; |
| Siriagus | 7:678873947b29 | 82 | timer.start(); |
| Siriagus | 4:d6661b976359 | 83 | |
| Siriagus | 0:1f92de30d43e | 84 | while(true) |
| Siriagus | 7:678873947b29 | 85 | { |
| Siriagus | 8:9ac6a428fa26 | 86 | // We need to call Sleep() repeatedly, because periodic interrupts in InputManager will cause it to wake up every 20 ms. |
| Siriagus | 8:9ac6a428fa26 | 87 | while (timer.read() < 0.08) |
| Siriagus | 8:9ac6a428fa26 | 88 | Sleep(); |
| Siriagus | 8:9ac6a428fa26 | 89 | |
| Siriagus | 7:678873947b29 | 90 | // update |
| Siriagus | 0:1f92de30d43e | 91 | lcd->setBrightness(1.0 - ledPot); // Update brightness of screen |
| Siriagus | 7:678873947b29 | 92 | fsm->update(timer.read()); |
| Siriagus | 7:678873947b29 | 93 | input->joystick->update(); |
| Siriagus | 4:d6661b976359 | 94 | |
| Siriagus | 4:d6661b976359 | 95 | // render |
| Siriagus | 5:100d960fc6d5 | 96 | lcd->clear(); |
| Siriagus | 7:678873947b29 | 97 | fsm->render(); |
| Siriagus | 5:100d960fc6d5 | 98 | lcd->refresh(); |
| Siriagus | 1:0cfe2255092a | 99 | |
| Siriagus | 7:678873947b29 | 100 | fsm->processRequest(); // Change the state if requested. |
| Siriagus | 7:678873947b29 | 101 | |
| Siriagus | 7:678873947b29 | 102 | timer.reset(); |
| Siriagus | 0:1f92de30d43e | 103 | } |
| Siriagus | 0:1f92de30d43e | 104 | |
| Siriagus | 10:f2488a0ecab7 | 105 | cleanUp(); // Not really reached as the program never terminates. Added for completeness. |
| Siriagus | 0:1f92de30d43e | 106 | |
| Siriagus | 0:1f92de30d43e | 107 | return 0; |
| Siriagus | 3:4e3f342a135c | 108 | } |
| Siriagus | 3:4e3f342a135c | 109 | |
| Siriagus | 3:4e3f342a135c | 110 | void init() |
| Siriagus | 3:4e3f342a135c | 111 | { |
| Siriagus | 3:4e3f342a135c | 112 | // Init LCD |
| Siriagus | 3:4e3f342a135c | 113 | lcd = new N5110(p7, p8, p9, p10, p11, p13, p26); |
| Siriagus | 3:4e3f342a135c | 114 | lcd->init(); |
| Siriagus | 3:4e3f342a135c | 115 | lcd->normalMode(); |
| Siriagus | 3:4e3f342a135c | 116 | lcd->setBrightness(1.0 - ledPot); // Update brightness of screen |
| Siriagus | 3:4e3f342a135c | 117 | |
| Siriagus | 4:d6661b976359 | 118 | // Input |
| Siriagus | 8:9ac6a428fa26 | 119 | input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_H, JOY_V, JOY_BTN); |
| Siriagus | 3:4e3f342a135c | 120 | |
| Siriagus | 8:9ac6a428fa26 | 121 | fsm = new StateManager(lcd, input, TITLE_SCREEN); |
| Siriagus | 3:4e3f342a135c | 122 | } |
| Siriagus | 3:4e3f342a135c | 123 | |
| Siriagus | 3:4e3f342a135c | 124 | void cleanUp() |
| Siriagus | 3:4e3f342a135c | 125 | { |
| Siriagus | 3:4e3f342a135c | 126 | delete lcd; |
| Siriagus | 4:d6661b976359 | 127 | delete input; |
| Siriagus | 1:0cfe2255092a | 128 | } |