Skip to content

Commit cd18d85

Browse files
Implement UART
1 parent cf3f556 commit cd18d85

File tree

2 files changed

+179
-0
lines changed

2 files changed

+179
-0
lines changed

display_shared.h

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#ifndef __PCP_DISPLAY_SHARED_H
2+
#define __PCP_DISPLAY_SHARED_H
3+
4+
#define COMM_MAGIC 0x0702
5+
6+
typedef enum: unsigned short {
7+
GAME_ADD_PLAYER = 0x0001,
8+
GAME_START = 0x0003,
9+
GAME_STATUS_UPDATE = 0x0004,
10+
END_OF_BALL = 0x0005,
11+
BALL_PUSHED = 0x0006,
12+
SCOOP_LIGHT_LIT = 0x0007,
13+
MULTIBALL_JACKPOT = 0x0008,
14+
HURRY_UP = 0x0009,
15+
THING_HIT = 0x000a,
16+
EXTRA_BALL_GOT = 0x000b,
17+
SKILL_SHOT = 0x000c,
18+
BALL_SAVE = 0x000d,
19+
TILT_WARNING = 0x000e,
20+
TILT = 0x000f,
21+
} comm_type;
22+
23+
typedef enum: unsigned char {
24+
MODE_NONE = 0,
25+
YOU_DID_WHAT = 1,
26+
OPCOMMATHON = 2,
27+
HOUSE_MEETING = 4,
28+
FINALS = 8,
29+
} Mode;
30+
31+
32+
typedef enum: unsigned char {
33+
MULTI_NONE = 0,
34+
BAGELS = 1,
35+
PARTY_BUTTON = 2,
36+
PCP = 4,
37+
} Multiball;
38+
39+
typedef struct game_add_player {
40+
unsigned char number_of_players;
41+
} game_add_player;
42+
43+
typedef struct {
44+
unsigned char number_of_players;
45+
} game_start;
46+
47+
typedef struct {
48+
unsigned long long player_1_score;
49+
unsigned long long player_2_score;
50+
unsigned long long player_3_score;
51+
unsigned long long player_4_score;
52+
unsigned char number_of_players;
53+
unsigned char current_player;
54+
} game_status_update;
55+
56+
typedef struct {
57+
unsigned short drinks_dropped;
58+
unsigned short devcade_games;
59+
unsigned short imagine_projects;
60+
unsigned short bonus_multiplier;
61+
} end_of_ball;
62+
63+
typedef struct {
64+
Multiball multiball;
65+
unsigned char balls_pushed;
66+
} ball_pushed;
67+
68+
typedef enum {
69+
MODE = 0,
70+
MULTIBALL = 1,
71+
EXTRA_BALL = 2,
72+
MYSTERY = 3,
73+
} scoop_light_type;
74+
75+
typedef union {
76+
Mode mode;
77+
Multiball multiball;
78+
char none;
79+
} scoop_light_info;
80+
81+
typedef struct {
82+
scoop_light_type scoop_light_type;
83+
scoop_light_info scoop_light_info;
84+
} scoop_light;
85+
86+
typedef struct {
87+
Multiball current_multiball;
88+
} multiball_jackpot;
89+
// Add enum maybe?
90+
typedef struct {
91+
unsigned short which_hit;
92+
} thing_hit;
93+
94+
#endif

pinball.ino

+85
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include <Fonts/dotmatrixdisplay4pt7b.h> // Custom Font converted from https://rop.nl/truetype2gfx/ I used a dotmatrixdisplay font.
55
#include <Fonts/dotmatrixdisplay3pt7b.h>
66
#include <Fonts/dotmatrixdisplay2pt7b.h>
7+
// Ethans Communication Code
8+
#include "display_shared.h"
79

810
// Pin configuration
911
#define CLK 11 // Use this on Arduino Mega
@@ -2407,6 +2409,7 @@ void debug_animations() {
24072409
}
24082410

24092411
void setup() {
2412+
Serial1.begin(9600);
24102413
// Get Scores from 2040 later
24112414
strcpy(grand_champion, "GAR 50000");
24122415
strcpy(high_score_1, "LEO 10000");
@@ -2443,4 +2446,86 @@ void loop() {
24432446
if (attract_mode == true) {
24442447
attractMode();
24452448
}
2449+
2450+
if (Serial1.available()) {
2451+
if (Serial1.read() == 0x07 && Serial1.read() == 0x02) {
2452+
unsigned short type = Serial1.read();
2453+
type <<= 8;
2454+
type |= Serial1.read();
2455+
switch (type) {
2456+
case 0x0001: {
2457+
// Add Player
2458+
game_add_player data;
2459+
Serial.readBytes((char*)&data, sizeof(data));
2460+
break;
2461+
}
2462+
case 0x0003: {
2463+
// Game Start
2464+
game_start data;
2465+
Serial.readBytes((char*)&data, sizeof(data));
2466+
break;
2467+
}
2468+
case 0x0004: {
2469+
// Game Status Update
2470+
game_status_update data;
2471+
Serial.readBytes((char*)&data, sizeof(data));
2472+
break;
2473+
}
2474+
case 0x0005: {
2475+
// End of Ball
2476+
end_of_ball data;
2477+
Serial.readBytes((char*)&data, sizeof(data));
2478+
break;
2479+
}
2480+
case 0x0006: {
2481+
// Ball Pushed
2482+
ball_pushed data;
2483+
Serial.readBytes((char*)&data, sizeof(data));
2484+
break;
2485+
}
2486+
case 0x0007: {
2487+
// Scoop Light Lit
2488+
scoop_light data;
2489+
Serial.readBytes((char*)&data, sizeof(data));
2490+
break;
2491+
}
2492+
case 0x0008: {
2493+
// Multiball Jackpot (ETHAN TODO)
2494+
multiball_jackpot data;
2495+
Serial.readBytes((char*)&data, sizeof(data));
2496+
break;
2497+
}
2498+
case 0x0009: {
2499+
// Hurry Up (No Data)
2500+
break;
2501+
}
2502+
case 0x000a: {
2503+
// Thing Hit
2504+
thing_hit data;
2505+
Serial.readBytes((char*)&data, sizeof(data));
2506+
break;
2507+
}
2508+
case 0x000b: {
2509+
// Extra Ball Got (No Data)
2510+
break;
2511+
}
2512+
case 0x000c: {
2513+
// Skill Shot (No Data)
2514+
break;
2515+
}
2516+
case 0x000d: {
2517+
// Ball Save (No Data)
2518+
break;
2519+
}
2520+
case 0x000e: {
2521+
// Tilt Warning (No Data)
2522+
break;
2523+
}
2524+
case 0x000f: {
2525+
// Tilt! (No Data)
2526+
break;
2527+
}
2528+
}
2529+
}
2530+
}
24462531
}

0 commit comments

Comments
 (0)