RETRO ROBOT E
ROBOT.h@0:4837c9695a02, 2015-03-02 (annotated)
- Committer:
- RLRiedinger
- Date:
- Mon Mar 02 04:20:45 2015 +0000
- Revision:
- 0:4837c9695a02
RETRO ROBOT E
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RLRiedinger | 0:4837c9695a02 | 1 | #include "mbed.h" |
RLRiedinger | 0:4837c9695a02 | 2 | #include "SC16IS750.h" |
RLRiedinger | 0:4837c9695a02 | 3 | #include "DisplayN18.h" |
RLRiedinger | 0:4837c9695a02 | 4 | |
RLRiedinger | 0:4837c9695a02 | 5 | #define D_SCL P0_4 |
RLRiedinger | 0:4837c9695a02 | 6 | #define D_SDA P0_5 |
RLRiedinger | 0:4837c9695a02 | 7 | #define ESP8266_RST P0_10 |
RLRiedinger | 0:4837c9695a02 | 8 | #define RETRO_GAME |
RLRiedinger | 0:4837c9695a02 | 9 | #define RETRO_GAME0 |
RLRiedinger | 0:4837c9695a02 | 10 | |
RLRiedinger | 0:4837c9695a02 | 11 | #define PI (3.1415926535f) |
RLRiedinger | 0:4837c9695a02 | 12 | #define HALF_PI (0.5f * PI) |
RLRiedinger | 0:4837c9695a02 | 13 | #define TWO_PI (2.0f * PI) |
RLRiedinger | 0:4837c9695a02 | 14 | #define TWO_PI_INV (1.0f / TWO_PI) |
RLRiedinger | 0:4837c9695a02 | 15 | |
RLRiedinger | 0:4837c9695a02 | 16 | #pragma once |
RLRiedinger | 0:4837c9695a02 | 17 | |
RLRiedinger | 0:4837c9695a02 | 18 | class ROBOT { |
RLRiedinger | 0:4837c9695a02 | 19 | |
RLRiedinger | 0:4837c9695a02 | 20 | static const char* LOSE_1; |
RLRiedinger | 0:4837c9695a02 | 21 | static const char* LOSE_2; |
RLRiedinger | 0:4837c9695a02 | 22 | static const char* SPLASH_1; |
RLRiedinger | 0:4837c9695a02 | 23 | static const char* SPLASH_2; |
RLRiedinger | 0:4837c9695a02 | 24 | |
RLRiedinger | 0:4837c9695a02 | 25 | static const int BALL_RADIUS = 3; |
RLRiedinger | 0:4837c9695a02 | 26 | static const int PADDLE_WIDTH = 38; |
RLRiedinger | 0:4837c9695a02 | 27 | static const int PADDLE_HEIGHT = 4; |
RLRiedinger | 0:4837c9695a02 | 28 | static const int PADDLE_SPEED = 4; |
RLRiedinger | 0:4837c9695a02 | 29 | static const int BOUNCE_SOUND_TICKS = 2; |
RLRiedinger | 0:4837c9695a02 | 30 | static const int GRAPH_HEIGHT = 40; |
RLRiedinger | 0:4837c9695a02 | 31 | static const int GRAPH_SPACING = 2; |
RLRiedinger | 0:4837c9695a02 | 32 | static const int BoxWidth = 50; |
RLRiedinger | 0:4837c9695a02 | 33 | static const int BoxHeight = 25; |
RLRiedinger | 0:4837c9695a02 | 34 | |
RLRiedinger | 0:4837c9695a02 | 35 | static const char I2C_ADDR = 0x1C << 1; |
RLRiedinger | 0:4837c9695a02 | 36 | static const int Initial_Button_Timeout = 1500; |
RLRiedinger | 0:4837c9695a02 | 37 | |
RLRiedinger | 0:4837c9695a02 | 38 | int ballX; |
RLRiedinger | 0:4837c9695a02 | 39 | int ballY; |
RLRiedinger | 0:4837c9695a02 | 40 | int circleX; |
RLRiedinger | 0:4837c9695a02 | 41 | int circleY; |
RLRiedinger | 0:4837c9695a02 | 42 | int ballSpeedX; |
RLRiedinger | 0:4837c9695a02 | 43 | int ballSpeedY; |
RLRiedinger | 0:4837c9695a02 | 44 | int paddleX; |
RLRiedinger | 0:4837c9695a02 | 45 | int pwmTicksLeft; |
RLRiedinger | 0:4837c9695a02 | 46 | int lives; |
RLRiedinger | 0:4837c9695a02 | 47 | int graphX; |
RLRiedinger | 0:4837c9695a02 | 48 | bool mode; |
RLRiedinger | 0:4837c9695a02 | 49 | bool lastUp; |
RLRiedinger | 0:4837c9695a02 | 50 | bool lastDown; |
RLRiedinger | 0:4837c9695a02 | 51 | unsigned short colors[3]; |
RLRiedinger | 0:4837c9695a02 | 52 | |
RLRiedinger | 0:4837c9695a02 | 53 | DigitalIn left; |
RLRiedinger | 0:4837c9695a02 | 54 | DigitalIn right; |
RLRiedinger | 0:4837c9695a02 | 55 | DigitalIn down; |
RLRiedinger | 0:4837c9695a02 | 56 | DigitalIn up; |
RLRiedinger | 0:4837c9695a02 | 57 | DigitalIn square; |
RLRiedinger | 0:4837c9695a02 | 58 | DigitalIn circle; |
RLRiedinger | 0:4837c9695a02 | 59 | DigitalOut led1; |
RLRiedinger | 0:4837c9695a02 | 60 | DigitalOut led2; |
RLRiedinger | 0:4837c9695a02 | 61 | |
RLRiedinger | 0:4837c9695a02 | 62 | PwmOut pwm; |
RLRiedinger | 0:4837c9695a02 | 63 | |
RLRiedinger | 0:4837c9695a02 | 64 | DisplayN18 disp; |
RLRiedinger | 0:4837c9695a02 | 65 | |
RLRiedinger | 0:4837c9695a02 | 66 | int echo_comands; |
RLRiedinger | 0:4837c9695a02 | 67 | |
RLRiedinger | 0:4837c9695a02 | 68 | int DEBUG; |
RLRiedinger | 0:4837c9695a02 | 69 | |
RLRiedinger | 0:4837c9695a02 | 70 | #define IPD 1 |
RLRiedinger | 0:4837c9695a02 | 71 | #define PROMPT 2 |
RLRiedinger | 0:4837c9695a02 | 72 | #define BUSY 3 |
RLRiedinger | 0:4837c9695a02 | 73 | #define OK 4 |
RLRiedinger | 0:4837c9695a02 | 74 | #define ERROR 5 |
RLRiedinger | 0:4837c9695a02 | 75 | #define QUIT 6 |
RLRiedinger | 0:4837c9695a02 | 76 | |
RLRiedinger | 0:4837c9695a02 | 77 | #define NMATCHES (sizeof(matchtab) / sizeof(match)) |
RLRiedinger | 0:4837c9695a02 | 78 | |
RLRiedinger | 0:4837c9695a02 | 79 | char * Address_T; |
RLRiedinger | 0:4837c9695a02 | 80 | |
RLRiedinger | 0:4837c9695a02 | 81 | #if (0) |
RLRiedinger | 0:4837c9695a02 | 82 | char * Address_U = "192.168.0.14"; |
RLRiedinger | 0:4837c9695a02 | 83 | char * Address_V = "192.168.0.22"; |
RLRiedinger | 0:4837c9695a02 | 84 | char * Address_W = "192.168.0.23"; |
RLRiedinger | 0:4837c9695a02 | 85 | #endif |
RLRiedinger | 0:4837c9695a02 | 86 | |
RLRiedinger | 0:4837c9695a02 | 87 | char * Address; |
RLRiedinger | 0:4837c9695a02 | 88 | |
RLRiedinger | 0:4837c9695a02 | 89 | static const char* SSID; |
RLRiedinger | 0:4837c9695a02 | 90 | static const char* PASSWORD; |
RLRiedinger | 0:4837c9695a02 | 91 | |
RLRiedinger | 0:4837c9695a02 | 92 | #ifndef AUTO_START |
RLRiedinger | 0:4837c9695a02 | 93 | #if (0) |
RLRiedinger | 0:4837c9695a02 | 94 | const char ODOMETER[] = { '-', '|', '/', '-', '\\' }; |
RLRiedinger | 0:4837c9695a02 | 95 | #endif |
RLRiedinger | 0:4837c9695a02 | 96 | #endif |
RLRiedinger | 0:4837c9695a02 | 97 | |
RLRiedinger | 0:4837c9695a02 | 98 | // Variables for Heartbeat and Status monitoring |
RLRiedinger | 0:4837c9695a02 | 99 | |
RLRiedinger | 0:4837c9695a02 | 100 | Ticker heartbeat; |
RLRiedinger | 0:4837c9695a02 | 101 | |
RLRiedinger | 0:4837c9695a02 | 102 | bool heartbeatflag; |
RLRiedinger | 0:4837c9695a02 | 103 | |
RLRiedinger | 0:4837c9695a02 | 104 | char BUFFER[21]; |
RLRiedinger | 0:4837c9695a02 | 105 | char IPD_BUFFER[81]; |
RLRiedinger | 0:4837c9695a02 | 106 | char UART_BUFFER[81]; |
RLRiedinger | 0:4837c9695a02 | 107 | char FORMAT_BUFFER[81]; |
RLRiedinger | 0:4837c9695a02 | 108 | |
RLRiedinger | 0:4837c9695a02 | 109 | I2C i2c; |
RLRiedinger | 0:4837c9695a02 | 110 | SC16IS750_I2C serial_bridge1; |
RLRiedinger | 0:4837c9695a02 | 111 | SC16IS750_I2C serial_bridge2; |
RLRiedinger | 0:4837c9695a02 | 112 | DigitalOut esp8266_rst; |
RLRiedinger | 0:4837c9695a02 | 113 | |
RLRiedinger | 0:4837c9695a02 | 114 | char * pIPD_BUFFER; |
RLRiedinger | 0:4837c9695a02 | 115 | |
RLRiedinger | 0:4837c9695a02 | 116 | int mPROMPT, mIPD, mCOUNT, COUNT, uCOUNT, mCOLON, First; |
RLRiedinger | 0:4837c9695a02 | 117 | |
RLRiedinger | 0:4837c9695a02 | 118 | double CurrentTime, OldTime, ElapsedTime, Angle, Speed, R; |
RLRiedinger | 0:4837c9695a02 | 119 | |
RLRiedinger | 0:4837c9695a02 | 120 | uint64_t leftencoder, rightencoder, oldleftencoder, oldrightencoder; |
RLRiedinger | 0:4837c9695a02 | 121 | |
RLRiedinger | 0:4837c9695a02 | 122 | double convert(char* buffer); |
RLRiedinger | 0:4837c9695a02 | 123 | void printDouble(double value, int , int y); |
RLRiedinger | 0:4837c9695a02 | 124 | |
RLRiedinger | 0:4837c9695a02 | 125 | void drawAxes(); |
RLRiedinger | 0:4837c9695a02 | 126 | void drawPoint(int axis, double value); |
RLRiedinger | 0:4837c9695a02 | 127 | void checkGraphReset(); |
RLRiedinger | 0:4837c9695a02 | 128 | |
RLRiedinger | 0:4837c9695a02 | 129 | void initialize(); |
RLRiedinger | 0:4837c9695a02 | 130 | void initializeBall(); |
RLRiedinger | 0:4837c9695a02 | 131 | |
RLRiedinger | 0:4837c9695a02 | 132 | void drawString(const char* str, int y); |
RLRiedinger | 0:4837c9695a02 | 133 | |
RLRiedinger | 0:4837c9695a02 | 134 | void clearPaddle(); |
RLRiedinger | 0:4837c9695a02 | 135 | void drawPaddle(); |
RLRiedinger | 0:4837c9695a02 | 136 | void updatePaddle(); |
RLRiedinger | 0:4837c9695a02 | 137 | |
RLRiedinger | 0:4837c9695a02 | 138 | void clearBall(); |
RLRiedinger | 0:4837c9695a02 | 139 | void drawBall(); |
RLRiedinger | 0:4837c9695a02 | 140 | void updateBall(); |
RLRiedinger | 0:4837c9695a02 | 141 | |
RLRiedinger | 0:4837c9695a02 | 142 | void checkButtons(); |
RLRiedinger | 0:4837c9695a02 | 143 | void checkCollision(); |
RLRiedinger | 0:4837c9695a02 | 144 | void checkPwm(); |
RLRiedinger | 0:4837c9695a02 | 145 | void checkLives(); |
RLRiedinger | 0:4837c9695a02 | 146 | |
RLRiedinger | 0:4837c9695a02 | 147 | public: |
RLRiedinger | 0:4837c9695a02 | 148 | |
RLRiedinger | 0:4837c9695a02 | 149 | ROBOT(); |
RLRiedinger | 0:4837c9695a02 | 150 | |
RLRiedinger | 0:4837c9695a02 | 151 | void showSplashScreen(); |
RLRiedinger | 0:4837c9695a02 | 152 | void tick(); |
RLRiedinger | 0:4837c9695a02 | 153 | |
RLRiedinger | 0:4837c9695a02 | 154 | void serial_print1(char * BUFFER); |
RLRiedinger | 0:4837c9695a02 | 155 | void serial_print2(char * BUFFER); |
RLRiedinger | 0:4837c9695a02 | 156 | void debug_print(unsigned int line, const char* function); |
RLRiedinger | 0:4837c9695a02 | 157 | void debug_print_string(unsigned int line, const char* function, char * pBUFFER); |
RLRiedinger | 0:4837c9695a02 | 158 | void debug_print2(unsigned int line, const char* function); |
RLRiedinger | 0:4837c9695a02 | 159 | void debug_print_string2(unsigned int line, const char* function, char * pBUFFER); |
RLRiedinger | 0:4837c9695a02 | 160 | void show_menu(void); |
RLRiedinger | 0:4837c9695a02 | 161 | void blink (DigitalOut LED); |
RLRiedinger | 0:4837c9695a02 | 162 | void pulse(void); |
RLRiedinger | 0:4837c9695a02 | 163 | void heartbeat_start(void); |
RLRiedinger | 0:4837c9695a02 | 164 | void heartbeat_stop(void); |
RLRiedinger | 0:4837c9695a02 | 165 | void ESP8266_reset(void); |
RLRiedinger | 0:4837c9695a02 | 166 | void reset_matchtab(void); |
RLRiedinger | 0:4837c9695a02 | 167 | int match_RESPONSES(char c, struct match table[], int n); |
RLRiedinger | 0:4837c9695a02 | 168 | int echo(int show, int timeout); |
RLRiedinger | 0:4837c9695a02 | 169 | double Hill(double x); |
RLRiedinger | 0:4837c9695a02 | 170 | double FastSin(double x); |
RLRiedinger | 0:4837c9695a02 | 171 | double FastCos(double x); |
RLRiedinger | 0:4837c9695a02 | 172 | int process_IPD(char c); |
RLRiedinger | 0:4837c9695a02 | 173 | void process_buttons(void); |
RLRiedinger | 0:4837c9695a02 | 174 | int terminal_emulator(int echo_comands, int timeout); |
RLRiedinger | 0:4837c9695a02 | 175 | void DrawBox(void); |
RLRiedinger | 0:4837c9695a02 | 176 | int test(void); |
RLRiedinger | 0:4837c9695a02 | 177 | void test2(void); |
RLRiedinger | 0:4837c9695a02 | 178 | int get_options(void); |
RLRiedinger | 0:4837c9695a02 | 179 | |
RLRiedinger | 0:4837c9695a02 | 180 | }; |