The world's greatest etch a sketch

Dependencies:   mbed C12832 MMA7660

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?

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