Triggers Lightning LED and sounds effects

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
AndyA
Date:
Tue Sep 27 11:06:11 2016 +0000
Commit message:

Changed in this revision

effects.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r a010acebe0ac effects.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/effects.cpp	Tue Sep 27 11:06:11 2016 +0000
@@ -0,0 +1,165 @@
+#include "mbed.h"
+
+// LED on/off times.
+// First time is time between toggling sound IO pin and starting lights
+// Allows for audio playback start latency and lead in time.
+const float thunder1Times[] = {0.1,0.3,0.1,0.3,0.1,0.2,0.2,0.3,0.1,0.3};
+const int thunder1Len       =   1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1  ;
+
+const float thunder2Times[] = {0.1,0.3,0.1,0.3,0.1,0.2, 0.6 ,0.3,0.1,0.3,0.2,0.1, 2 ,0.3,0.15,0.4,0.1,0.2};
+const int thunder2Len       =   1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1  + 1 + 1 + 1  ;
+
+// min time between starting a thunder playback and starting the next audio
+const float thunder1AudioLen = 20;
+const float thunder2AudioLen = 25;
+
+// min time between starting a SFX playback and starting the next audio
+const float effectAudioLen = 5;
+
+
+// actual time between sound starts will be these numbers plus the thunder/effect length above.
+const float minTimeBetweenSounds = 10;
+const float maxTimeBetweenSounds = 20;
+
+// percentage chance of lightnings
+const int pLightning = 40;
+const int pLightning2 = 15;
+
+
+const int randomRange = 10*(maxTimeBetweenSounds - minTimeBetweenSounds); // range of time between sounds in units of 10ths of a second 
+
+
+DigitalOut soundEffectPin(P0_19);
+DigitalOut thunder1Pin(P0_4);
+DigitalOut thunder2Pin(P0_5);
+
+DigitalOut LEDsPin(P0_18);
+
+DigitalOut LED_1(LED1);
+DigitalOut LED_2(LED2);
+DigitalOut LED_3(LED3);
+BusOut LED_47(LED4,LED5,LED6,LED7);
+
+
+
+
+void LEDon()
+{
+    LEDsPin = 1;
+    LED_1 = 1;
+}
+
+void LEDoff()
+{
+    LEDsPin = 0;
+    LED_1 = 0;
+}
+
+void toggleLED()
+{
+    LEDsPin = !LEDsPin;
+    LED_1 = LEDsPin;
+}
+
+void randomSoundEffect(void)
+{
+    LED_2 = 1;
+    soundEffectPin = 0;
+    wait(1);
+    LED_2 = 0;
+    soundEffectPin = 1;
+    wait(effectAudioLen);
+}
+
+void thunderEffect1(void)
+{
+    LEDoff();
+    thunder1Pin = 0;
+    int count = 0;
+    float totalTime = 0;
+    while (count < thunder1Len) {
+        wait (thunder1Times[count]);
+        totalTime += thunder1Times[count];
+        toggleLED();
+        count++;
+    }
+    LEDoff();
+    thunder1Pin = 1;
+    if (thunder1AudioLen > totalTime)
+        wait (thunder1AudioLen - totalTime);
+}
+
+void thunderEffect2(void)
+{
+    LEDoff();
+    thunder2Pin = 0;
+    int count = 0;
+    float totalTime = 0;
+    while (count < thunder2Len) {
+        wait (thunder2Times[count]);
+        totalTime += thunder2Times[count];
+        toggleLED();
+        count++;
+    }
+    LEDoff();
+    thunder2Pin = 1;
+    if (thunder2AudioLen > totalTime)
+        wait (thunder2AudioLen - totalTime);
+}
+
+
+void playEffect(void)
+{
+    int randomOrder = rand() % 100;
+    LED_47 = randomOrder;
+    LED_3 = 1;
+    if (randomOrder < pLightning) {
+        LED_47 = 1;
+        thunderEffect1();
+    } else if (randomOrder < (pLightning+pLightning2)) {
+        LED_47 = 2;
+        thunderEffect2();
+    } else {
+        LED_47 = 3;
+        randomSoundEffect();
+    }
+    LED_3 = 0;
+}
+
+void setupRandom(void)
+{
+    AnalogIn RandomIn(P0_14);
+    // create a 32 bit number out of 32 LSBs from the ADC
+    uint32_t seedValue = 0;
+    uint16_t value;
+    uint8_t counter;
+
+    for (counter = 0; counter < 32; counter++) {
+        seedValue = seedValue<<1;
+        value = RandomIn.read_u16(); // reads a 10 bit ADC normalised to 16 bits.
+        if (value & 0x0040)          // LSB of ADC output = 1
+            seedValue++;
+    }
+
+    srand(seedValue);
+}
+
+main()
+{
+    LED_47 = 0;
+    LED_2 = 0;
+    LED_3 = 0;
+    LEDoff();
+    thunder1Pin = 1;
+    thunder2Pin = 1;
+    soundEffectPin = 1;
+
+    setupRandom();
+
+    float randomTime;
+    while (true) {
+        randomTime = minTimeBetweenSounds + (rand() % randomRange)/10.0;
+        wait(randomTime);
+        playEffect();
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r a010acebe0ac mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Sep 27 11:06:11 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8ed44a420e5c
\ No newline at end of file