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.
Diff: main.cpp
- Revision:
- 7:e3b6f5741d9d
- Parent:
- 3:42efa00ffef4
- Child:
- 8:77fd54b4864c
diff -r 42efa00ffef4 -r e3b6f5741d9d main.cpp --- a/main.cpp Sat Sep 21 19:39:02 2013 +0000 +++ b/main.cpp Sat Sep 21 20:28:03 2013 +0000 @@ -206,11 +206,33 @@ Schedulable* next_; }; +class FadeFillRegion : public Schedulable { +public: + FadeFillRegion(int start_time, int start_led, int length, uint8_t from_color, uint8_t to_color, bool fast) + : start_led_(start_led), length_(length), from_color_(from_color), to_color_(to_color), fast_(fast) { + time_ = start_time; + Schedule(this); + } + + virtual void Run() { + for (int i = start_led_; i < start_led_ + length_; ++i) { + strip[i] = getcolor(from_color_, to_color_) | (fast_ ? FAST : 0); + } + strip_changed = true; + delete this; + } + +private: + int start_led_, length_; + uint8_t from_color_, to_color_; + bool fast_; +}; + /* Keep dropping water drops in a bucket, until it fills up. */ class DropBucketFill : public Schedulable { public: - DropBucketFill(int start_time, int start_led, int length, int drop_size, uint8_t from_color, uint8_t to_color) - : start_led_(start_led), length_(length), drop_size_(drop_size), from_color_(from_color), to_color_(to_color) { + DropBucketFill(int start_time, int start_led, int length, int drop_size, uint8_t from_color, uint8_t to_color, int fade_out_pause, uint8_t fade_out_color) + : start_led_(start_led), length_(length), original_length_(length), drop_size_(drop_size), from_color_(from_color), to_color_(to_color), fade_out_pause_(fade_out_pause), fade_out_color_(fade_out_color) { time_ = start_time; Schedule(this); } @@ -222,22 +244,24 @@ if (length_ > 0) { // There's still space in the bucket. Drop a new drop. for (int i = 0; i < min(drop_size_, length_); ++i) { - Schedulable* next_drop = NULL; - next_drop = this; + Schedulable* next_drop = this; new RegionWalkingFadeInOut(time_ + (256 * i / drop_size_), i, drop_size_, start_led_, length_, from_color_, to_color_, true, false, true, next_drop); } length_--; } else { // There's no more space in the bucket. Bail out. + new FadeFillRegion(global_tick + fade_out_pause_, start_led_, original_length_, to_color_, fade_out_color_, false); delete this; return; } } private: - int start_led_, length_; + int start_led_, length_, original_length_; int drop_size_; uint8_t from_color_, to_color_; + int fade_out_pause_; + uint8_t fade_out_color_; }; void init_board() { @@ -282,9 +306,8 @@ //new RegionWalkingFadeInOut((256 * i / stride), i, stride, 5, 30, BLACK, BLUE, true, false); } - new DropBucketFill(0, 10, 20, 3, BLACK, BLUE); - - new DropBucketFill(0, 30, 20, 11, BLACK, GREEN); + new DropBucketFill(0, 10, 20, 3, BLACK, BLUE, 2560, BLACK); + new DropBucketFill(0, 30, 20, 11, BLACK, GREEN, 2560, BLACK); run_loop(); } \ No newline at end of file