- commit
- e58a19a
- parent
- 2424f3e
- author
- Neale Pickett
- date
- 2016-09-27 22:20:03 -0600 MDT
Added all states, all sounds, this is usable
4 files changed,
+60,
-22
+1,
-1
1@@ -10,7 +10,7 @@ MusicPlayer::MusicPlayer(int8_t cs, int8_t dcs, int8_t dreq, int8_t cardcs)
2 {
3 musicPlayer = new Adafruit_VS1053_FilePlayer(cs, dcs, dreq, cardcs);
4 musicPlayer->begin();
5- musicPlayer->setVolume(20, 20); // lower = louder
6+ musicPlayer->setVolume(1, 1); // lower = louder
7 musicPlayer->sineTest(0x44, 500);
8 SD.begin(cardcs);
9 }
+16,
-9
1@@ -65,22 +65,29 @@ void loop() {
2
3 switch (state) {
4 case 0:
5- if (trigger) {
6- if (music->startPlayingFile("track001.mp3")) {
7- state = 1;
8- sync1->charge();
9- }
10+ if (trigger && music->startPlayingFile("track001.mp3")) {
11+ state = 1;
12+ sync1->charge();
13 }
14 break;
15 case 1:
16 if (! music->isPlaying()) {
17- if (music->startPlayingFile("track002.mp3")) {
18- state = 4;
19- sync1->standby();
20- }
21+ state = 3;
22+ }
23+ break;
24+ case 3:
25+ if (trigger && music->startPlayingFile("track003.mp3")) {
26+ state = 4;
27+ sync1->fire();
28 }
29 break;
30 case 4:
31+ if (! trigger && music->startPlayingFile("track002.mp3")) {
32+ state = 5;
33+ sync1->discharge();
34+ }
35+ break;
36+ case 5:
37 if (! music->isPlaying()) {
38 state = 0;
39 }
+38,
-12
1@@ -12,29 +12,47 @@ Synchrotron::Synchrotron(uint16_t n, uint8_t p, neoPixelType t)
2 cur = 0;
3 pxl->begin();
4 pxl->show();
5- standby();
6-}
7
8-Synchrotron::standby() {
9- tickrate = 12;
10+ // Inital values of 0 will make it look like it's sort of warming up
11 ticks = 0;
12- r = brightness;
13+ tickrate = 200;
14+ r = 0;
15 g = 0;
16 b = 0;
17+
18+ standby();
19+}
20+
21+Synchrotron::transition(int duration, int final_tickrate, byte final_r, byte final_g, byte final_b)
22+{
23+ transition_length = duration;
24+ transition_elapsed = 0;
25+
26+ dtickrate = (final_tickrate - tickrate) / (float)duration;
27+ dr = (final_r - r) / (float)duration;
28+ dg = (final_g - g) / (float)duration;
29+ db = (final_b - b) / (float)duration;
30+
31+ initial_tickrate = tickrate;
32+ initial_r = r;
33+ initial_g = g;
34+ initial_b = b;
35+}
36+
37+Synchrotron::standby() {
38+ transition(400, 12, brightness, 0, 0);
39 }
40
41 Synchrotron::charge() {
42- tickrate = 2;
43- ticks = 0;
44- r = brightness;
45- g = brightness / 8;
46- b = 0;
47+ transition(400, 2, brightness, brightness/8, 0);
48 }
49
50 Synchrotron::fire() {
51+ transition(40, 1, brightness/8, brightness/4, brightness/2);
52 }
53
54 Synchrotron::discharge() {
55+ standby();
56 }
57
58 Synchrotron::tick(unsigned long jiffies) {
59@@ -51,8 +69,16 @@ Synchrotron::tick(unsigned long jiffies) {
60 pxl->show();
61
62 ticks += 1;
63- if (ticks == tickrate) {
64- ticks = 0;
65+ if (ticks >= tickrate) {
66 cur = (cur + 1) % npixels;
67+ ticks = 0;
68+ }
69+
70+ if (transition_length > transition_elapsed) {
71+ tickrate = initial_tickrate + (dtickrate * transition_elapsed);
72+ r = initial_r + (dr * transition_elapsed);
73+ g = initial_g + (dg * transition_elapsed);
74+ b = initial_b + (db * transition_elapsed);
75+ transition_elapsed += 1;
76 }
77 }
+5,
-0
1@@ -10,8 +10,13 @@ class Synchrotron {
2 int tickrate; // How many millis between pixel position changes
3 int ticks; // How many ticks have elapsed since last position change
4 byte r, g, b; // Current color
5+
6+ int transition_length, transition_elapsed;
7+ int initial_tickrate, initial_r, initial_g, initial_b;
8+ float dtickrate, dr, dg, db;
9 public:
10 Synchrotron(uint16_t n, uint8_t p=6, neoPixelType t=NEO_GRB + NEO_KHZ800);
11+ transition(int duration, int final_tickrate, byte final_r, byte final_g, byte final_b);
12 standby();
13 charge();
14 fire();