The preloaded firmware shipped on the E-Dice.

Dependencies:   mbed

Committer:
Experiment626
Date:
Mon Sep 15 16:09:51 2014 +0000
Revision:
1:a30065092967
Parent:
0:7c263455b8b9
Added Apache 2 license text

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Experiment626 1:a30065092967 1 /*
Experiment626 1:a30065092967 2 ** This software can be freely used, even comercially, as highlighted in the license.
Experiment626 1:a30065092967 3 **
Experiment626 1:a30065092967 4 ** Copyright 2014 GHI Electronics, LLC
Experiment626 1:a30065092967 5 **
Experiment626 1:a30065092967 6 ** Licensed under the Apache License, Version 2.0 (the "License");
Experiment626 1:a30065092967 7 ** you may not use this file except in compliance with the License.
Experiment626 1:a30065092967 8 ** You may obtain a copy of the License at
Experiment626 1:a30065092967 9 **
Experiment626 1:a30065092967 10 ** http://www.apache.org/licenses/LICENSE-2.0
Experiment626 1:a30065092967 11 **
Experiment626 1:a30065092967 12 ** Unless required by applicable law or agreed to in writing, software
Experiment626 1:a30065092967 13 ** distributed under the License is distributed on an "AS IS" BASIS,
Experiment626 1:a30065092967 14 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Experiment626 1:a30065092967 15 ** See the License for the specific language governing permissions and
Experiment626 1:a30065092967 16 ** limitations under the License.
Experiment626 1:a30065092967 17 **
Experiment626 1:a30065092967 18 **/
Experiment626 1:a30065092967 19
Experiment626 0:7c263455b8b9 20 #include "mbed.h"
Experiment626 0:7c263455b8b9 21 #include <stdlib.h>
Experiment626 0:7c263455b8b9 22 #include "MMA845x.h"
Experiment626 0:7c263455b8b9 23
Experiment626 0:7c263455b8b9 24 PinName const SDA = P0_5;
Experiment626 0:7c263455b8b9 25 PinName const SCL = P0_4;
Experiment626 0:7c263455b8b9 26
Experiment626 0:7c263455b8b9 27 #define MMA8451_I2C_ADDRESS (0x1C << 1)
Experiment626 0:7c263455b8b9 28
Experiment626 0:7c263455b8b9 29 //enum DieBitMask { ONE = 8, TWO = 65, THREE = 73, FOUR = 85, FIVE = 93, SIX = 119 };
Experiment626 0:7c263455b8b9 30 enum DIE { LEFT = 0, RIGHT = 1 };
Experiment626 0:7c263455b8b9 31
Experiment626 0:7c263455b8b9 32 void SetDieNumber( DIE leftRight, int dieFaceNumber);
Experiment626 0:7c263455b8b9 33 void soundBuzzer(int Hz);
Experiment626 0:7c263455b8b9 34 void RandomRollCycle(int iteration);
Experiment626 0:7c263455b8b9 35 void ClearLEDs();
Experiment626 0:7c263455b8b9 36 int SetSensitivityLevel();
Experiment626 0:7c263455b8b9 37 void ProgramSplash();
Experiment626 0:7c263455b8b9 38 void ProgramStart();
Experiment626 0:7c263455b8b9 39
Experiment626 0:7c263455b8b9 40 DigitalOut LeftDieLED[] = {(P0_19), (P0_18), (P0_17), (P1_15), (P0_23), (P0_14), (P0_15)};// declare 7 LEDs on Left Die
Experiment626 0:7c263455b8b9 41 DigitalOut RightDieLED[] = {(P0_9), (P0_8), (P0_7), (P0_21), (P0_10), (P0_22), (P0_11)};// declare 7 LEDs on Right Die
Experiment626 0:7c263455b8b9 42 DigitalOut Buzzer(P0_13);
Experiment626 0:7c263455b8b9 43
Experiment626 0:7c263455b8b9 44 DigitalIn userButton1(P0_1, PullUp);
Experiment626 0:7c263455b8b9 45 DigitalIn userButton2(P0_16);
Experiment626 0:7c263455b8b9 46
Experiment626 0:7c263455b8b9 47 MMA845x acc(SDA, SCL, MMA8451_I2C_ADDRESS);
Experiment626 0:7c263455b8b9 48
Experiment626 0:7c263455b8b9 49 int frequencyInHz = 400;
Experiment626 0:7c263455b8b9 50 int sensitivityLevel = 1;
Experiment626 0:7c263455b8b9 51
Experiment626 0:7c263455b8b9 52 main()
Experiment626 0:7c263455b8b9 53 {
Experiment626 0:7c263455b8b9 54 ProgramSplash();
Experiment626 0:7c263455b8b9 55
Experiment626 0:7c263455b8b9 56 while(true)
Experiment626 0:7c263455b8b9 57 {
Experiment626 0:7c263455b8b9 58 if(!userButton2)
Experiment626 0:7c263455b8b9 59 SetSensitivityLevel();
Experiment626 0:7c263455b8b9 60
Experiment626 0:7c263455b8b9 61 if(!userButton1)
Experiment626 0:7c263455b8b9 62 ProgramStart();
Experiment626 0:7c263455b8b9 63 }
Experiment626 0:7c263455b8b9 64 }
Experiment626 0:7c263455b8b9 65
Experiment626 0:7c263455b8b9 66 void SetDieNumber( DIE leftRight, int dieFaceNumber)
Experiment626 0:7c263455b8b9 67 {
Experiment626 0:7c263455b8b9 68 switch (dieFaceNumber)
Experiment626 0:7c263455b8b9 69 {
Experiment626 0:7c263455b8b9 70 case 1:
Experiment626 0:7c263455b8b9 71 if(leftRight == LEFT)
Experiment626 0:7c263455b8b9 72 {
Experiment626 0:7c263455b8b9 73 LeftDieLED[3] = true;
Experiment626 0:7c263455b8b9 74 }
Experiment626 0:7c263455b8b9 75 else
Experiment626 0:7c263455b8b9 76 {
Experiment626 0:7c263455b8b9 77 RightDieLED[3] = true;
Experiment626 0:7c263455b8b9 78 }
Experiment626 0:7c263455b8b9 79 break;
Experiment626 0:7c263455b8b9 80 case 2:
Experiment626 0:7c263455b8b9 81 if(leftRight == LEFT)
Experiment626 0:7c263455b8b9 82 {
Experiment626 0:7c263455b8b9 83 LeftDieLED[0] = true;LeftDieLED[6] = true;
Experiment626 0:7c263455b8b9 84 }
Experiment626 0:7c263455b8b9 85 else
Experiment626 0:7c263455b8b9 86 {
Experiment626 0:7c263455b8b9 87 RightDieLED[0] = true;RightDieLED[6] = true;
Experiment626 0:7c263455b8b9 88 }
Experiment626 0:7c263455b8b9 89 break;
Experiment626 0:7c263455b8b9 90 case 3:
Experiment626 0:7c263455b8b9 91 if(leftRight == LEFT)
Experiment626 0:7c263455b8b9 92 {
Experiment626 0:7c263455b8b9 93 LeftDieLED[0] = true;LeftDieLED[3] = true;LeftDieLED[6] = true;
Experiment626 0:7c263455b8b9 94 }
Experiment626 0:7c263455b8b9 95 else
Experiment626 0:7c263455b8b9 96 {
Experiment626 0:7c263455b8b9 97 RightDieLED[0] = true;RightDieLED[3] = true;RightDieLED[6] = true;
Experiment626 0:7c263455b8b9 98 }
Experiment626 0:7c263455b8b9 99 break;
Experiment626 0:7c263455b8b9 100 case 4:
Experiment626 0:7c263455b8b9 101 if(leftRight == LEFT)
Experiment626 0:7c263455b8b9 102 {
Experiment626 0:7c263455b8b9 103 LeftDieLED[0] = true;LeftDieLED[2] = true;LeftDieLED[4] = true;LeftDieLED[6] = true;
Experiment626 0:7c263455b8b9 104 }
Experiment626 0:7c263455b8b9 105 else
Experiment626 0:7c263455b8b9 106 {
Experiment626 0:7c263455b8b9 107 RightDieLED[0] = true;RightDieLED[2] = true;RightDieLED[4] = true;RightDieLED[6] = true;
Experiment626 0:7c263455b8b9 108 }
Experiment626 0:7c263455b8b9 109 break;
Experiment626 0:7c263455b8b9 110 case 5:
Experiment626 0:7c263455b8b9 111 if(leftRight == LEFT)
Experiment626 0:7c263455b8b9 112 {
Experiment626 0:7c263455b8b9 113 LeftDieLED[0] = true;LeftDieLED[2] = true;LeftDieLED[3] = true;LeftDieLED[4] = true;LeftDieLED[6] = true;
Experiment626 0:7c263455b8b9 114 }
Experiment626 0:7c263455b8b9 115 else
Experiment626 0:7c263455b8b9 116 {
Experiment626 0:7c263455b8b9 117 RightDieLED[0] = true;RightDieLED[2] = true;RightDieLED[3] = true;RightDieLED[4] = true;RightDieLED[6] = true;
Experiment626 0:7c263455b8b9 118 }
Experiment626 0:7c263455b8b9 119 break;
Experiment626 0:7c263455b8b9 120 case 6:
Experiment626 0:7c263455b8b9 121 if(leftRight == LEFT)
Experiment626 0:7c263455b8b9 122 {
Experiment626 0:7c263455b8b9 123 LeftDieLED[0] = true;LeftDieLED[1] = true;LeftDieLED[2] = true;LeftDieLED[4] = true;LeftDieLED[5] = true;LeftDieLED[6] = true;
Experiment626 0:7c263455b8b9 124 }
Experiment626 0:7c263455b8b9 125 else
Experiment626 0:7c263455b8b9 126 {
Experiment626 0:7c263455b8b9 127 RightDieLED[0] = true;RightDieLED[1] = true;RightDieLED[2] = true;RightDieLED[4] = true;RightDieLED[5] = true;RightDieLED[6] = true;
Experiment626 0:7c263455b8b9 128 }
Experiment626 0:7c263455b8b9 129 break;
Experiment626 0:7c263455b8b9 130 }
Experiment626 0:7c263455b8b9 131 }
Experiment626 0:7c263455b8b9 132
Experiment626 0:7c263455b8b9 133 void soundBuzzer(int Hz)
Experiment626 0:7c263455b8b9 134 {
Experiment626 0:7c263455b8b9 135 int ticks = Hz/64;
Experiment626 0:7c263455b8b9 136 int tickCount = 0;
Experiment626 0:7c263455b8b9 137 float frequency = 1/(float)Hz;
Experiment626 0:7c263455b8b9 138
Experiment626 0:7c263455b8b9 139 while(tickCount < ticks)
Experiment626 0:7c263455b8b9 140 {
Experiment626 0:7c263455b8b9 141 wait(frequency);
Experiment626 0:7c263455b8b9 142 Buzzer = true;
Experiment626 0:7c263455b8b9 143 wait(frequency);
Experiment626 0:7c263455b8b9 144 Buzzer = false;
Experiment626 0:7c263455b8b9 145 tickCount++;
Experiment626 0:7c263455b8b9 146 }
Experiment626 0:7c263455b8b9 147 }
Experiment626 0:7c263455b8b9 148
Experiment626 0:7c263455b8b9 149 void RandomRollCycle(int iteration)
Experiment626 0:7c263455b8b9 150 {
Experiment626 0:7c263455b8b9 151 int leftDieRoll = 0;
Experiment626 0:7c263455b8b9 152 int rightDieRoll = 0;
Experiment626 0:7c263455b8b9 153
Experiment626 0:7c263455b8b9 154 for(int soundLoop = iteration; soundLoop > 5; soundLoop--)
Experiment626 0:7c263455b8b9 155 {
Experiment626 0:7c263455b8b9 156 leftDieRoll = rand() % 6 + 1;
Experiment626 0:7c263455b8b9 157 rightDieRoll = rand() % 6 + 1;
Experiment626 0:7c263455b8b9 158
Experiment626 0:7c263455b8b9 159 ClearLEDs();
Experiment626 0:7c263455b8b9 160
Experiment626 0:7c263455b8b9 161 SetDieNumber(LEFT, leftDieRoll);
Experiment626 0:7c263455b8b9 162 soundBuzzer(1000);
Experiment626 0:7c263455b8b9 163
Experiment626 0:7c263455b8b9 164 SetDieNumber(RIGHT, rightDieRoll);
Experiment626 0:7c263455b8b9 165 soundBuzzer(500);
Experiment626 0:7c263455b8b9 166
Experiment626 0:7c263455b8b9 167 wait(1/(float)soundLoop);
Experiment626 0:7c263455b8b9 168 }
Experiment626 0:7c263455b8b9 169 }
Experiment626 0:7c263455b8b9 170
Experiment626 0:7c263455b8b9 171 void ClearLEDs()
Experiment626 0:7c263455b8b9 172 {
Experiment626 0:7c263455b8b9 173 for(int y = 0; y < 7; y++)
Experiment626 0:7c263455b8b9 174 {
Experiment626 0:7c263455b8b9 175 LeftDieLED[y] = false;
Experiment626 0:7c263455b8b9 176 RightDieLED[y] = false;
Experiment626 0:7c263455b8b9 177 }
Experiment626 0:7c263455b8b9 178 }
Experiment626 0:7c263455b8b9 179
Experiment626 0:7c263455b8b9 180 int SetSensitivityLevel()
Experiment626 0:7c263455b8b9 181 {
Experiment626 0:7c263455b8b9 182 ClearLEDs();
Experiment626 0:7c263455b8b9 183
Experiment626 0:7c263455b8b9 184 sensitivityLevel++;
Experiment626 0:7c263455b8b9 185
Experiment626 0:7c263455b8b9 186 if(sensitivityLevel > 6)
Experiment626 0:7c263455b8b9 187 sensitivityLevel = 1;
Experiment626 0:7c263455b8b9 188
Experiment626 0:7c263455b8b9 189 SetDieNumber(LEFT, sensitivityLevel);
Experiment626 0:7c263455b8b9 190
Experiment626 0:7c263455b8b9 191 soundBuzzer(600);
Experiment626 0:7c263455b8b9 192 wait(.25);
Experiment626 0:7c263455b8b9 193 }
Experiment626 0:7c263455b8b9 194
Experiment626 0:7c263455b8b9 195 void ProgramSplash()
Experiment626 0:7c263455b8b9 196 {
Experiment626 0:7c263455b8b9 197 for(int x = 200; x < 1000; x+=20)
Experiment626 0:7c263455b8b9 198 soundBuzzer(x);
Experiment626 0:7c263455b8b9 199
Experiment626 0:7c263455b8b9 200 SetDieNumber(LEFT, sensitivityLevel);
Experiment626 0:7c263455b8b9 201 }
Experiment626 0:7c263455b8b9 202
Experiment626 0:7c263455b8b9 203 void ProgramStart()
Experiment626 0:7c263455b8b9 204 {
Experiment626 0:7c263455b8b9 205 ClearLEDs();
Experiment626 0:7c263455b8b9 206 for(int g = 0; g < 4; g++)
Experiment626 0:7c263455b8b9 207 {
Experiment626 0:7c263455b8b9 208 soundBuzzer(1000);
Experiment626 0:7c263455b8b9 209 wait(0.100);
Experiment626 0:7c263455b8b9 210 }
Experiment626 0:7c263455b8b9 211 SetDieNumber(RIGHT, 6);
Experiment626 0:7c263455b8b9 212 SetDieNumber(LEFT, 6);
Experiment626 0:7c263455b8b9 213
Experiment626 0:7c263455b8b9 214
Experiment626 0:7c263455b8b9 215
Experiment626 0:7c263455b8b9 216 int16_t zAxis = 0;
Experiment626 0:7c263455b8b9 217
Experiment626 0:7c263455b8b9 218 int deltaX;
Experiment626 0:7c263455b8b9 219 int X1;
Experiment626 0:7c263455b8b9 220 int X2;
Experiment626 0:7c263455b8b9 221
Experiment626 0:7c263455b8b9 222 int deltaY;
Experiment626 0:7c263455b8b9 223 int Y1;
Experiment626 0:7c263455b8b9 224 int Y2;
Experiment626 0:7c263455b8b9 225
Experiment626 0:7c263455b8b9 226 int deltaZ;
Experiment626 0:7c263455b8b9 227 int Z1;
Experiment626 0:7c263455b8b9 228 int Z2;
Experiment626 0:7c263455b8b9 229
Experiment626 0:7c263455b8b9 230 zAxis = acc.getZ();
Experiment626 0:7c263455b8b9 231 srand (abs(zAxis));
Experiment626 0:7c263455b8b9 232
Experiment626 0:7c263455b8b9 233 // int inactivityCounter = 0;
Experiment626 0:7c263455b8b9 234
Experiment626 0:7c263455b8b9 235 while(true)
Experiment626 0:7c263455b8b9 236 {
Experiment626 0:7c263455b8b9 237 X1 = acc.getX();
Experiment626 0:7c263455b8b9 238 Y1 = acc.getY();
Experiment626 0:7c263455b8b9 239 Z1 = acc.getZ();
Experiment626 0:7c263455b8b9 240 wait(.25);
Experiment626 0:7c263455b8b9 241 X2 = acc.getX();
Experiment626 0:7c263455b8b9 242 Y2 = acc.getY();
Experiment626 0:7c263455b8b9 243 Z2 = acc.getZ();
Experiment626 0:7c263455b8b9 244
Experiment626 0:7c263455b8b9 245 deltaX = X2 - X1;
Experiment626 0:7c263455b8b9 246 deltaY = Y2 - Y1;
Experiment626 0:7c263455b8b9 247 deltaZ = Z2 - Z1;
Experiment626 0:7c263455b8b9 248
Experiment626 0:7c263455b8b9 249 if(abs(deltaZ) >> (sensitivityLevel + 2))
Experiment626 0:7c263455b8b9 250 RandomRollCycle(26);
Experiment626 0:7c263455b8b9 251
Experiment626 0:7c263455b8b9 252 /*
Experiment626 0:7c263455b8b9 253 inactivityCounter++;
Experiment626 0:7c263455b8b9 254 if(inactivityCounter > 500)
Experiment626 0:7c263455b8b9 255 {
Experiment626 0:7c263455b8b9 256 inactivityCounter = 0;
Experiment626 0:7c263455b8b9 257 deepsleep();
Experiment626 0:7c263455b8b9 258 }
Experiment626 0:7c263455b8b9 259 */
Experiment626 0:7c263455b8b9 260 }
Experiment626 0:7c263455b8b9 261
Experiment626 0:7c263455b8b9 262 }
Experiment626 0:7c263455b8b9 263
Experiment626 0:7c263455b8b9 264
Experiment626 0:7c263455b8b9 265
Experiment626 0:7c263455b8b9 266
Experiment626 0:7c263455b8b9 267
Experiment626 0:7c263455b8b9 268
Experiment626 0:7c263455b8b9 269
Experiment626 0:7c263455b8b9 270 /*
Experiment626 0:7c263455b8b9 271
Experiment626 0:7c263455b8b9 272 intialize()
Experiment626 0:7c263455b8b9 273 {
Experiment626 0:7c263455b8b9 274 set pins to outputs for example
Experiment626 0:7c263455b8b9 275 maybe initialize teh accelerometer
Experiment626 0:7c263455b8b9 276 AcelInit();
Experiment626 0:7c263455b8b9 277 }
Experiment626 0:7c263455b8b9 278
Experiment626 0:7c263455b8b9 279 int Getsense()
Experiment626 0:7c263455b8b9 280 {
Experiment626 0:7c263455b8b9 281 int sese =1;
Experiment626 0:7c263455b8b9 282 while(button not pressed)
Experiment626 0:7c263455b8b9 283 {
Experiment626 0:7c263455b8b9 284 if(othe rbutton)
Experiment626 0:7c263455b8b9 285 {
Experiment626 0:7c263455b8b9 286 sense++;
Experiment626 0:7c263455b8b9 287 if sense > 6) sense =1;
Experiment626 0:7c263455b8b9 288 SetLEDs(LEFT, sense);
Experiment626 0:7c263455b8b9 289 }
Experiment626 0:7c263455b8b9 290
Experiment626 0:7c263455b8b9 291 }
Experiment626 0:7c263455b8b9 292 return sense;
Experiment626 0:7c263455b8b9 293 }
Experiment626 0:7c263455b8b9 294 void main()
Experiment626 0:7c263455b8b9 295 {
Experiment626 0:7c263455b8b9 296 Intialize();
Experiment626 0:7c263455b8b9 297
Experiment626 0:7c263455b8b9 298 sense = GetSensetivity();
Experiment626 0:7c263455b8b9 299
Experiment626 0:7c263455b8b9 300 while(1)
Experiment626 0:7c263455b8b9 301 {
Experiment626 0:7c263455b8b9 302 int x = getaccel();
Experiment626 0:7c263455b8b9 303 if(x >> (sense+3))
Experiment626 0:7c263455b8b9 304 NewDiceRandom();
Experiment626 0:7c263455b8b9 305
Experiment626 0:7c263455b8b9 306 }
Experiment626 0:7c263455b8b9 307 }
Experiment626 0:7c263455b8b9 308 */