1
0
mirror of https://github.com/taigrr/arduinolibs synced 2025-01-18 04:33:12 -08:00

Document the BlinkLED and ChaseLEDs examples

This commit is contained in:
Rhys Weatherley
2012-04-11 17:05:13 +10:00
parent 45c2d09347
commit 4a4ff39952
16 changed files with 1063 additions and 20 deletions

View File

@@ -688,7 +688,7 @@ EXAMPLE_RECURSIVE = NO
# directories that contain image that are included in the documentation (see
# the \image command).
IMAGE_PATH =
IMAGE_PATH = ../libraries/BlinkLED/examples/Cylon ../libraries/BlinkLED/examples/Cylon4
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program

80
doc/blink-blink.dox Normal file
View File

@@ -0,0 +1,80 @@
/*
* Copyright (C) 2012 Southern Storm Software, Pty Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
/**
\file blink-blink.dox
\page blink_blink Blinking LED Example
The BlinkLED class provides support logic for blinking a LED connected
to an output pin. The traditional way to blink a LED uses a delay loop:
\code
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
\endcode
The problem with this code is that the entire application is blocked
during the <tt>delay()</tt>. No other activities can be serviced.
BlinkLED provides a re-entrant timer-based implementation that is
simple to use in any application and which won't block other activities.
We start this example by including the BlinkLED class and instantiating an
object instance:
\dontinclude BlinkLED/examples/Blink/Blink.pde
\skip #include
\until statusBlink
In this example we have specified that the LED is on pin D13, the LED
should be on for 70 milliseconds, and off for 930 milliseconds. This
will cause the status LED to "strobe" once per second. The LED will
be initially off for 930 milliseconds after device reset. To start
with the LED on, use the following initialization code instead:
\code
BlinkLED statusBlink(13, 70, 930, true);
\endcode
The remaining code we need is a call to BlinkLED::loop() every time around
the main application loop:
\dontinclude BlinkLED/examples/Blink/Blink.pde
\skip loop()
\until }
As can be seen, BlinkLED simplifies the process of blinking a LED quite
considerably. It is also possible to \ref BlinkLED::pause() "pause()"
and \ref BlinkLED::resume() "resume()" the blinking. This is useful in
applications where a blinking LED indicates a certain state such as
an error condition or a long-running operation that is in progress;
with the LED off at other times. The on/off blink rate can be modified at
runtime using BlinkLED::setBlinkRate(), and the LED can be set to a
specific value using BlinkLED::setState().
The full source code for the example follows:
\include BlinkLED/examples/Blink/Blink.pde
*/

101
doc/blink-cylon.dox Normal file
View File

@@ -0,0 +1,101 @@
/*
* Copyright (C) 2012 Southern Storm Software, Pty Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
/**
\file blink-cylon.dox
\page blink_cylon Cylon Eyes Example
This example shows how to use the ChaseLEDs class to simulate the Cylon
eye effect from Battlestar Galactica. Digital outputs are used to drive
six LED's in a back and forth motion, using the following schematic:
\image html Cylon.png
We start by including the ChaseLEDs class:
\dontinclude BlinkLED/examples/Cylon/Cylon.pde
\skip ChaseLEDs.h
\until ChaseLEDs.h
The next step is to define the pins that the chase will run over:
\dontinclude BlinkLED/examples/Cylon/Cylon.pde
\skip byte pins
\until cylonEyes
The chase runs from the first pin to the sixth pin and back again,
with each LED lit for 100 milliseconds before moving onto the next one.
To complete the example, we need to call ChaseLEDs::loop() each time
around our main loop to cause the chase to run:
\dontinclude BlinkLED/examples/Cylon/Cylon.pde
\skip loop()
\until }
While this example uses only six pins, it can be easily extended to any
number of pins by modifying the \c pins array and altering the schematic
accordingly.
So far we are chasing only a single LED. We could change this to chase
two adjacent LED's instead by defining a new \c CylonChase class that
inherits from ChaseLEDs:
\dontinclude BlinkLED/examples/Cylon2/Cylon2.pde
\skip class CylonChase
\until };
The important part is the implementation of the <tt>advance()</tt> method,
which overrides ChaseLEDs::advance() to provide our own scheme for lighting
the LED's each time the chase advances. We use ChaseLEDs::previousPin() to
get the pin that is 2 steps back in the sequence, set it to LOW, and then
set the previous pin (1 step back) and the next pin to HIGH. All that
remains is to change our chase initialization to use the new class:
\dontinclude BlinkLED/examples/Cylon2/Cylon2.pde
\skip byte pins
\until cylonEyes
We can do even better than this. Instead of fully lighting both LED's,
we could instead use the PWM outputs to dim the previous pin, creating a
kind of "trailing flame" effect:
\dontinclude BlinkLED/examples/Cylon3/Cylon3.pde
\skip advance(
\until }
The current chase is fixed at 100 milliseconds per LED, which takes a full
second to run the sequence. An alternative to hard-wiring the chase
rate is to hook up a 10K potentiometer to the A0 analog input:
\image html Cylon4.png
We then modify the <tt>advance()</tt> method to read the new chase rate
from the potentiometer each time the LED advances:
\dontinclude BlinkLED/examples/Cylon4/Cylon4.pde
\skip advance(
\until }
The full source code for the final version of the example follows:
\include BlinkLED/examples/Cylon4/Cylon4.pde
*/

View File

@@ -35,4 +35,14 @@ LCD shield.
\li \ref lcd_hello_world "Hello World" example for the Freetronics LCD shield.
\li \ref lcd_form "Form" example for LCD displays.
\section main_BlinkLED BlinkLED Utility Library
\li BlinkLED class that simplifies the process of blinking a LED connected
to a output pin.
\li ChaseLEDs class that simplifies the process of performing a LED chase
over several output pins.
\li \ref blink_blink "Blink" example of using BlinkLED.
\li \ref blink_cylon "Cylon" example of using ChaseLEDs to simulate
the Cylon eye effect from Battlestar Galactica.
*/