Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed
Tetris/main.cpp@18:cf74968078ea, 2022-12-01 (annotated)
- Committer:
- jstephens78
- Date:
- Thu Dec 01 01:46:22 2022 +0000
- Revision:
- 18:cf74968078ea
- Parent:
- 15:e9f3b72b7486
merge
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| jsanchez307 | 15:e9f3b72b7486 | 1 | #include "mbed.h" |
| jsanchez307 | 15:e9f3b72b7486 | 2 | #include "Game.h" |
| jsanchez307 | 15:e9f3b72b7486 | 3 | //#include "PinDetect.h" |
| jsanchez307 | 15:e9f3b72b7486 | 4 | //#include "Speaker.h" |
| jsanchez307 | 15:e9f3b72b7486 | 5 | //#include "TextLCD.h" |
| jsanchez307 | 15:e9f3b72b7486 | 6 | //#include "Shiftbrite.h" |
| jsanchez307 | 15:e9f3b72b7486 | 7 | //#include "SDFileSystem.h" |
| jsanchez307 | 15:e9f3b72b7486 | 8 | #include "wave_player.h" |
| jsanchez307 | 15:e9f3b72b7486 | 9 | #include "rtos.h" |
| jsanchez307 | 15:e9f3b72b7486 | 10 | |
| jsanchez307 | 15:e9f3b72b7486 | 11 | uLCD_4DGL uLCD(p28, p27, p29); |
| jsanchez307 | 15:e9f3b72b7486 | 12 | //TextLCD textLCD(p26, p25, p24, p23, p22, p15); |
| jsanchez307 | 15:e9f3b72b7486 | 13 | //Speaker mySpeaker(p21); |
| jsanchez307 | 15:e9f3b72b7486 | 14 | //Shiftbrite myShiftbrite(p9, p10, p11, p12, p13); |
| jsanchez307 | 15:e9f3b72b7486 | 15 | //SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card |
| jsanchez307 | 15:e9f3b72b7486 | 16 | Serial pc(USBTX, USBRX); |
| jsanchez307 | 15:e9f3b72b7486 | 17 | |
| jsanchez307 | 15:e9f3b72b7486 | 18 | PinDetect LEFT_KEY(p16); // need to use NavSwitch for this |
| jsanchez307 | 15:e9f3b72b7486 | 19 | PinDetect RIGHT_KEY(p19); |
| jsanchez307 | 15:e9f3b72b7486 | 20 | PinDetect ROTATE_KEY(p17); |
| jsanchez307 | 15:e9f3b72b7486 | 21 | PinDetect DOWN_KEY(p30); |
| jsanchez307 | 15:e9f3b72b7486 | 22 | |
| jsanchez307 | 15:e9f3b72b7486 | 23 | int SinglePiecePoints = 50; |
| jsanchez307 | 15:e9f3b72b7486 | 24 | int LineClearPoints = 200; |
| jsanchez307 | 15:e9f3b72b7486 | 25 | int key_input = 0; |
| jsanchez307 | 15:e9f3b72b7486 | 26 | bool gameStarted = false; |
| jsanchez307 | 15:e9f3b72b7486 | 27 | void input_left() // FIX |
| jsanchez307 | 15:e9f3b72b7486 | 28 | { |
| jsanchez307 | 15:e9f3b72b7486 | 29 | if(!gameStarted) |
| jsanchez307 | 15:e9f3b72b7486 | 30 | { gameStarted=true; |
| jsanchez307 | 15:e9f3b72b7486 | 31 | return; |
| jsanchez307 | 15:e9f3b72b7486 | 32 | } |
| jsanchez307 | 15:e9f3b72b7486 | 33 | key_input = 1; |
| jsanchez307 | 15:e9f3b72b7486 | 34 | //mySpeaker.PlayNote(400.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 35 | //mySpeaker.PlayNote(500.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 36 | } |
| jsanchez307 | 15:e9f3b72b7486 | 37 | |
| jsanchez307 | 15:e9f3b72b7486 | 38 | void input_right() |
| jsanchez307 | 15:e9f3b72b7486 | 39 | { |
| jsanchez307 | 15:e9f3b72b7486 | 40 | if(!gameStarted) |
| jsanchez307 | 15:e9f3b72b7486 | 41 | { gameStarted=true; |
| jsanchez307 | 15:e9f3b72b7486 | 42 | return; |
| jsanchez307 | 15:e9f3b72b7486 | 43 | } |
| jsanchez307 | 15:e9f3b72b7486 | 44 | key_input = 2; |
| jsanchez307 | 15:e9f3b72b7486 | 45 | //mySpeaker.PlayNote(400.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 46 | //mySpeaker.PlayNote(500.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 47 | } |
| jsanchez307 | 15:e9f3b72b7486 | 48 | |
| jsanchez307 | 15:e9f3b72b7486 | 49 | void input_rotate() |
| jsanchez307 | 15:e9f3b72b7486 | 50 | { |
| jsanchez307 | 15:e9f3b72b7486 | 51 | if(!gameStarted) |
| jsanchez307 | 15:e9f3b72b7486 | 52 | { gameStarted=true; |
| jsanchez307 | 15:e9f3b72b7486 | 53 | return; |
| jsanchez307 | 15:e9f3b72b7486 | 54 | } |
| jsanchez307 | 15:e9f3b72b7486 | 55 | key_input = 3; |
| jsanchez307 | 15:e9f3b72b7486 | 56 | /*mySpeaker.PlayNote(600.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 57 | mySpeaker.PlayNote(700.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 58 | mySpeaker.PlayNote(800.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 59 | mySpeaker.PlayNote(900.0,0.05,0.025);*/ |
| jsanchez307 | 15:e9f3b72b7486 | 60 | } |
| jsanchez307 | 15:e9f3b72b7486 | 61 | |
| jsanchez307 | 15:e9f3b72b7486 | 62 | void input_down() |
| jsanchez307 | 15:e9f3b72b7486 | 63 | { |
| jsanchez307 | 15:e9f3b72b7486 | 64 | if(!gameStarted) |
| jsanchez307 | 15:e9f3b72b7486 | 65 | { gameStarted=true; |
| jsanchez307 | 15:e9f3b72b7486 | 66 | return; |
| jsanchez307 | 15:e9f3b72b7486 | 67 | } |
| jsanchez307 | 15:e9f3b72b7486 | 68 | key_input=4; |
| jsanchez307 | 15:e9f3b72b7486 | 69 | /*mySpeaker.PlayNote(500.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 70 | mySpeaker.PlayNote(1500.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 71 | mySpeaker.PlayNote(500.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 72 | mySpeaker.PlayNote(1500.0,0.05,0.025);*/ |
| jsanchez307 | 15:e9f3b72b7486 | 73 | } |
| jsanchez307 | 15:e9f3b72b7486 | 74 | |
| jsanchez307 | 15:e9f3b72b7486 | 75 | void clear_board() |
| jsanchez307 | 15:e9f3b72b7486 | 76 | { |
| jsanchez307 | 15:e9f3b72b7486 | 77 | uLCD.filled_rectangle(20,0,79,128,0); |
| jsanchez307 | 15:e9f3b72b7486 | 78 | } |
| jsanchez307 | 15:e9f3b72b7486 | 79 | |
| jsanchez307 | 15:e9f3b72b7486 | 80 | void clear_next_piece() |
| jsanchez307 | 15:e9f3b72b7486 | 81 | { |
| jsanchez307 | 15:e9f3b72b7486 | 82 | uLCD.filled_rectangle(92,20,122,50,0); |
| jsanchez307 | 15:e9f3b72b7486 | 83 | } |
| jsanchez307 | 15:e9f3b72b7486 | 84 | |
| jsanchez307 | 15:e9f3b72b7486 | 85 | /* |
| jsanchez307 | 15:e9f3b72b7486 | 86 | void UpdateGameStatus(int points,int lines) |
| jsanchez307 | 15:e9f3b72b7486 | 87 | { |
| jsanchez307 | 15:e9f3b72b7486 | 88 | textLCD.locate(7,0); |
| jsanchez307 | 15:e9f3b72b7486 | 89 | textLCD.printf("%d",points); |
| jsanchez307 | 15:e9f3b72b7486 | 90 | textLCD.locate(13,1); |
| jsanchez307 | 15:e9f3b72b7486 | 91 | textLCD.printf("%d",lines); |
| jsanchez307 | 15:e9f3b72b7486 | 92 | }*/ |
| jsanchez307 | 15:e9f3b72b7486 | 93 | |
| jsanchez307 | 15:e9f3b72b7486 | 94 | /* ShiftBright Code |
| jsanchez307 | 15:e9f3b72b7486 | 95 | void FlashLight(void const *args) |
| jsanchez307 | 15:e9f3b72b7486 | 96 | { |
| jsanchez307 | 15:e9f3b72b7486 | 97 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 98 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 99 | |
| jsanchez307 | 15:e9f3b72b7486 | 100 | myShiftbrite.RGB(0,0,42); |
| jsanchez307 | 15:e9f3b72b7486 | 101 | myShiftbrite.RGB(0,0,42); |
| jsanchez307 | 15:e9f3b72b7486 | 102 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 103 | |
| jsanchez307 | 15:e9f3b72b7486 | 104 | |
| jsanchez307 | 15:e9f3b72b7486 | 105 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 106 | myShiftbrite.RGB(0,42,0); |
| jsanchez307 | 15:e9f3b72b7486 | 107 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 108 | |
| jsanchez307 | 15:e9f3b72b7486 | 109 | myShiftbrite.RGB(0,0,42); |
| jsanchez307 | 15:e9f3b72b7486 | 110 | myShiftbrite.RGB(0,0,42); |
| jsanchez307 | 15:e9f3b72b7486 | 111 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 112 | |
| jsanchez307 | 15:e9f3b72b7486 | 113 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 114 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 115 | } |
| jsanchez307 | 15:e9f3b72b7486 | 116 | |
| jsanchez307 | 15:e9f3b72b7486 | 117 | void GameOverLight(void const *args) |
| jsanchez307 | 15:e9f3b72b7486 | 118 | { |
| jsanchez307 | 15:e9f3b72b7486 | 119 | |
| jsanchez307 | 15:e9f3b72b7486 | 120 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 121 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 122 | |
| jsanchez307 | 15:e9f3b72b7486 | 123 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 124 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 125 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 126 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 127 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 128 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 129 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 130 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 131 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 132 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 133 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 134 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 135 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 136 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 137 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 138 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 139 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 140 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 141 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 142 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 143 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 144 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 145 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 146 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 147 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 148 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 149 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 150 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 151 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 152 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 153 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 154 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 155 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 156 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 157 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 158 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 159 | myShiftbrite.RGB(0,0,200); |
| jsanchez307 | 15:e9f3b72b7486 | 160 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 161 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 162 | } |
| jsanchez307 | 15:e9f3b72b7486 | 163 | |
| jsanchez307 | 15:e9f3b72b7486 | 164 | void GameStartLight(void const *args) |
| jsanchez307 | 15:e9f3b72b7486 | 165 | { |
| jsanchez307 | 15:e9f3b72b7486 | 166 | |
| jsanchez307 | 15:e9f3b72b7486 | 167 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 168 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 169 | |
| jsanchez307 | 15:e9f3b72b7486 | 170 | myShiftbrite.RGB(0,200,0); |
| jsanchez307 | 15:e9f3b72b7486 | 171 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 172 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 173 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 174 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 175 | myShiftbrite.RGB(0,200,0); |
| jsanchez307 | 15:e9f3b72b7486 | 176 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 177 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 178 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 179 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 180 | myShiftbrite.RGB(0,200,0); |
| jsanchez307 | 15:e9f3b72b7486 | 181 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 182 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 183 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 184 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 185 | myShiftbrite.RGB(0,200,0); |
| jsanchez307 | 15:e9f3b72b7486 | 186 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 187 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 188 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 189 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 190 | myShiftbrite.RGB(0,200,0); |
| jsanchez307 | 15:e9f3b72b7486 | 191 | Thread::wait(100); |
| jsanchez307 | 15:e9f3b72b7486 | 192 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 193 | myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 194 | |
| jsanchez307 | 15:e9f3b72b7486 | 195 | } */ |
| jsanchez307 | 15:e9f3b72b7486 | 196 | |
| jsanchez307 | 15:e9f3b72b7486 | 197 | /* Speaker Code |
| jsanchez307 | 15:e9f3b72b7486 | 198 | void PlayStartSound() |
| jsanchez307 | 15:e9f3b72b7486 | 199 | { |
| jsanchez307 | 15:e9f3b72b7486 | 200 | mySpeaker.PlayNote(500.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 201 | mySpeaker.PlayNote(600.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 202 | mySpeaker.PlayNote(700.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 203 | mySpeaker.PlayNote(800.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 204 | mySpeaker.PlayNote(900.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 205 | mySpeaker.PlayNote(1000.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 206 | mySpeaker.PlayNote(1100.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 207 | mySpeaker.PlayNote(1200.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 208 | mySpeaker.PlayNote(600.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 209 | mySpeaker.PlayNote(700.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 210 | mySpeaker.PlayNote(800.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 211 | mySpeaker.PlayNote(900.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 212 | mySpeaker.PlayNote(1000.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 213 | mySpeaker.PlayNote(1100.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 214 | mySpeaker.PlayNote(1200.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 215 | mySpeaker.PlayNote(1300.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 216 | mySpeaker.PlayNote(700.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 217 | mySpeaker.PlayNote(800.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 218 | mySpeaker.PlayNote(900.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 219 | mySpeaker.PlayNote(1000.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 220 | mySpeaker.PlayNote(1100.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 221 | mySpeaker.PlayNote(1200.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 222 | mySpeaker.PlayNote(1300.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 223 | mySpeaker.PlayNote(1400.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 224 | } |
| jsanchez307 | 15:e9f3b72b7486 | 225 | |
| jsanchez307 | 15:e9f3b72b7486 | 226 | void PlayOverSound() |
| jsanchez307 | 15:e9f3b72b7486 | 227 | { |
| jsanchez307 | 15:e9f3b72b7486 | 228 | mySpeaker.PlayNote(1400.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 229 | mySpeaker.PlayNote(1300.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 230 | mySpeaker.PlayNote(1200.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 231 | mySpeaker.PlayNote(1100.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 232 | mySpeaker.PlayNote(1000.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 233 | mySpeaker.PlayNote(900.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 234 | mySpeaker.PlayNote(800.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 235 | mySpeaker.PlayNote(700.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 236 | mySpeaker.PlayNote(1300.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 237 | mySpeaker.PlayNote(1200.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 238 | mySpeaker.PlayNote(1100.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 239 | mySpeaker.PlayNote(1000.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 240 | mySpeaker.PlayNote(900.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 241 | mySpeaker.PlayNote(800.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 242 | mySpeaker.PlayNote(700.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 243 | mySpeaker.PlayNote(600.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 244 | mySpeaker.PlayNote(1200.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 245 | mySpeaker.PlayNote(1100.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 246 | mySpeaker.PlayNote(1000.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 247 | mySpeaker.PlayNote(900.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 248 | mySpeaker.PlayNote(800.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 249 | mySpeaker.PlayNote(700.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 250 | mySpeaker.PlayNote(600.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 251 | mySpeaker.PlayNote(500.0,0.05,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 252 | } |
| jsanchez307 | 15:e9f3b72b7486 | 253 | |
| jsanchez307 | 15:e9f3b72b7486 | 254 | void PlayClearSound() |
| jsanchez307 | 15:e9f3b72b7486 | 255 | { |
| jsanchez307 | 15:e9f3b72b7486 | 256 | mySpeaker.PlayNote(900.0,0.2,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 257 | mySpeaker.PlayNote(1000.0,0.2,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 258 | mySpeaker.PlayNote(1100.0,0.2,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 259 | mySpeaker.PlayNote(1000.0,0.2,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 260 | mySpeaker.PlayNote(9000.0,0.2,0.025); |
| jsanchez307 | 15:e9f3b72b7486 | 261 | } */ |
| jsanchez307 | 15:e9f3b72b7486 | 262 | |
| jsanchez307 | 15:e9f3b72b7486 | 263 | int RandomGen(char range) |
| jsanchez307 | 15:e9f3b72b7486 | 264 | { |
| jsanchez307 | 15:e9f3b72b7486 | 265 | pc.printf("%c",range); |
| jsanchez307 | 15:e9f3b72b7486 | 266 | while(!pc.readable()) wait(0.5); |
| jsanchez307 | 15:e9f3b72b7486 | 267 | char buffer[4]; |
| jsanchez307 | 15:e9f3b72b7486 | 268 | pc.gets(buffer,4); |
| jsanchez307 | 15:e9f3b72b7486 | 269 | int i = buffer[0]-'0'; |
| jsanchez307 | 15:e9f3b72b7486 | 270 | return i; |
| jsanchez307 | 15:e9f3b72b7486 | 271 | } |
| jsanchez307 | 15:e9f3b72b7486 | 272 | |
| jsanchez307 | 15:e9f3b72b7486 | 273 | int main() |
| jsanchez307 | 15:e9f3b72b7486 | 274 | { |
| jsanchez307 | 15:e9f3b72b7486 | 275 | //hardware setup // FIX |
| jsanchez307 | 15:e9f3b72b7486 | 276 | LEFT_KEY.mode(PullUp); |
| jsanchez307 | 15:e9f3b72b7486 | 277 | RIGHT_KEY.mode(PullUp); |
| jsanchez307 | 15:e9f3b72b7486 | 278 | ROTATE_KEY.mode(PullUp); |
| jsanchez307 | 15:e9f3b72b7486 | 279 | DOWN_KEY.mode(PullUp); |
| jsanchez307 | 15:e9f3b72b7486 | 280 | |
| jsanchez307 | 15:e9f3b72b7486 | 281 | LEFT_KEY.attach_deasserted(&input_left); |
| jsanchez307 | 15:e9f3b72b7486 | 282 | RIGHT_KEY.attach_deasserted(&input_right); |
| jsanchez307 | 15:e9f3b72b7486 | 283 | ROTATE_KEY.attach_deasserted(&input_rotate); |
| jsanchez307 | 15:e9f3b72b7486 | 284 | DOWN_KEY.attach_deasserted(&input_down); |
| jsanchez307 | 15:e9f3b72b7486 | 285 | |
| jsanchez307 | 15:e9f3b72b7486 | 286 | LEFT_KEY.setSampleFrequency(); |
| jsanchez307 | 15:e9f3b72b7486 | 287 | RIGHT_KEY.setSampleFrequency(); |
| jsanchez307 | 15:e9f3b72b7486 | 288 | ROTATE_KEY.setSampleFrequency(); |
| jsanchez307 | 15:e9f3b72b7486 | 289 | DOWN_KEY.setSampleFrequency(); // FIX |
| jsanchez307 | 15:e9f3b72b7486 | 290 | uLCD.baudrate(3000000); |
| jsanchez307 | 15:e9f3b72b7486 | 291 | |
| jsanchez307 | 15:e9f3b72b7486 | 292 | //myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 293 | //myShiftbrite.RGB(0,0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 294 | |
| jsanchez307 | 15:e9f3b72b7486 | 295 | /* SD card used for Startup Image |
| jsanchez307 | 15:e9f3b72b7486 | 296 | sd.disk_initialize(); // ? might need to delete |
| jsanchez307 | 15:e9f3b72b7486 | 297 | uLCD.media_init(); |
| jsanchez307 | 15:e9f3b72b7486 | 298 | uLCD.set_sector_address(0x001D, 0x7801); |
| jsanchez307 | 15:e9f3b72b7486 | 299 | uLCD.display_image(0,0);*/ |
| jsanchez307 | 15:e9f3b72b7486 | 300 | |
| jsanchez307 | 15:e9f3b72b7486 | 301 | /*textLCD.cls(); |
| jsanchez307 | 15:e9f3b72b7486 | 302 | textLCD.locate(0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 303 | textLCD.printf("Waiting for PC...");*/ |
| jsanchez307 | 15:e9f3b72b7486 | 304 | |
| jsanchez307 | 15:e9f3b72b7486 | 305 | pc.baud(9600); |
| jsanchez307 | 15:e9f3b72b7486 | 306 | pc.format(8,SerialBase::None,1); |
| jsanchez307 | 15:e9f3b72b7486 | 307 | pc.printf("0"); |
| jsanchez307 | 15:e9f3b72b7486 | 308 | while(!pc.readable()) wait(0.5); |
| jsanchez307 | 15:e9f3b72b7486 | 309 | char buffer[4]; |
| jsanchez307 | 15:e9f3b72b7486 | 310 | pc.gets(buffer,4); |
| jsanchez307 | 15:e9f3b72b7486 | 311 | /* |
| jsanchez307 | 15:e9f3b72b7486 | 312 | //wait for game start |
| jsanchez307 | 15:e9f3b72b7486 | 313 | textLCD.cls(); |
| jsanchez307 | 15:e9f3b72b7486 | 314 | textLCD.locate(0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 315 | textLCD.printf("TETRIS READY!!"); |
| jsanchez307 | 15:e9f3b72b7486 | 316 | textLCD.locate(0,1); |
| jsanchez307 | 15:e9f3b72b7486 | 317 | textLCD.printf("PRESS ANY KEY..."); |
| jsanchez307 | 15:e9f3b72b7486 | 318 | while(!gameStarted) wait(0.5); |
| jsanchez307 | 15:e9f3b72b7486 | 319 | PlayStartSound(); |
| jsanchez307 | 15:e9f3b72b7486 | 320 | textLCD.cls(); |
| jsanchez307 | 15:e9f3b72b7486 | 321 | textLCD.printf("Starting game now..."); |
| jsanchez307 | 15:e9f3b72b7486 | 322 | wait(2); |
| jsanchez307 | 15:e9f3b72b7486 | 323 | textLCD.cls(); |
| jsanchez307 | 15:e9f3b72b7486 | 324 | textLCD.locate(0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 325 | textLCD.printf("Points"); |
| jsanchez307 | 15:e9f3b72b7486 | 326 | textLCD.locate(0,1); |
| jsanchez307 | 15:e9f3b72b7486 | 327 | textLCD.printf("Cleared Line");*/ |
| jsanchez307 | 15:e9f3b72b7486 | 328 | |
| jsanchez307 | 15:e9f3b72b7486 | 329 | //Thread t1(GameStartLight); |
| jsanchez307 | 15:e9f3b72b7486 | 330 | //game classes init |
| jsanchez307 | 15:e9f3b72b7486 | 331 | bool isGameOver = false; |
| jsanchez307 | 15:e9f3b72b7486 | 332 | int mScreenHeight = 128; |
| jsanchez307 | 15:e9f3b72b7486 | 333 | Pieces mPieces; |
| jsanchez307 | 15:e9f3b72b7486 | 334 | Board mBoard (&mPieces, mScreenHeight); |
| jsanchez307 | 15:e9f3b72b7486 | 335 | int a = RandomGen('a'); |
| jsanchez307 | 15:e9f3b72b7486 | 336 | int b = RandomGen('b'); |
| jsanchez307 | 15:e9f3b72b7486 | 337 | int c = RandomGen('a'); |
| jsanchez307 | 15:e9f3b72b7486 | 338 | int d = RandomGen('b'); |
| jsanchez307 | 15:e9f3b72b7486 | 339 | Game mGame (&mBoard, &mPieces, mScreenHeight, &uLCD,a,b,c,d); |
| jsanchez307 | 15:e9f3b72b7486 | 340 | |
| jsanchez307 | 15:e9f3b72b7486 | 341 | |
| jsanchez307 | 15:e9f3b72b7486 | 342 | // ----- Main Loop ----- |
| jsanchez307 | 15:e9f3b72b7486 | 343 | int prevX=0; |
| jsanchez307 | 15:e9f3b72b7486 | 344 | int prevY=0; |
| jsanchez307 | 15:e9f3b72b7486 | 345 | int prevPiece=-1; |
| jsanchez307 | 15:e9f3b72b7486 | 346 | int prevRot=0; |
| jsanchez307 | 15:e9f3b72b7486 | 347 | Timer timer; |
| jsanchez307 | 15:e9f3b72b7486 | 348 | timer.start(); |
| jsanchez307 | 15:e9f3b72b7486 | 349 | key_input=0; |
| jsanchez307 | 15:e9f3b72b7486 | 350 | bool needErase = false; |
| jsanchez307 | 15:e9f3b72b7486 | 351 | uLCD.cls(); |
| jsanchez307 | 15:e9f3b72b7486 | 352 | while (1) |
| jsanchez307 | 15:e9f3b72b7486 | 353 | { |
| jsanchez307 | 15:e9f3b72b7486 | 354 | if(isGameOver) |
| jsanchez307 | 15:e9f3b72b7486 | 355 | { |
| jsanchez307 | 15:e9f3b72b7486 | 356 | wait(1); |
| jsanchez307 | 15:e9f3b72b7486 | 357 | continue; |
| jsanchez307 | 15:e9f3b72b7486 | 358 | } |
| jsanchez307 | 15:e9f3b72b7486 | 359 | // ----- Draw ---- |
| jsanchez307 | 15:e9f3b72b7486 | 360 | if(needErase) |
| jsanchez307 | 15:e9f3b72b7486 | 361 | { |
| jsanchez307 | 15:e9f3b72b7486 | 362 | mGame.ErasePiece(prevX,prevY,prevPiece,prevRot); |
| jsanchez307 | 15:e9f3b72b7486 | 363 | needErase=false; |
| jsanchez307 | 15:e9f3b72b7486 | 364 | } |
| jsanchez307 | 15:e9f3b72b7486 | 365 | mGame.DrawScene(); |
| jsanchez307 | 15:e9f3b72b7486 | 366 | |
| jsanchez307 | 15:e9f3b72b7486 | 367 | prevX=mGame.mPosX; |
| jsanchez307 | 15:e9f3b72b7486 | 368 | prevY=mGame.mPosY; |
| jsanchez307 | 15:e9f3b72b7486 | 369 | prevPiece=mGame.mPiece; |
| jsanchez307 | 15:e9f3b72b7486 | 370 | prevRot=mGame.mRotation; |
| jsanchez307 | 15:e9f3b72b7486 | 371 | |
| jsanchez307 | 15:e9f3b72b7486 | 372 | // ----- Input ----- |
| jsanchez307 | 15:e9f3b72b7486 | 373 | switch (key_input) |
| jsanchez307 | 15:e9f3b72b7486 | 374 | { |
| jsanchez307 | 15:e9f3b72b7486 | 375 | case (2): //right |
| jsanchez307 | 15:e9f3b72b7486 | 376 | { |
| jsanchez307 | 15:e9f3b72b7486 | 377 | if (mBoard.IsPossibleMovement (mGame.mPosX + 1, mGame.mPosY, mGame.mPiece, mGame.mRotation)) |
| jsanchez307 | 15:e9f3b72b7486 | 378 | {mGame.mPosX++;needErase=true;} |
| jsanchez307 | 15:e9f3b72b7486 | 379 | break; |
| jsanchez307 | 15:e9f3b72b7486 | 380 | } |
| jsanchez307 | 15:e9f3b72b7486 | 381 | |
| jsanchez307 | 15:e9f3b72b7486 | 382 | case (1): //left |
| jsanchez307 | 15:e9f3b72b7486 | 383 | { |
| jsanchez307 | 15:e9f3b72b7486 | 384 | if (mBoard.IsPossibleMovement (mGame.mPosX - 1, mGame.mPosY, mGame.mPiece, mGame.mRotation)) |
| jsanchez307 | 15:e9f3b72b7486 | 385 | {mGame.mPosX--;needErase=true;} |
| jsanchez307 | 15:e9f3b72b7486 | 386 | break; |
| jsanchez307 | 15:e9f3b72b7486 | 387 | } |
| jsanchez307 | 15:e9f3b72b7486 | 388 | |
| jsanchez307 | 15:e9f3b72b7486 | 389 | case (4)://down |
| jsanchez307 | 15:e9f3b72b7486 | 390 | { |
| jsanchez307 | 15:e9f3b72b7486 | 391 | // Check collision from up to down |
| jsanchez307 | 15:e9f3b72b7486 | 392 | while (mBoard.IsPossibleMovement(mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation)) { mGame.mPosY++; } |
| jsanchez307 | 15:e9f3b72b7486 | 393 | needErase=true; |
| jsanchez307 | 15:e9f3b72b7486 | 394 | mBoard.StorePiece (mGame.mPosX, mGame.mPosY - 1, mGame.mPiece, mGame.mRotation); |
| jsanchez307 | 15:e9f3b72b7486 | 395 | mGame.AddPoints(SinglePiecePoints); |
| jsanchez307 | 15:e9f3b72b7486 | 396 | int linesDeleted = mBoard.DeletePossibleLines (); |
| jsanchez307 | 15:e9f3b72b7486 | 397 | if(linesDeleted>0) |
| jsanchez307 | 15:e9f3b72b7486 | 398 | { |
| jsanchez307 | 15:e9f3b72b7486 | 399 | mGame.AddClearedLines(linesDeleted); |
| jsanchez307 | 15:e9f3b72b7486 | 400 | mGame.AddPoints(LineClearPoints*linesDeleted); |
| jsanchez307 | 15:e9f3b72b7486 | 401 | //Thread t1(FlashLight); |
| jsanchez307 | 15:e9f3b72b7486 | 402 | //PlayClearSound(); |
| jsanchez307 | 15:e9f3b72b7486 | 403 | clear_board(); |
| jsanchez307 | 15:e9f3b72b7486 | 404 | } |
| jsanchez307 | 15:e9f3b72b7486 | 405 | UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines()); |
| jsanchez307 | 15:e9f3b72b7486 | 406 | |
| jsanchez307 | 15:e9f3b72b7486 | 407 | if (mBoard.IsGameOver()) |
| jsanchez307 | 15:e9f3b72b7486 | 408 | { |
| jsanchez307 | 15:e9f3b72b7486 | 409 | isGameOver=true; |
| jsanchez307 | 15:e9f3b72b7486 | 410 | uLCD.cls(); |
| jsanchez307 | 15:e9f3b72b7486 | 411 | |
| jsanchez307 | 15:e9f3b72b7486 | 412 | // FIX add Game Over mechanic |
| jsanchez307 | 15:e9f3b72b7486 | 413 | |
| jsanchez307 | 15:e9f3b72b7486 | 414 | //uLCD.media_init(); |
| jsanchez307 | 15:e9f3b72b7486 | 415 | //uLCD.set_sector_address(0x001D, 0x7842); |
| jsanchez307 | 15:e9f3b72b7486 | 416 | //uLCD.display_image(0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 417 | //Thread t2(GameOverLight); |
| jsanchez307 | 15:e9f3b72b7486 | 418 | //PlayOverSound(); |
| jsanchez307 | 15:e9f3b72b7486 | 419 | |
| jsanchez307 | 15:e9f3b72b7486 | 420 | } |
| jsanchez307 | 15:e9f3b72b7486 | 421 | |
| jsanchez307 | 15:e9f3b72b7486 | 422 | if(!isGameOver) |
| jsanchez307 | 15:e9f3b72b7486 | 423 | { |
| jsanchez307 | 15:e9f3b72b7486 | 424 | mGame.CreateNewPiece(RandomGen('a'),RandomGen('b')); |
| jsanchez307 | 15:e9f3b72b7486 | 425 | clear_next_piece(); |
| jsanchez307 | 15:e9f3b72b7486 | 426 | } |
| jsanchez307 | 15:e9f3b72b7486 | 427 | break; |
| jsanchez307 | 15:e9f3b72b7486 | 428 | } |
| jsanchez307 | 15:e9f3b72b7486 | 429 | |
| jsanchez307 | 15:e9f3b72b7486 | 430 | case (3)://rotate |
| jsanchez307 | 15:e9f3b72b7486 | 431 | { |
| jsanchez307 | 15:e9f3b72b7486 | 432 | if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY, mGame.mPiece, (mGame.mRotation + 1) % 4)) |
| jsanchez307 | 15:e9f3b72b7486 | 433 | {mGame.mRotation = (mGame.mRotation + 1) % 4;needErase=true;} |
| jsanchez307 | 15:e9f3b72b7486 | 434 | break; |
| jsanchez307 | 15:e9f3b72b7486 | 435 | } |
| jsanchez307 | 15:e9f3b72b7486 | 436 | |
| jsanchez307 | 15:e9f3b72b7486 | 437 | case (0):{break;} |
| jsanchez307 | 15:e9f3b72b7486 | 438 | } |
| jsanchez307 | 15:e9f3b72b7486 | 439 | key_input = 0; |
| jsanchez307 | 15:e9f3b72b7486 | 440 | |
| jsanchez307 | 15:e9f3b72b7486 | 441 | // ----- Vertical movement ----- |
| jsanchez307 | 15:e9f3b72b7486 | 442 | |
| jsanchez307 | 15:e9f3b72b7486 | 443 | if(timer.read_ms()>WAIT_TIME) |
| jsanchez307 | 15:e9f3b72b7486 | 444 | { |
| jsanchez307 | 15:e9f3b72b7486 | 445 | needErase=true; |
| jsanchez307 | 15:e9f3b72b7486 | 446 | if(!isGameOver) |
| jsanchez307 | 15:e9f3b72b7486 | 447 | { |
| jsanchez307 | 15:e9f3b72b7486 | 448 | if (mBoard.IsPossibleMovement (mGame.mPosX, mGame.mPosY + 1, mGame.mPiece, mGame.mRotation)) |
| jsanchez307 | 15:e9f3b72b7486 | 449 | { |
| jsanchez307 | 15:e9f3b72b7486 | 450 | mGame.mPosY++; |
| jsanchez307 | 15:e9f3b72b7486 | 451 | } |
| jsanchez307 | 15:e9f3b72b7486 | 452 | else |
| jsanchez307 | 15:e9f3b72b7486 | 453 | { |
| jsanchez307 | 15:e9f3b72b7486 | 454 | mBoard.StorePiece (mGame.mPosX, mGame.mPosY, mGame.mPiece, mGame.mRotation); |
| jsanchez307 | 15:e9f3b72b7486 | 455 | mGame.AddPoints(SinglePiecePoints); |
| jsanchez307 | 15:e9f3b72b7486 | 456 | int linesDeleted = mBoard.DeletePossibleLines (); |
| jsanchez307 | 15:e9f3b72b7486 | 457 | if(linesDeleted>0) |
| jsanchez307 | 15:e9f3b72b7486 | 458 | { |
| jsanchez307 | 15:e9f3b72b7486 | 459 | mGame.AddClearedLines(linesDeleted); |
| jsanchez307 | 15:e9f3b72b7486 | 460 | mGame.AddPoints(LineClearPoints*linesDeleted); |
| jsanchez307 | 15:e9f3b72b7486 | 461 | //Thread t1(FlashLight); |
| jsanchez307 | 15:e9f3b72b7486 | 462 | //PlayClearSound(); |
| jsanchez307 | 15:e9f3b72b7486 | 463 | clear_board(); |
| jsanchez307 | 15:e9f3b72b7486 | 464 | } |
| jsanchez307 | 15:e9f3b72b7486 | 465 | UpdateGameStatus(mGame.GetPoints(),mGame.GetClearedLines()); |
| jsanchez307 | 15:e9f3b72b7486 | 466 | |
| jsanchez307 | 15:e9f3b72b7486 | 467 | if (mBoard.IsGameOver()) |
| jsanchez307 | 15:e9f3b72b7486 | 468 | { |
| jsanchez307 | 15:e9f3b72b7486 | 469 | isGameOver=true; |
| jsanchez307 | 15:e9f3b72b7486 | 470 | uLCD.cls(); |
| jsanchez307 | 15:e9f3b72b7486 | 471 | |
| jsanchez307 | 15:e9f3b72b7486 | 472 | // FIX add Game Over mechanic |
| jsanchez307 | 15:e9f3b72b7486 | 473 | |
| jsanchez307 | 15:e9f3b72b7486 | 474 | //uLCD.media_init(); |
| jsanchez307 | 15:e9f3b72b7486 | 475 | //uLCD.set_sector_address(0x001D, 0x7842); |
| jsanchez307 | 15:e9f3b72b7486 | 476 | //uLCD.display_image(0,0); |
| jsanchez307 | 15:e9f3b72b7486 | 477 | //Thread t2(GameOverLight); |
| jsanchez307 | 15:e9f3b72b7486 | 478 | //PlayOverSound(); |
| jsanchez307 | 15:e9f3b72b7486 | 479 | } |
| jsanchez307 | 15:e9f3b72b7486 | 480 | |
| jsanchez307 | 15:e9f3b72b7486 | 481 | if(!isGameOver) |
| jsanchez307 | 15:e9f3b72b7486 | 482 | { |
| jsanchez307 | 15:e9f3b72b7486 | 483 | mGame.CreateNewPiece(RandomGen('a'),RandomGen('b')); |
| jsanchez307 | 15:e9f3b72b7486 | 484 | clear_next_piece(); |
| jsanchez307 | 15:e9f3b72b7486 | 485 | } |
| jsanchez307 | 15:e9f3b72b7486 | 486 | } |
| jsanchez307 | 15:e9f3b72b7486 | 487 | } |
| jsanchez307 | 15:e9f3b72b7486 | 488 | timer.reset(); |
| jsanchez307 | 15:e9f3b72b7486 | 489 | } |
| jsanchez307 | 15:e9f3b72b7486 | 490 | wait(0.1); |
| jsanchez307 | 15:e9f3b72b7486 | 491 | } |
| jsanchez307 | 15:e9f3b72b7486 | 492 | } |