The world's greatest etch a sketch
Dependencies: mbed C12832 MMA7660
main.cpp@2:aed0788e8f96, 2014-02-20 (annotated)
- Committer:
- jlaqua
- Date:
- Thu Feb 20 02:01:06 2014 +0000
- Revision:
- 2:aed0788e8f96
- Parent:
- 1:65aea95224b8
- Child:
- 3:c385027fcc0b
added pong and menu
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jlaqua | 0:00653d8e42a1 | 1 | #include "mbed.h" |
jlaqua | 1:65aea95224b8 | 2 | #include "C12832.h" |
jlaqua | 1:65aea95224b8 | 3 | #include "MMA7660.h" |
jlaqua | 0:00653d8e42a1 | 4 | |
jlaqua | 1:65aea95224b8 | 5 | AnalogIn potX(p20); |
jlaqua | 1:65aea95224b8 | 6 | AnalogIn potY(p19); |
jlaqua | 1:65aea95224b8 | 7 | MMA7660 acc(p28, p27); |
jlaqua | 1:65aea95224b8 | 8 | C12832 lcd(p5, p7, p6, p8, p11); |
jlaqua | 0:00653d8e42a1 | 9 | |
jlaqua | 2:aed0788e8f96 | 10 | DigitalIn play(p14); |
jlaqua | 2:aed0788e8f96 | 11 | DigitalIn up(p15); |
jlaqua | 2:aed0788e8f96 | 12 | DigitalIn down(p12); |
jlaqua | 2:aed0788e8f96 | 13 | |
jlaqua | 2:aed0788e8f96 | 14 | static const int DOWN = 0; |
jlaqua | 2:aed0788e8f96 | 15 | static const int UP = 1; |
jlaqua | 2:aed0788e8f96 | 16 | static const int LEFTUP = 0; |
jlaqua | 2:aed0788e8f96 | 17 | static const int LEFTDOWN = 1; |
jlaqua | 2:aed0788e8f96 | 18 | static const int RIGHTUP = 2; |
jlaqua | 2:aed0788e8f96 | 19 | static const int RIGHTDOWN = 3; |
jlaqua | 2:aed0788e8f96 | 20 | static const int START = 4; |
jlaqua | 2:aed0788e8f96 | 21 | int badGuy = 12; |
jlaqua | 2:aed0788e8f96 | 22 | int badGuyState = DOWN; |
jlaqua | 2:aed0788e8f96 | 23 | int goodGuy; |
jlaqua | 2:aed0788e8f96 | 24 | int ballX; |
jlaqua | 2:aed0788e8f96 | 25 | int ballY; |
jlaqua | 2:aed0788e8f96 | 26 | int ballState = START; |
jlaqua | 2:aed0788e8f96 | 27 | |
jlaqua | 2:aed0788e8f96 | 28 | void pong(void) |
jlaqua | 2:aed0788e8f96 | 29 | { |
jlaqua | 2:aed0788e8f96 | 30 | while(1) { |
jlaqua | 2:aed0788e8f96 | 31 | switch(badGuyState) { |
jlaqua | 2:aed0788e8f96 | 32 | case DOWN: |
jlaqua | 2:aed0788e8f96 | 33 | badGuy++; |
jlaqua | 2:aed0788e8f96 | 34 | if (badGuy+5 >= lcd.height()-1) |
jlaqua | 2:aed0788e8f96 | 35 | badGuyState = UP; |
jlaqua | 2:aed0788e8f96 | 36 | break; |
jlaqua | 2:aed0788e8f96 | 37 | case UP: |
jlaqua | 2:aed0788e8f96 | 38 | badGuy--; |
jlaqua | 2:aed0788e8f96 | 39 | if (badGuy <= 0) |
jlaqua | 2:aed0788e8f96 | 40 | badGuyState = DOWN; |
jlaqua | 2:aed0788e8f96 | 41 | break; |
jlaqua | 2:aed0788e8f96 | 42 | } |
jlaqua | 2:aed0788e8f96 | 43 | |
jlaqua | 2:aed0788e8f96 | 44 | goodGuy -= up; |
jlaqua | 2:aed0788e8f96 | 45 | goodGuy += down; |
jlaqua | 2:aed0788e8f96 | 46 | if (goodGuy < 0) |
jlaqua | 2:aed0788e8f96 | 47 | goodGuy = 0; |
jlaqua | 2:aed0788e8f96 | 48 | if (goodGuy + 5 > lcd.width()-1) |
jlaqua | 2:aed0788e8f96 | 49 | goodGuy = lcd.width()-6; |
jlaqua | 2:aed0788e8f96 | 50 | |
jlaqua | 2:aed0788e8f96 | 51 | switch(ballState) { |
jlaqua | 2:aed0788e8f96 | 52 | case LEFTUP: |
jlaqua | 2:aed0788e8f96 | 53 | ballX--; |
jlaqua | 2:aed0788e8f96 | 54 | ballY--; |
jlaqua | 2:aed0788e8f96 | 55 | if (ballX <= 0) { |
jlaqua | 2:aed0788e8f96 | 56 | if ((ballY >= badGuy) && (ballY <= badGuy+5)) |
jlaqua | 2:aed0788e8f96 | 57 | ballState = RIGHTUP; |
jlaqua | 2:aed0788e8f96 | 58 | else |
jlaqua | 2:aed0788e8f96 | 59 | ballState = START; |
jlaqua | 2:aed0788e8f96 | 60 | } |
jlaqua | 2:aed0788e8f96 | 61 | if (ballY <= 0) |
jlaqua | 2:aed0788e8f96 | 62 | ballState = LEFTDOWN; |
jlaqua | 2:aed0788e8f96 | 63 | break; |
jlaqua | 2:aed0788e8f96 | 64 | case LEFTDOWN: |
jlaqua | 2:aed0788e8f96 | 65 | ballX--; |
jlaqua | 2:aed0788e8f96 | 66 | ballY++; |
jlaqua | 2:aed0788e8f96 | 67 | if (ballX <= 0) { |
jlaqua | 2:aed0788e8f96 | 68 | if ((ballY >= badGuy) && (ballY <= badGuy+5)) |
jlaqua | 2:aed0788e8f96 | 69 | ballState = RIGHTDOWN; |
jlaqua | 2:aed0788e8f96 | 70 | else |
jlaqua | 2:aed0788e8f96 | 71 | ballState = START; |
jlaqua | 2:aed0788e8f96 | 72 | } |
jlaqua | 2:aed0788e8f96 | 73 | if (ballY >= lcd.height()-1) |
jlaqua | 2:aed0788e8f96 | 74 | ballState = LEFTUP; |
jlaqua | 2:aed0788e8f96 | 75 | break; |
jlaqua | 2:aed0788e8f96 | 76 | case RIGHTUP: |
jlaqua | 2:aed0788e8f96 | 77 | ballX++; |
jlaqua | 2:aed0788e8f96 | 78 | ballY--; |
jlaqua | 2:aed0788e8f96 | 79 | if (ballX >= lcd.width()-1) { |
jlaqua | 2:aed0788e8f96 | 80 | if ((ballY >= goodGuy) && (ballY <= goodGuy+5)) |
jlaqua | 2:aed0788e8f96 | 81 | ballState = LEFTUP; |
jlaqua | 2:aed0788e8f96 | 82 | else |
jlaqua | 2:aed0788e8f96 | 83 | ballState = START; |
jlaqua | 2:aed0788e8f96 | 84 | } |
jlaqua | 2:aed0788e8f96 | 85 | if (ballY <= 0) |
jlaqua | 2:aed0788e8f96 | 86 | ballState = RIGHTDOWN; |
jlaqua | 2:aed0788e8f96 | 87 | break; |
jlaqua | 2:aed0788e8f96 | 88 | case RIGHTDOWN: |
jlaqua | 2:aed0788e8f96 | 89 | ballX++; |
jlaqua | 2:aed0788e8f96 | 90 | ballY++; |
jlaqua | 2:aed0788e8f96 | 91 | if (ballX >= lcd.width()-1) { |
jlaqua | 2:aed0788e8f96 | 92 | if ((ballY >= goodGuy) && (ballY <= goodGuy+5)) |
jlaqua | 2:aed0788e8f96 | 93 | ballState = LEFTDOWN; |
jlaqua | 2:aed0788e8f96 | 94 | else |
jlaqua | 2:aed0788e8f96 | 95 | ballState = START; |
jlaqua | 2:aed0788e8f96 | 96 | } |
jlaqua | 2:aed0788e8f96 | 97 | if (ballY >= lcd.height()-1) |
jlaqua | 2:aed0788e8f96 | 98 | ballState = RIGHTUP; |
jlaqua | 2:aed0788e8f96 | 99 | break; |
jlaqua | 2:aed0788e8f96 | 100 | case START: |
jlaqua | 2:aed0788e8f96 | 101 | ballX = lcd.width()/2; |
jlaqua | 2:aed0788e8f96 | 102 | ballY = 0; |
jlaqua | 2:aed0788e8f96 | 103 | goodGuy = 12; |
jlaqua | 2:aed0788e8f96 | 104 | if (play) |
jlaqua | 2:aed0788e8f96 | 105 | ballState = RIGHTDOWN; |
jlaqua | 2:aed0788e8f96 | 106 | break; |
jlaqua | 2:aed0788e8f96 | 107 | } |
jlaqua | 2:aed0788e8f96 | 108 | |
jlaqua | 2:aed0788e8f96 | 109 | // Draw stuff |
jlaqua | 2:aed0788e8f96 | 110 | lcd.cls(); // clear screen |
jlaqua | 2:aed0788e8f96 | 111 | lcd.circle(ballX, ballY, 2, 1); |
jlaqua | 2:aed0788e8f96 | 112 | lcd.line(0, badGuy, 0, badGuy+5, 1); |
jlaqua | 2:aed0788e8f96 | 113 | lcd.line(lcd.width()-1, goodGuy, lcd.width()-1, goodGuy+5, 1); |
jlaqua | 2:aed0788e8f96 | 114 | lcd.copy_to_lcd(); |
jlaqua | 2:aed0788e8f96 | 115 | wait(0.02); |
jlaqua | 2:aed0788e8f96 | 116 | } |
jlaqua | 2:aed0788e8f96 | 117 | } |
jlaqua | 2:aed0788e8f96 | 118 | |
jlaqua | 2:aed0788e8f96 | 119 | void etchASketch() |
jlaqua | 2:aed0788e8f96 | 120 | { |
jlaqua | 2:aed0788e8f96 | 121 | int counter = 0; |
jlaqua | 0:00653d8e42a1 | 122 | while(1) { |
jlaqua | 1:65aea95224b8 | 123 | int x = (int)((1-potX) * lcd.width()); |
jlaqua | 1:65aea95224b8 | 124 | int y = (int)((1-potY) * lcd.height()); |
jlaqua | 1:65aea95224b8 | 125 | lcd.pixel(x, y, 1); |
jlaqua | 1:65aea95224b8 | 126 | lcd.copy_to_lcd(); |
jlaqua | 2:aed0788e8f96 | 127 | if (counter > 100) { |
jlaqua | 2:aed0788e8f96 | 128 | if ((acc.x() > 1.3) || (acc.y() > 1.3)) |
jlaqua | 2:aed0788e8f96 | 129 | lcd.cls(); |
jlaqua | 2:aed0788e8f96 | 130 | counter = 0; |
jlaqua | 2:aed0788e8f96 | 131 | } |
jlaqua | 2:aed0788e8f96 | 132 | counter++; |
jlaqua | 0:00653d8e42a1 | 133 | } |
jlaqua | 0:00653d8e42a1 | 134 | } |
jlaqua | 2:aed0788e8f96 | 135 | |
jlaqua | 2:aed0788e8f96 | 136 | int main() |
jlaqua | 2:aed0788e8f96 | 137 | { |
jlaqua | 2:aed0788e8f96 | 138 | int choice = 0; |
jlaqua | 2:aed0788e8f96 | 139 | lcd.printf("\n Etch-A-Sketch\n"); |
jlaqua | 2:aed0788e8f96 | 140 | lcd.printf(" Pong"); |
jlaqua | 2:aed0788e8f96 | 141 | while(1) { |
jlaqua | 2:aed0788e8f96 | 142 | if (up) |
jlaqua | 2:aed0788e8f96 | 143 | choice = 0; |
jlaqua | 2:aed0788e8f96 | 144 | if (down) |
jlaqua | 2:aed0788e8f96 | 145 | choice = 1; |
jlaqua | 2:aed0788e8f96 | 146 | if (play) { |
jlaqua | 2:aed0788e8f96 | 147 | lcd.cls(); |
jlaqua | 2:aed0788e8f96 | 148 | switch (choice) { |
jlaqua | 2:aed0788e8f96 | 149 | case 0: |
jlaqua | 2:aed0788e8f96 | 150 | etchASketch(); |
jlaqua | 2:aed0788e8f96 | 151 | break; |
jlaqua | 2:aed0788e8f96 | 152 | case 1: |
jlaqua | 2:aed0788e8f96 | 153 | pong(); |
jlaqua | 2:aed0788e8f96 | 154 | break; |
jlaqua | 2:aed0788e8f96 | 155 | } |
jlaqua | 2:aed0788e8f96 | 156 | } |
jlaqua | 2:aed0788e8f96 | 157 | lcd.fillcircle(12,13+!choice*8,2,0); |
jlaqua | 2:aed0788e8f96 | 158 | lcd.fillcircle(12,13+choice*8,2,1); |
jlaqua | 2:aed0788e8f96 | 159 | lcd.copy_to_lcd(); |
jlaqua | 2:aed0788e8f96 | 160 | } |
jlaqua | 2:aed0788e8f96 | 161 | //etchASketch(); |
jlaqua | 2:aed0788e8f96 | 162 | //pong(); |
jlaqua | 2:aed0788e8f96 | 163 | } |