RETRO ROBOT E

Committer:
RLRiedinger
Date:
Mon Mar 02 04:20:45 2015 +0000
Revision:
0:4837c9695a02
RETRO ROBOT E

Who changed what in which revision?

UserRevisionLine numberNew 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 };