The preloaded firmware shipped on the E-Dice.

Dependencies:   mbed

Revision:
0:7c263455b8b9
Child:
1:a30065092967
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Sep 13 03:17:50 2014 +0000
@@ -0,0 +1,289 @@
+#include "mbed.h"
+#include <stdlib.h>
+#include "MMA845x.h"
+
+PinName const SDA = P0_5;
+PinName const SCL = P0_4;
+
+#define MMA8451_I2C_ADDRESS (0x1C << 1)
+
+//enum DieBitMask { ONE = 8, TWO = 65, THREE = 73, FOUR = 85, FIVE = 93, SIX = 119 };
+enum DIE { LEFT = 0, RIGHT = 1 };
+
+void SetDieNumber( DIE leftRight, int dieFaceNumber);
+void soundBuzzer(int Hz);
+void RandomRollCycle(int iteration);
+void ClearLEDs();
+int SetSensitivityLevel();
+void ProgramSplash();
+void ProgramStart();
+
+DigitalOut LeftDieLED[] = {(P0_19), (P0_18), (P0_17), (P1_15), (P0_23), (P0_14), (P0_15)};// declare 7 LEDs on Left Die
+DigitalOut RightDieLED[] = {(P0_9), (P0_8), (P0_7), (P0_21), (P0_10), (P0_22), (P0_11)};// declare 7 LEDs on Right Die
+DigitalOut Buzzer(P0_13);
+
+DigitalIn userButton1(P0_1, PullUp);
+DigitalIn userButton2(P0_16);
+
+MMA845x acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+
+int frequencyInHz = 400;
+int sensitivityLevel = 1;
+
+main()
+{
+    ProgramSplash();
+    
+    while(true)
+    {
+        if(!userButton2)
+            SetSensitivityLevel();
+        
+        if(!userButton1)
+            ProgramStart();
+    }  
+}
+
+void SetDieNumber( DIE leftRight, int dieFaceNumber)
+{
+    switch (dieFaceNumber)
+    {
+        case 1:
+            if(leftRight == LEFT)
+            {
+                LeftDieLED[3] = true;
+            }
+            else
+            {
+                RightDieLED[3] = true;
+            }   
+            break;   
+        case 2:
+            if(leftRight == LEFT)
+            {
+                LeftDieLED[0] = true;LeftDieLED[6] = true;
+            }
+            else
+            {
+                RightDieLED[0] = true;RightDieLED[6] = true;
+            }
+            break;   
+        case 3:
+            if(leftRight == LEFT)
+            {
+                LeftDieLED[0] = true;LeftDieLED[3] = true;LeftDieLED[6] = true;
+            }
+            else
+            {
+                RightDieLED[0] = true;RightDieLED[3] = true;RightDieLED[6] = true;
+            }
+            break;   
+        case 4:
+            if(leftRight == LEFT)
+            {
+                LeftDieLED[0] = true;LeftDieLED[2] = true;LeftDieLED[4] = true;LeftDieLED[6] = true;
+            }
+            else
+            {
+                RightDieLED[0] = true;RightDieLED[2] = true;RightDieLED[4] = true;RightDieLED[6] = true;
+            }   
+            break;   
+        case 5:
+            if(leftRight == LEFT)
+            {
+                LeftDieLED[0] = true;LeftDieLED[2] = true;LeftDieLED[3] = true;LeftDieLED[4] = true;LeftDieLED[6] = true;
+            }
+            else
+            {
+                RightDieLED[0] = true;RightDieLED[2] = true;RightDieLED[3] = true;RightDieLED[4] = true;RightDieLED[6] = true;
+            }   
+            break;   
+        case 6:
+            if(leftRight == LEFT)
+            {
+                LeftDieLED[0] = true;LeftDieLED[1] = true;LeftDieLED[2] = true;LeftDieLED[4] = true;LeftDieLED[5] = true;LeftDieLED[6] = true;
+            }
+            else
+            {
+                RightDieLED[0] = true;RightDieLED[1] = true;RightDieLED[2] = true;RightDieLED[4] = true;RightDieLED[5] = true;RightDieLED[6] = true;
+            }   
+            break;   
+    }
+}
+
+void soundBuzzer(int Hz)
+{
+    int ticks = Hz/64;
+    int tickCount = 0;
+    float frequency = 1/(float)Hz;
+    
+    while(tickCount < ticks)
+    {
+        wait(frequency);
+        Buzzer = true;
+        wait(frequency);
+        Buzzer = false;
+        tickCount++;
+    }
+}
+
+void RandomRollCycle(int iteration)
+{
+    int leftDieRoll = 0;
+    int rightDieRoll = 0;
+
+    for(int soundLoop = iteration; soundLoop > 5; soundLoop--)
+    {
+        leftDieRoll = rand() % 6 + 1;
+        rightDieRoll = rand() % 6 + 1;
+
+        ClearLEDs();
+
+        SetDieNumber(LEFT, leftDieRoll);
+        soundBuzzer(1000);
+
+        SetDieNumber(RIGHT, rightDieRoll);
+        soundBuzzer(500);
+
+        wait(1/(float)soundLoop);
+    }
+}
+
+void ClearLEDs()
+{
+    for(int y = 0; y < 7; y++)
+    {
+        LeftDieLED[y] = false;
+        RightDieLED[y] = false;
+    }
+}
+
+int SetSensitivityLevel()
+{
+    ClearLEDs();
+    
+    sensitivityLevel++;
+    
+    if(sensitivityLevel > 6)
+        sensitivityLevel = 1;
+    
+    SetDieNumber(LEFT, sensitivityLevel);
+    
+    soundBuzzer(600);
+    wait(.25);
+}
+
+void ProgramSplash()
+{
+    for(int x = 200; x < 1000; x+=20)
+        soundBuzzer(x);
+    
+    SetDieNumber(LEFT, sensitivityLevel);
+}
+
+void ProgramStart()
+{
+    ClearLEDs();
+    for(int g = 0; g < 4; g++)
+    {
+        soundBuzzer(1000);
+        wait(0.100);
+    }
+    SetDieNumber(RIGHT, 6);
+    SetDieNumber(LEFT, 6);
+    
+    
+    
+    int16_t zAxis = 0;
+    
+    int deltaX;
+    int X1;
+    int X2;
+    
+    int deltaY;
+    int Y1;
+    int Y2;
+
+    int deltaZ;
+    int Z1;
+    int Z2;
+    
+    zAxis = acc.getZ();
+    srand (abs(zAxis));
+    
+//    int inactivityCounter = 0;
+    
+    while(true)
+    {
+        X1 = acc.getX();
+        Y1 = acc.getY();
+        Z1 = acc.getZ();
+        wait(.25);
+        X2 = acc.getX();
+        Y2 = acc.getY();
+        Z2 = acc.getZ();
+        
+        deltaX = X2 - X1;
+        deltaY = Y2 - Y1;
+        deltaZ = Z2 - Z1;        
+        
+        if(abs(deltaZ) >> (sensitivityLevel + 2))
+            RandomRollCycle(26);
+
+/*       
+        inactivityCounter++;
+        if(inactivityCounter > 500)
+        {
+            inactivityCounter = 0;
+            deepsleep();
+        }
+*/
+    }
+
+}
+
+
+
+
+
+
+
+/*
+
+intialize()
+{
+    set pins to outputs for example
+    maybe initialize teh accelerometer
+    AcelInit();
+    }
+
+int Getsense()
+{
+    int sese =1;
+    while(button not pressed)
+    {
+        if(othe rbutton)
+        {
+            sense++;
+            if sense > 6) sense =1;
+            SetLEDs(LEFT, sense);
+        }
+            
+    }
+    return sense;
+}
+void main()
+{
+    Intialize();
+    
+    sense = GetSensetivity();
+    
+    while(1)
+    {
+      int x = getaccel();
+      if(x >> (sense+3))
+        NewDiceRandom();
+      
+    }
+}
+*/