From 7d124dfb853b42b1e14881b66b714df34d15d15e Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Thu, 31 May 2012 10:47:52 +1000 Subject: [PATCH] Support class for Charlieplexing large numbers of LED's --- doc/Doxyfile | 2 +- doc/blink-charlieplex.dox | 77 +++ doc/mainpage.dox | 4 + libraries/BlinkLED/Charlieplex.cpp | 350 ++++++++++ libraries/BlinkLED/Charlieplex.h | 59 ++ .../examples/Charlieplex/Charlieplex.pde | 16 + .../examples/Charlieplex/charlieplex2pin.fig | 87 +++ .../examples/Charlieplex/charlieplex2pin.png | Bin 0 -> 2826 bytes .../examples/Charlieplex/charlieplex3pin.fig | 210 ++++++ .../examples/Charlieplex/charlieplex3pin.png | Bin 0 -> 6027 bytes .../examples/Charlieplex/charlieplex4pin.fig | 394 +++++++++++ .../examples/Charlieplex/charlieplex4pin.png | Bin 0 -> 10658 bytes .../examples/Charlieplex/charlieplex5pin.fig | 649 ++++++++++++++++++ .../examples/Charlieplex/charlieplex5pin.png | Bin 0 -> 16928 bytes .../examples/Charlieplex/charlieplexeg.fig | 215 ++++++ .../examples/Charlieplex/charlieplexeg.png | Bin 0 -> 8858 bytes .../CharlieplexChase/CharlieplexChase.pde | 36 + libraries/BlinkLED/keywords.txt | 10 + 18 files changed, 2108 insertions(+), 1 deletion(-) create mode 100644 doc/blink-charlieplex.dox create mode 100644 libraries/BlinkLED/Charlieplex.cpp create mode 100644 libraries/BlinkLED/Charlieplex.h create mode 100644 libraries/BlinkLED/examples/Charlieplex/Charlieplex.pde create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex2pin.fig create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex2pin.png create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex3pin.fig create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex3pin.png create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex4pin.fig create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex4pin.png create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex5pin.fig create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplex5pin.png create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplexeg.fig create mode 100644 libraries/BlinkLED/examples/Charlieplex/charlieplexeg.png create mode 100644 libraries/BlinkLED/examples/CharlieplexChase/CharlieplexChase.pde diff --git a/doc/Doxyfile b/doc/Doxyfile index b987d7fa..ec0054f4 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -688,7 +688,7 @@ EXAMPLE_RECURSIVE = NO # directories that contain image that are included in the documentation (see # the \image command). -IMAGE_PATH = ../libraries/BlinkLED/examples/Cylon ../libraries/BlinkLED/examples/Cylon4 ../libraries/BlinkLED/examples/StarTrek ../libraries/LCD/examples/HelloWorld ../libraries/LCD/examples/Form ../libraries/RTC/examples/AlarmClock ../libraries/DMD +IMAGE_PATH = ../libraries/BlinkLED/examples/Cylon ../libraries/BlinkLED/examples/Cylon4 ../libraries/BlinkLED/examples/StarTrek ../libraries/BlinkLED/examples/Charlieplex ../libraries/LCD/examples/HelloWorld ../libraries/LCD/examples/Form ../libraries/RTC/examples/AlarmClock ../libraries/DMD # 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 diff --git a/doc/blink-charlieplex.dox b/doc/blink-charlieplex.dox new file mode 100644 index 00000000..a9afe489 --- /dev/null +++ b/doc/blink-charlieplex.dox @@ -0,0 +1,77 @@ +/* + * 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-charlieplex.dox +\page blink_charlieplex Charlieplexing Example + +Charlieplexing +is a technique for multiplexing large numbers of LED's on a small +number of microcontroller output pins. LED's are arranged in +complementary pairs and managed by the Charlieplex class. For this +example we are going to use 3 output pins to drive 6 LED's: + +\image html charlieplexeg.png + +The technique can be expanded to even larger numbers of LED's. +See the documentation for the Charlieplex class for a description of +how to connect up larger numbers of pins in a Charlieplexed arrangement. + +The first step is to initialize a Charlieplex object with the output +pins it needs to drive: + +\dontinclude BlinkLED/examples/Charlieplex/Charlieplex.pde +\skip #include +\until charlie + +Then in setup() we use Charlieplex::setLed() and +Charlieplex::setPwmLed() to set three of the six LED's to +the desired output values: + +\dontinclude BlinkLED/examples/Charlieplex/Charlieplex.pde +\skip setup +\until } + +Charlieplexing can only light a single LED at a time. It is therefore +necessary to constantly scan the entire LED array, alternatively turning +LED's on and off. The user's peristence of vision fills in the gaps. +To do this, we call Charlieplex::loop(): + +\dontinclude BlinkLED/examples/Charlieplex/Charlieplex.pde +\skip loop +\until } + +The downside of Charlieplexing is that when multiple LED's are lit, each LED +will appear to be dimmer than if only a single LED was lit. This can be +counteracted by using brighter LED's or smaller resistors. The danger with +smaller resistors is that if the program crashes or locks up for some reason, +a large amount of continuous current could be fed through a single LED and +cause it to exceed its maximum rating and burn out. + +The full source code for the example follows: + +\include BlinkLED/examples/Charlieplex/Charlieplex.pde + +A more complex example that performs a LED chase over the 6 LED's follows: + +\include BlinkLED/examples/CharlieplexChase/CharlieplexChase.pde +*/ diff --git a/doc/mainpage.dox b/doc/mainpage.dox index 645b6ff5..8cfc9527 100644 --- a/doc/mainpage.dox +++ b/doc/mainpage.dox @@ -56,11 +56,15 @@ to draw and animate bitmaps. to a output pin. \li ChaseLEDs class that simplifies the process of performing a LED chase over several output pins. +\li Charlieplex class that manages a matrix of LED's arranged in a +Charlieplexing +arrangement. \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. \li \ref blink_startrek "StarTrek" example for lighting a starship Enterprise model kit. +\li \ref blink_charlieplex "Charlieplex" example. \section main_I2C I2C Utility Library diff --git a/libraries/BlinkLED/Charlieplex.cpp b/libraries/BlinkLED/Charlieplex.cpp new file mode 100644 index 00000000..144c9d59 --- /dev/null +++ b/libraries/BlinkLED/Charlieplex.cpp @@ -0,0 +1,350 @@ +/* + * 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. + */ + +#include "Charlieplex.h" +#if defined(ARDUINO) && ARDUINO >= 100 +#include +#else +#include +#endif +#include +#include + +/** + * \class Charlieplex Charlieplex.h + * \brief Manage an array of LED's in a charlieplexed arrangement. + * + * Charlieplexing + * is a technique for multiplexing large numbers of LED's on a small + * number of microcontroller output pins. LED's are arranged in + * complementary pairs; the simplest being for two output pins: + * + * \image html charlieplex2pin.png + * + * When Pin1 is 1 and Pin2 is 0, LED1 will be lit. When Pin1 is 0 and + * Pin2 is 1, then LED2 will be lit. The technique extends to 3 pins + * as follows: + * + * \image html charlieplex3pin.png + * + * In this case, LED5 is lit when Pin1 is 1, Pin3 is 0, and Pin2 is set + * to a high-impedance input to "disconnect" it. + * + * Charlieplex presents a simple array of led() values that indicate whether + * each LED is on, off, or in an intermediate PWM state (if setPwmLed() + * is used). The application must call loop() or refresh() on a regular + * basis to ensure that the multiplexed display is kept up to date. + * The following example drives 6 LED's connected to the output pins + * D9, D10, and D11: + * + * \dontinclude BlinkLED/examples/Charlieplex/Charlieplex.pde + * \skip #include + * \until charlie.loop + * \until } + * + * The following diagram extends the circuit for 4 output pins and 12 LED's: + * + * \image html charlieplex4pin.png + * + * The following diagram extends the circuit for 5 output pins and 20 LED's: + * + * \image html charlieplex5pin.png + * + * Circuits for higher numbers of LED's get increasingly complex. For those + * cases it can be easier to use traditional multiplexing matrix arrangements + * and shift registers. The DMD class does this for a specific kind of + * large dot matrix display. Otherwise, use the following pseudocode to + * determine how to connect the LED's for higher numbers of pins: + * + * \code + * n = 1 + * for Pass = 1 to NumPins-1: + * for Pin = 1 to NumPins-Pass: + * LED[n] is connected between Pin (anode) and Pin+Pass (cathode) + * LED[n+1] is connected between Pin+Pass (anode) and Pin (cathode) + * n = n + 2 + * \endcode + * + * Note: while the above circuit diagrams and psuedocode use 1-based + * numbering for LED's, Charlieplex uses 0-based numbering in the led(), + * setLed(), pwmLed(), and setPwmLed() functions. + * + * It isn't necessary to wire up all LED's. If you only need 10 LED's, + * then use the 4-output circuit and omit LED11 and LED12. Charlieplex + * only drives LED's that are lit; LED's that are unlit or unused will + * be skipped during the refresh scan. The maximum number of LED's that + * that can be driven by a specific number of pins is given by the + * following table: + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Number of PinsNumber of LED's
22
36
412
520
630
742
856
972
1090
nn * (n - 1)
+ */ + +/** + * \brief Constructs a new charliexplexing array where the output pins + * are specified by the \a numPins entries in \a pins. + * + * Note: \a numPins must be 2 or greater for correct operation. + * + * \sa count(), setLed() + */ +Charlieplex::Charlieplex(const uint8_t *pins, uint8_t numPins) + : _count(((int)numPins) * (numPins - 1)) + , _lastTime(micros()) + , _currentIndex(-1) + , _pwmPhase(0xC0) +{ + // Determine the best hold time for 50 Hz refresh when all LED's + // are lit. Divide it again by 4 (to get 200 Hz) to manage the + // simulated PWM in refresh(). + _holdTime = 20000 / _count / 4; + + // Allocate the pin arrays and populate them. Doing this now makes + // refresh() more efficient later, at the expense of some memory. + _pins1 = (uint8_t *)malloc(_count); + _pins2 = (uint8_t *)malloc(_count); + int n = 0; + for (uint8_t pass = 1; pass < numPins; ++pass) { + for (uint8_t pin = 0; pin < (numPins - pass); ++pin) { + _pins1[n] = _pins2[n + 1] = pins[pin]; + _pins2[n] = _pins1[n + 1] = pins[pin + pass]; + n += 2; + } + } + + // Allocate space for the LED value array and zero it. + _values = (uint8_t *)malloc(_count); + memset(_values, 0, _count); + + // Start with all pins configured as floating inputs (all LED's off). + for (uint8_t pin = 0; pin < numPins; ++pin) { + digitalWrite(pins[pin], LOW); + pinMode(pins[pin], INPUT); + } +} + +/** + * \brief Destroys this charlieplexed array. + */ +Charlieplex::~Charlieplex() +{ + free(_pins1); + free(_pins2); + free(_values); +} + +/** + * \fn int Charlieplex::count() const + * \brief Returns the number of LED's in this charlieplexed array based + * on the number of pins. + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Number of PinsNumber of LED's
22
36
412
520
630
742
856
972
1090
nn * (n - 1)
+ * + * \sa led() + */ + +/** + * \fn bool Charlieplex::led(int index) const + * \brief Returns the value of the LED at \a index in the charplexed array; + * true if lit; false if not lit. + * + * If the LED is displaying a PWM value, then this function will return + * true for any non-zero PWM value. + * + * \sa setLed(), pwmLed() + */ + +/** + * \fn void Charlieplex::setLed(int index, bool value) + * \brief Sets the \a value of the LED at \a index in the charliplexed array. + * + * The brightness of the LED will be proportional to the number of LED's + * that are currently lit, as the holdTime() refresh rate will cause the + * LED to appear to dim; the more LED's that are lit the less overall time + * each individual LED is held on. For best results, only a single LED should + * be lit at once or higher-brightness LED's should be used. + * + * \sa led(), setPwmLed() + */ + +/** + * \fn uint8_t Charlieplex::pwmLed(int index) const + * \brief Returns the PWM value of the LED at \a index in the charplexed array; + * between 0 and 255. + * + * \sa setPwmLed(), led() + */ + +/** + * \fn void Charlieplex::setPwmLed(int index, uint8_t value) + * \brief Sets the PWM \a value of the LED at \a index in the charliplexed + * array; between 0 and 255. + * + * If this function is used, then it is assumed that the output pins are + * capable of PWM output. + * + * The PWM-specified brightness of the LED will also be affected to the + * number of LED's that are currently lit, as the holdTime() refresh rate + * will cause the LED to appear to dim; the more LED's that are lit the + * less overall time each individual LED is held on. For best results, + * only a single LED should be lit at once or higher-brightness LED's + * should be used. + * + * \sa pwmLed(), setLed() + */ + +/** + * \fn unsigned long Charlieplex::holdTime() const + * \brief Returns the number of microseconds that each LED should be + * held on for before moving onto the next in loop(). + * + * The default value is calculated so that all LED's can be refreshed + * with a rate of at least 200 Hz, which is necessary for handling PWM + * output on multiple LED's. The less LED's that are lit at once, + * the faster the display will refresh. + * + * \sa setHoldTime(), loop() + */ + +/** + * \fn void Charlieplex::setHoldTime(unsigned long us) + * \brief Sets the number of microseconds that each LED should be + * held on for before moving onto the next in loop() to \a us. + * + * \sa holdTime(), loop() + */ + +/** + * \brief Runs the multiplexing loop, to display the LED states on + * the charlieplexed array. + * + * If holdTime() microseconds have elapsed since the last call to loop(), + * then the current LED is turned off and the next LED that needs to be + * lit is turned on. + * + * LED's that do not need to be lit are skipped. The total time for a + * single pass through all lit LED's may be very short if only a few + * LED's are lit at once. If all LED's are lit, then the total time for + * a single pass will be count() * holdTime() microseconds. + * + * If the application is using timer interrupts to drive the multiplexing + * process, then use refresh() instead of loop(). + * + * \sa led(), pwmLed(), holdTime(), refresh() + */ +void Charlieplex::loop() +{ + unsigned long us = micros(); + if ((us - _lastTime) >= _holdTime) { + _lastTime = us; + refresh(); + } +} + +/** + * \brief Refreshes the charlieplexed array by advancing to the next LED + * that needs to be lit. + * + * This function is intended to be called from a timer interrupt service + * routine to advance the multiplexing state without the main application + * having to explicitly call loop(). + * + * \sa loop() + */ +void Charlieplex::refresh() +{ + // Find the next LED to be lit. + int prevIndex = _currentIndex; + int limit = _count; + while (limit >= 0) { + _currentIndex = (_currentIndex + 1) % _count; + if (_values[_currentIndex] != 0) + break; + --limit; + } + if (limit < 0) { + // No LED's are lit. Turn off the previous LED and exit. + if (prevIndex != -1) { + digitalWrite(_pins1[prevIndex], LOW); + digitalWrite(_pins2[prevIndex], LOW); + pinMode(_pins1[prevIndex], INPUT); + pinMode(_pins2[prevIndex], INPUT); + } + _currentIndex = -1; + return; + } + + // Light the current LED. + uint8_t value = _values[_currentIndex]; + uint8_t pin1 = _pins1[_currentIndex]; + uint8_t pin2 = _pins2[_currentIndex]; + _pwmPhase += 0x40; + if (prevIndex != _currentIndex) { + // Turn off the previous LED. + if (prevIndex != -1) { + digitalWrite(_pins1[prevIndex], LOW); + digitalWrite(_pins2[prevIndex], LOW); + pinMode(_pins1[prevIndex], INPUT); + pinMode(_pins2[prevIndex], INPUT); + } + + // We simulate PWM using a phase counter because analogWrite() + // combined with holdTime() causes too much flickering if more + // than one LED is lit. This reduces the PWM resolution to 1 in 4. + pinMode(pin1, OUTPUT); + pinMode(pin2, OUTPUT); + if (value > _pwmPhase) + digitalWrite(pin1, HIGH); + else + digitalWrite(pin1, LOW); + } else { + // Same LED as previous. Since there is only a single LED + // that is lit, we can use analogWrite() to set the PWM state. + if (value == 255) + digitalWrite(pin1, HIGH); + else + analogWrite(pin1, value); + } +} diff --git a/libraries/BlinkLED/Charlieplex.h b/libraries/BlinkLED/Charlieplex.h new file mode 100644 index 00000000..b3fbe881 --- /dev/null +++ b/libraries/BlinkLED/Charlieplex.h @@ -0,0 +1,59 @@ +/* + * 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. + */ + +#ifndef Charlieplex_h +#define Charlieplex_h + +#include + +class Charlieplex +{ +public: + Charlieplex(const uint8_t *pins, uint8_t numPins); + ~Charlieplex(); + + int count() const { return _count; } + + bool led(int index) const { return _values[index] != 0; } + void setLed(int index, bool value) { _values[index] = (value ? 255 : 0); } + + uint8_t pwmLed(int index) const { return _values[index]; } + void setPwmLed(int index, uint8_t value) { _values[index] = value; } + + unsigned long holdTime() const { return _holdTime; } + void setHoldTime(unsigned long us) { _holdTime = us; } + + void loop(); + void refresh(); + +private: + int _count; + uint8_t *_pins1; + uint8_t *_pins2; + uint8_t *_values; + unsigned long _holdTime; + unsigned long _lastTime; + int _currentIndex; + uint8_t _pwmPhase; +}; + +#endif diff --git a/libraries/BlinkLED/examples/Charlieplex/Charlieplex.pde b/libraries/BlinkLED/examples/Charlieplex/Charlieplex.pde new file mode 100644 index 00000000..fd0b9d21 --- /dev/null +++ b/libraries/BlinkLED/examples/Charlieplex/Charlieplex.pde @@ -0,0 +1,16 @@ +/* This example is placed into the public domain */ + +#include + +byte pins[3] = {9, 10, 11}; +Charlieplex charlie(pins, sizeof(pins)); + +void setup() { + charlie.setLed(0, true); // Turn on LED1 + charlie.setLed(3, true); // Turn on LED4 + charlie.setPwmLed(5, 64); // Set LED6 to one-quarter on +} + +void loop() { + charlie.loop(); +} diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplex2pin.fig b/libraries/BlinkLED/examples/Charlieplex/charlieplex2pin.fig new file mode 100644 index 00000000..2ae9b2ee --- /dev/null +++ b/libraries/BlinkLED/examples/Charlieplex/charlieplex2pin.fig @@ -0,0 +1,87 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 3825 3105 4275 3195 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 3150 3825 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 3150 4158 3110 4104 3190 4050 3110 3996 3190 3942 3110 + 3915 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 3150 4180 3150 +-6 +6 4410 3375 4635 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 4500 3600 4545 3510 4455 3510 4500 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 3600 4500 3735 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4445 3600 4555 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 3555 4590 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 3600 4635 3555 4590 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 3510 4635 3465 4590 3465 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 3465 4590 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 3375 4500 3510 +-6 +6 3825 4005 4275 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 4050 3825 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 4050 4158 4010 4104 4090 4050 4010 3996 4090 3942 4010 + 3915 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 4050 4180 4050 +-6 +6 4455 3105 4545 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 3150 30 30 4500 3150 4500 3180 +-6 +6 4455 4005 4545 4095 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 4050 30 30 4500 4050 4500 4080 +-6 +6 5310 3375 5535 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 5400 3510 5445 3600 5355 3600 5400 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 3510 5400 3375 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5345 3510 5455 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 3555 5490 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 3510 5535 3555 5490 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 3600 5535 3645 5490 3645 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 3645 5490 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 3735 5400 3600 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4230 3150 5400 3150 5400 3420 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 3420 4500 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4275 4050 5400 4050 5400 3690 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 3735 4500 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 3870 3150 3600 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 3825 4050 3600 4050 +4 0 0 50 -1 0 12 0.0000 4 135 480 5625 3645 LED2\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 4725 3645 LED1\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 3105 3195 Pin1\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 3105 4095 Pin2\001 diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplex2pin.png b/libraries/BlinkLED/examples/Charlieplex/charlieplex2pin.png new file mode 100644 index 0000000000000000000000000000000000000000..838b30a356cfef2d857552a3a39916544380950d GIT binary patch literal 2826 zcmdT`X*3(!77pb$JR~YjQA1MH6jLv1tSdwe6+(^W5<#V!8e(b*t+A%I7u8Zjl`3(m zxs@VXL#Zp&OiZPvy+MkiqT;1*TJOjE@&3FYZ?CoYKI`ng*IDbV{q1k3+GEhdf|7y& z06^Hv(%gaT$GB<(i_DPYUP_0dT*DlL{KFz~p?(0g z{dpKVAcz!3!iN%q!(jUAn%apKL2k` zG>q!Un|I-!knYeHsb(fsgyb7A8ZPY) zcoXs(R(O(!EPYVT}gUEs~)qtdC+R{7r~R*nOqI zz(8YT4;2K-3|=PTo#^w<^>y_tF`VytV28>JzqUq&tk1NJJhk(p zh7n?7Vgdq`u5)&FBAz(F6NQ9?GVa_FL!OKI7QDCVX9_+)f`ACZ0_ZI`@!L!G*8HZm z#EV!6@)nU159^2y-&!7EJP#5>w#OZEmIqGWGSSzc!c42Gszygg*B)>V_V@PoI2;Zp zR-|%hHLsj5dw{i8urg>h6b6CNkw<^}seWp;x3_n6^uoE~Ag%t&qltdv$%On|zt2<= z7WYt(=zOYl&l+ZL{rSf`Pum(A8mLr3M$Yi1!6F5bd(dQDSs~JKahqlTnaO+^{2qB` zpnE9XGuN-bJ|1?feWsj1p;#-gji017Hg<{cf7`$Z1+ivkJY0NE!7l;f8Ferq5RO~n z|K%kN$Ye5WRnvUHdWmq$S|2n~%$1=wa>nK5APRszQBm{?(Gq26uMrsDo?kTfRs?x_A0+YDn+VIps9 zA7`2Wh;vul^Z-tXXPXW4ZKsq8{0XuW80ieq;S62 zM-jn%)EY6Q&svr|>RGtwME&oR*GK#l+53B2D{axc>+>`dLqnTbrUrYn;|#~lcCMKi zyh2#0`E7@{6`#r4Pe@33C+os(hAsCfz?ziG{r&}eG2$-S3xYyny)!FW`(HkYutjCg z#aIF*BqUOsT&kR`vWx};Ul=r`_n9p>xeFUPq;>mfOWr?{wxp!wsaJf`B%w+Q&sC&Yxqd$X+^~zVzl!X^PU5kD*hVLbXd)f3)|d@H=G5+m3X6 zhVgAb2c@T{;{;m6na*L|S`XSiX|dAOX5V1?L;WtS^>LK)J?qp24Fn=)Z zNp&qmEFh;NDT#k_txHzXZPT0KfPj`NdLJ-~ySuyR=H^^CYwENTsf zvS1yOm?sx^M40X6N*7trThL*Ac{|>IH3c1@a59NBS34U%+r`25iVpn}X9~Vyql&-c zzbR#M@Ek1d9{QpgcLxmyoX{#wyP;=>CaQ~OXFVqu3P^O-dvDq7>vnd7Qw^6ier;7s^I4^d3yFxt9zkT%bahVyk#(;BB9;X;1d#Vzj41L71IouUr|On_ks;sg?dRtg6a;EcfITQKX0cdy zP!%<#+;@EM4-OGCDl2cl8ZPvMMSjjZe>z)~4|n;pO7WoVr#PM)wH?lH>Jgq3?`Jh_ z9drG}8*;4`z)DXb%MN{$Q&Vo9o=HS&!gGX_=p(s9c!d`1T#xvLN6?ksogM#%Dc}6` z5+)VV?;Rvv-M)}&qr8?&qYn=s!>@8FlT0R)NF>kH)bAzERo99Xf$=cl`&!VA2-}hI z@o^x$oZwvLgu=>OZIWpo>gc6aLq0xLj=G3+#|K(0pPLDCt>9Cz*ymGh zZ?dcYIRtn$Lcn$#RGr|b!c|bR%|Um$M}t}Ut0d< d!x&G@KwQpubl?A-fgUe9lHIMNqW16K`B$mWRoegn literal 0 HcmV?d00001 diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplex3pin.fig b/libraries/BlinkLED/examples/Charlieplex/charlieplex3pin.fig new file mode 100644 index 00000000..716c2f9a --- /dev/null +++ b/libraries/BlinkLED/examples/Charlieplex/charlieplex3pin.fig @@ -0,0 +1,210 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 3825 3105 4275 3195 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 3150 3825 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 3150 4158 3110 4104 3190 4050 3110 3996 3190 3942 3110 + 3915 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 3150 4180 3150 +-6 +6 4410 3375 4635 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 4500 3600 4545 3510 4455 3510 4500 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 3600 4500 3735 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4445 3600 4555 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 3555 4590 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 3600 4635 3555 4590 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 3510 4635 3465 4590 3465 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 3465 4590 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 3375 4500 3510 +-6 +6 3825 4005 4275 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 4050 3825 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 4050 4158 4010 4104 4090 4050 4010 3996 4090 3942 4010 + 3915 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 4050 4180 4050 +-6 +6 4455 3105 4545 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 3150 30 30 4500 3150 4500 3180 +-6 +6 4455 4005 4545 4095 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 4050 30 30 4500 4050 4500 4080 +-6 +6 3825 4905 4275 4995 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 4950 3825 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 4950 4158 4910 4104 4990 4050 4910 3996 4990 3942 4910 + 3915 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 4950 4180 4950 +-6 +6 4410 4275 4635 4635 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 4500 4500 4545 4410 4455 4410 4500 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 4500 4500 4635 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4445 4500 4555 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 4455 4590 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 4500 4635 4455 4590 4455 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 4410 4635 4365 4590 4365 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 4365 4590 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 4275 4500 4410 +-6 +6 6210 3915 6435 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 6300 4140 6345 4050 6255 4050 6300 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6300 4140 6300 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6245 4140 6355 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6435 4095 6390 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6435 4140 6435 4095 6390 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6435 4050 6435 4005 6390 4005 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6435 4005 6390 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6300 3915 6300 4050 +-6 +6 5310 3375 5535 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 5400 3510 5445 3600 5355 3600 5400 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 3510 5400 3375 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5345 3510 5455 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 3555 5490 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 3510 5535 3555 5490 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 3600 5535 3645 5490 3645 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 3645 5490 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 3735 5400 3600 +-6 +6 5310 4275 5535 4635 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 5400 4410 5445 4500 5355 4500 5400 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 4410 5400 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5345 4410 5455 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 4455 5490 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 4410 5535 4455 5490 4455 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 4500 5535 4545 5490 4545 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 4545 5490 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 4635 5400 4500 +-6 +6 7110 3915 7335 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 7200 4050 7245 4140 7155 4140 7200 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7200 4050 7200 3915 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7145 4050 7255 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 4095 7290 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7335 4050 7335 4095 7290 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7335 4140 7335 4185 7290 4185 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 4185 7290 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7200 4275 7200 4140 +-6 +6 5355 3105 5445 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5400 3150 30 30 5400 3150 5400 3180 +-6 +6 6255 3105 6345 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6300 3150 30 30 6300 3150 6300 3180 +-6 +6 6255 4905 6345 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6300 4950 30 30 6300 4950 6300 4980 +-6 +6 5355 4905 5445 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5400 4950 30 30 5400 4950 5400 4980 +-6 +6 4455 4905 4545 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 4950 30 30 4500 4950 4500 4980 +-6 +6 5355 4005 5445 4095 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5400 4050 30 30 5400 4050 5400 4080 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4230 3150 5400 3150 5400 3420 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 3420 4500 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4275 4050 5400 4050 5400 3690 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 3735 4500 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 3870 3150 3600 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 3825 4050 3600 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 3825 4950 3600 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 4050 4500 4320 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 4590 4500 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5400 4365 5400 4005 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4275 4950 5400 4950 5400 4590 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 5400 3150 6300 3150 6300 3960 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6255 3150 7200 3150 7200 3960 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 5355 4950 6300 4950 6300 4230 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6300 4950 7200 4950 7200 4185 +4 0 0 50 -1 0 12 0.0000 4 135 480 5625 3645 LED2\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 4725 3645 LED1\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 3105 3195 Pin1\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 3105 4095 Pin2\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 3105 4995 Pin3\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 4725 4545 LED3\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 5625 4545 LED4\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 7425 4140 LED6\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 6525 4140 LED5\001 diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplex3pin.png b/libraries/BlinkLED/examples/Charlieplex/charlieplex3pin.png new file mode 100644 index 0000000000000000000000000000000000000000..4b0391b3831eec9800ed2747bb6d19a745f6fbb3 GIT binary patch literal 6027 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 literal 0 HcmV?d00001 diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplex5pin.fig b/libraries/BlinkLED/examples/Charlieplex/charlieplex5pin.fig new file mode 100644 index 00000000..c50adb63 --- /dev/null +++ b/libraries/BlinkLED/examples/Charlieplex/charlieplex5pin.fig @@ -0,0 +1,649 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 4500.000 4950.000 4500 4905 4545 4950 4500 4995 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 4950.000 4500.000 4905 4500 4950 4455 4995 4500 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 5850.000 4500.000 5805 4500 5850 4455 5895 4500 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 6750.000 4500.000 6750 4455 6795 4500 6750 4545 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 6750.000 4950.000 6750 4905 6795 4950 6750 4995 +5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 6300.000 5625.000 6255 5625 6300 5580 6345 5625 +6 2025 3105 2475 3195 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2120 3150 2025 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 2385 3150 2358 3110 2304 3190 2250 3110 2196 3190 2142 3110 + 2115 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 3150 2380 3150 +-6 +6 2610 3375 2835 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 2700 3600 2745 3510 2655 3510 2700 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 3600 2700 3735 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2645 3600 2755 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 3555 2790 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 3600 2835 3555 2790 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 3510 2835 3465 2790 3465 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 3465 2790 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 3375 2700 3510 +-6 +6 2025 4005 2475 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2120 4050 2025 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 2385 4050 2358 4010 2304 4090 2250 4010 2196 4090 2142 4010 + 2115 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 4050 2380 4050 +-6 +6 2655 3105 2745 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 2700 3150 30 30 2700 3150 2700 3180 +-6 +6 2655 4005 2745 4095 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 2700 4050 30 30 2700 4050 2700 4080 +-6 +6 2025 4905 2475 4995 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2120 4950 2025 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 2385 4950 2358 4910 2304 4990 2250 4910 2196 4990 2142 4910 + 2115 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 4950 2380 4950 +-6 +6 2610 4275 2835 4635 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 2700 4500 2745 4410 2655 4410 2700 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 4500 2700 4635 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2645 4500 2755 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 4455 2790 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 4500 2835 4455 2790 4455 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 4410 2835 4365 2790 4365 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 4365 2790 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 4275 2700 4410 +-6 +6 3510 3375 3735 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 3600 3510 3645 3600 3555 3600 3600 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 3510 3600 3375 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3545 3510 3655 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 3555 3690 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 3510 3735 3555 3690 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 3600 3735 3645 3690 3645 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 3645 3690 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 3735 3600 3600 +-6 +6 3510 4275 3735 4635 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 3600 4410 3645 4500 3555 4500 3600 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 4410 3600 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3545 4410 3655 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 4455 3690 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 4410 3735 4455 3690 4455 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 4500 3735 4545 3690 4545 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 4545 3690 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 4635 3600 4500 +-6 +6 3555 3105 3645 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 3150 30 30 3600 3150 3600 3180 +-6 +6 3555 4905 3645 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 4950 30 30 3600 4950 3600 4980 +-6 +6 2655 4905 2745 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 2700 4950 30 30 2700 4950 2700 4980 +-6 +6 3555 4005 3645 4095 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 4050 30 30 3600 4050 3600 4080 +-6 +6 4860 3915 5085 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 4950 4140 4995 4050 4905 4050 4950 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4950 4140 4950 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4895 4140 5005 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5085 4095 5040 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5085 4140 5085 4095 5040 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5085 4050 5085 4005 5040 4005 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5085 4005 5040 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4950 3915 4950 4050 +-6 +6 5760 3915 5985 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 5850 4050 5895 4140 5805 4140 5850 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5850 4050 5850 3915 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5795 4050 5905 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5985 4095 5940 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5985 4050 5985 4095 5940 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5985 4140 5985 4185 5940 4185 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5985 4185 5940 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5850 4275 5850 4140 +-6 +6 4905 3105 4995 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4950 3150 30 30 4950 3150 4950 3180 +-6 +6 4905 4905 4995 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4950 4950 30 30 4950 4950 4950 4980 +-6 +6 2610 5175 2835 5535 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 2700 5400 2745 5310 2655 5310 2700 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 5400 2700 5535 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2645 5400 2755 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 5355 2790 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 5400 2835 5355 2790 5355 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 5310 2835 5265 2790 5265 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 5265 2790 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 5175 2700 5310 +-6 +6 2025 5805 2475 5895 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2120 5850 2025 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 2385 5850 2358 5810 2304 5890 2250 5810 2196 5890 2142 5810 + 2115 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 5850 2380 5850 +-6 +6 2655 5805 2745 5895 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 2700 5850 30 30 2700 5850 2700 5880 +-6 +6 3510 5175 3735 5535 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 3600 5310 3645 5400 3555 5400 3600 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 5310 3600 5175 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3545 5310 3655 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 5355 3690 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 5310 3735 5355 3690 5355 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 5400 3735 5445 3690 5445 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 5445 3690 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 5535 3600 5400 +-6 +6 3555 5805 3645 5895 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 5850 30 30 3600 5850 3600 5880 +-6 +6 4455 5040 4545 5130 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 5085 30 30 4500 5085 4500 5115 +-6 +6 4410 5175 4635 5535 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 4500 5400 4545 5310 4455 5310 4500 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 5400 4500 5535 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4445 5400 4555 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 5355 4590 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 5400 4635 5355 4590 5355 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 5310 4635 5265 4590 5265 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 5265 4590 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 5175 4500 5310 +-6 +6 4455 5805 4545 5895 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 5850 30 30 4500 5850 4500 5880 +-6 +6 5310 5175 5535 5535 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 5400 5310 5445 5400 5355 5400 5400 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 5310 5400 5175 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5345 5310 5455 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 5355 5490 5310 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 5310 5535 5355 5490 5355 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 5400 5535 5445 5490 5445 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 5445 5490 5400 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 5535 5400 5400 +-6 +6 2025 6705 2475 6795 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2120 6750 2025 6750 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 2385 6750 2358 6710 2304 6790 2250 6710 2196 6790 2142 6710 + 2115 6750 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2475 6750 2380 6750 +-6 +6 2655 6705 2745 6795 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 2700 6750 30 30 2700 6750 2700 6780 +-6 +6 2610 6075 2835 6435 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 2700 6300 2745 6210 2655 6210 2700 6300 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 6300 2700 6435 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2645 6300 2755 6300 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 6255 2790 6300 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 6300 2835 6255 2790 6255 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 2835 6210 2835 6165 2790 6165 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2835 6165 2790 6210 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 2700 6075 2700 6210 +-6 +6 3510 6075 3735 6435 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 3600 6210 3645 6300 3555 6300 3600 6210 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 6210 3600 6075 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3545 6210 3655 6210 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 6255 3690 6210 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 6210 3735 6255 3690 6255 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 3735 6300 3735 6345 3690 6345 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3735 6345 3690 6300 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3600 6435 3600 6300 +-6 +6 7110 5715 7335 6075 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 7200 5850 7245 5940 7155 5940 7200 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7200 5850 7200 5715 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7145 5850 7255 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 5895 7290 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7335 5850 7335 5895 7290 5895 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7335 5940 7335 5985 7290 5985 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 5985 7290 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7200 6075 7200 5940 +-6 +6 6210 5715 6435 6075 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 6300 5940 6345 5850 6255 5850 6300 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6300 5940 6300 6075 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6245 5940 6355 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6435 5895 6390 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6435 5940 6435 5895 6390 5895 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6435 5850 6435 5805 6390 5805 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6435 5805 6390 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6300 5715 6300 5850 +-6 +6 5805 4905 5895 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5850 4950 30 30 5850 4950 5850 4980 +-6 +6 6255 4905 6345 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6300 4950 30 30 6300 4950 6300 4980 +-6 +6 6255 6705 6345 6795 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6300 6750 30 30 6300 6750 6300 6780 +-6 +6 3555 6705 3645 6795 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 3600 6750 30 30 3600 6750 3600 6780 +-6 +6 8010 5715 8235 6075 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 8100 5940 8145 5850 8055 5850 8100 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8100 5940 8100 6075 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8045 5940 8155 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8235 5895 8190 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 8235 5940 8235 5895 8190 5895 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 8235 5850 8235 5805 8190 5805 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8235 5805 8190 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8100 5715 8100 5850 +-6 +6 8910 5715 9135 6075 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 9000 5850 9045 5940 8955 5940 9000 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 5850 9000 5715 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 8945 5850 9055 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9135 5895 9090 5850 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 9135 5850 9135 5895 9090 5895 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 9135 5940 9135 5985 9090 5985 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9135 5985 9090 5940 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9000 6075 9000 5940 +-6 +6 4455 4455 4545 4545 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 4500 30 30 4500 4500 4500 4530 +-6 +6 8055 4455 8145 4545 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 8100 4500 30 30 8100 4500 8100 4530 +-6 +6 7155 6705 7245 6795 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 7200 6750 30 30 7200 6750 7200 6780 +-6 +6 8055 6705 8145 6795 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 8100 6750 30 30 8100 6750 8100 6780 +-6 +6 6660 3915 6885 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 6750 4140 6795 4050 6705 4050 6750 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6750 4140 6750 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6695 4140 6805 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6885 4095 6840 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6885 4140 6885 4095 6840 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6885 4050 6885 4005 6840 4005 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6885 4005 6840 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6750 3915 6750 4050 +-6 +6 7560 3915 7785 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 7650 4050 7695 4140 7605 4140 7650 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7650 4050 7650 3915 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7595 4050 7705 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7785 4095 7740 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7785 4050 7785 4095 7740 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7785 4140 7785 4185 7740 4185 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7785 4185 7740 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7650 4275 7650 4140 +-6 +6 5355 5805 5445 5895 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5400 5850 30 30 5400 5850 5400 5880 +-6 +6 6705 4320 6795 4410 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6750 4365 30 30 6750 4365 6750 4395 +-6 +6 6705 3105 6795 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6750 3150 30 30 6750 3150 6750 3180 +-6 +6 5805 3105 5895 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5850 3150 30 30 5850 3150 5850 3180 +-6 +6 9810 4725 10035 5085 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 9900 4950 9945 4860 9855 4860 9900 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9900 4950 9900 5085 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9845 4950 9955 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10035 4905 9990 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10035 4950 10035 4905 9990 4905 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10035 4860 10035 4815 9990 4815 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10035 4815 9990 4860 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 9900 4725 9900 4860 +-6 +6 10710 4725 10935 5085 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 10800 4860 10845 4950 10755 4950 10800 4860 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10800 4860 10800 4725 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10745 4860 10855 4860 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10935 4905 10890 4860 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10935 4860 10935 4905 10890 4905 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 10935 4950 10935 4995 10890 4995 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10935 4995 10890 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 10800 5085 10800 4950 +-6 +6 9855 3105 9945 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 9900 3150 30 30 9900 3150 9900 3180 +-6 +6 8955 6705 9045 6795 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 9000 6750 30 30 9000 6750 9000 6780 +-6 +6 9855 6705 9945 6795 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 9900 6750 30 30 9900 6750 9900 6780 +-6 +6 7605 3105 7695 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 7650 3150 30 30 7650 3150 7650 3180 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2430 3150 3600 3150 3600 3420 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 3420 2700 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2475 4050 3600 4050 3600 3690 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 3735 2700 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 2070 3150 1800 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 2025 4050 1800 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 2025 4950 1800 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 4050 2700 4320 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 4590 2700 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 4365 3600 4005 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2475 4950 3600 4950 3600 4590 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 4950 2700 5220 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 5490 3600 5850 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 5220 3600 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 3150 4995 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4950 3150 4950 3960 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 4950 4950 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4950 4230 4950 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3600 4050 4500 4050 4500 4905 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4905 3150 5850 3150 5850 3960 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4950 4950 5850 4950 5850 4185 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2430 5850 2700 5850 2700 5490 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 2025 5850 1800 5850 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 5850 3600 5850 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4500 5085 5400 5085 5400 5220 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 4995 4500 5220 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 5490 4500 5850 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3600 5850 5400 5850 5400 5490 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 + 8 1 1.00 60.00 120.00 + 2025 6750 1800 6750 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2430 6750 2700 6750 2700 6390 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 6750 3600 6750 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 6390 3600 6750 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2700 5850 2700 6120 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3600 5850 3600 6120 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 5760 4950 7200 4950 7200 5715 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 5715 6300 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3600 6750 7200 6750 7200 6030 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6300 6030 6300 6750 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 4500 4905 4500 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4995 4500 5805 4500 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 5895 4500 8100 4500 8100 5760 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8055 4500 9000 4500 9000 5760 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8100 6075 8100 6750 7155 6750 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8010 6750 9000 6750 9000 6030 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4 + 5400 5850 6075 5850 6075 5625 6255 5625 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6345 5625 6750 5625 6750 4995 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6750 4905 6750 4545 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6750 4455 6750 4230 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6750 4365 7650 4365 7650 4230 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 5850 3150 6750 3150 6750 3915 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 6750 3150 7650 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 7650 3150 7650 3960 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 7605 3150 10800 3150 10800 4770 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9900 4770 9900 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 8955 6750 10800 6750 10800 5085 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 9900 5040 9900 6750 +4 0 0 50 -1 0 12 0.0000 4 135 480 3825 3645 LED2\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 2925 3645 LED1\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 1305 3195 Pin1\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 1305 4095 Pin2\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 1305 4995 Pin3\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 2925 4545 LED3\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 3825 4545 LED4\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 6075 4140 LED10\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 5175 4140 LED9\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 1305 5895 Pin4\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 3825 5445 LED6\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 2925 5445 LED5\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 4725 5445 LED11\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 5625 5445 LED12\001 +4 0 0 50 -1 0 12 0.0000 4 135 375 1305 6795 Pin5\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 2925 6345 LED7\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 3825 6345 LED8\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 6480 5940 LED13\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 7380 5940 LED14\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 8280 5940 LED17\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 9180 5940 LED18\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 6930 4140 LED15\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 7830 4140 LED16\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 10080 4995 LED19\001 +4 0 0 50 -1 0 12 0.0000 4 135 585 10980 4995 LED20\001 diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplex5pin.png b/libraries/BlinkLED/examples/Charlieplex/charlieplex5pin.png new file mode 100644 index 0000000000000000000000000000000000000000..05bc4bd1234fbd2bf1a16550f4a342231a2393fb GIT binary patch literal 16928 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 Hv+VshPt^EQ literal 0 HcmV?d00001 diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplexeg.fig b/libraries/BlinkLED/examples/Charlieplex/charlieplexeg.fig new file mode 100644 index 00000000..6e91d7e3 --- /dev/null +++ b/libraries/BlinkLED/examples/Charlieplex/charlieplexeg.fig @@ -0,0 +1,215 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +6 3825 3105 4275 3195 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 3150 3825 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 3150 4158 3110 4104 3190 4050 3110 3996 3190 3942 3110 + 3915 3150 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 3150 4180 3150 +-6 +6 4410 3375 4635 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 4500 3600 4545 3510 4455 3510 4500 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 3600 4500 3735 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4445 3600 4555 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 3555 4590 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 3600 4635 3555 4590 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 3510 4635 3465 4590 3465 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 3465 4590 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 3375 4500 3510 +-6 +6 3825 4005 4275 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 4050 3825 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 4050 4158 4010 4104 4090 4050 4010 3996 4090 3942 4010 + 3915 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 4050 4180 4050 +-6 +6 4455 3105 4545 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 3150 30 30 4500 3150 4500 3180 +-6 +6 4455 4005 4545 4095 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 4050 30 30 4500 4050 4500 4080 +-6 +6 3825 4905 4275 4995 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 3920 4950 3825 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 7 + 4185 4950 4158 4910 4104 4990 4050 4910 3996 4990 3942 4910 + 3915 4950 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4275 4950 4180 4950 +-6 +6 4410 4275 4635 4635 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 4500 4500 4545 4410 4455 4410 4500 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 4500 4500 4635 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4445 4500 4555 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 4455 4590 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 4500 4635 4455 4590 4455 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 4635 4410 4635 4365 4590 4365 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4635 4365 4590 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 4500 4275 4500 4410 +-6 +6 6210 3915 6435 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 6300 4140 6345 4050 6255 4050 6300 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6300 4140 6300 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6245 4140 6355 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6435 4095 6390 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6435 4140 6435 4095 6390 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 6435 4050 6435 4005 6390 4005 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6435 4005 6390 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 6300 3915 6300 4050 +-6 +6 5310 3375 5535 3735 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 5400 3510 5445 3600 5355 3600 5400 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 3510 5400 3375 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5345 3510 5455 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 3555 5490 3510 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 3510 5535 3555 5490 3555 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 3600 5535 3645 5490 3645 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 3645 5490 3600 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 3735 5400 3600 +-6 +6 5310 4275 5535 4635 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 5400 4410 5445 4500 5355 4500 5400 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 4410 5400 4275 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5345 4410 5455 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 4455 5490 4410 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 4410 5535 4455 5490 4455 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 5535 4500 5535 4545 5490 4545 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5535 4545 5490 4500 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 5400 4635 5400 4500 +-6 +6 7110 3915 7335 4275 +2 1 0 1 0 -1 0 0 20 0.000 0 0 -1 0 0 4 + 7200 4050 7245 4140 7155 4140 7200 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7200 4050 7200 3915 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7145 4050 7255 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 4095 7290 4050 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7335 4050 7335 4095 7290 4095 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 3 + 7335 4140 7335 4185 7290 4185 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7335 4185 7290 4140 +2 1 0 1 0 -1 0 0 -1 0.000 0 0 -1 0 0 2 + 7200 4275 7200 4140 +-6 +6 5355 3105 5445 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5400 3150 30 30 5400 3150 5400 3180 +-6 +6 6255 3105 6345 3195 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6300 3150 30 30 6300 3150 6300 3180 +-6 +6 6255 4905 6345 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 6300 4950 30 30 6300 4950 6300 4980 +-6 +6 5355 4905 5445 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5400 4950 30 30 5400 4950 5400 4980 +-6 +6 4455 4905 4545 4995 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 4500 4950 30 30 4500 4950 4500 4980 +-6 +6 5355 4005 5445 4095 +1 3 0 1 0 -1 0 0 20 0.000 1 0.0000 5400 4050 30 30 5400 4050 5400 4080 +-6 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4230 3150 5400 3150 5400 3420 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 3420 4500 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4275 4050 5400 4050 5400 3690 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 3735 4500 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3870 3150 3600 3150 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3825 4050 3600 4050 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3825 4950 3600 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 4050 4500 4320 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 4500 4590 4500 4950 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 5400 4365 5400 4005 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 4275 4950 5400 4950 5400 4590 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 5400 3150 6300 3150 6300 3960 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6255 3150 7200 3150 7200 3960 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 5355 4950 6300 4950 6300 4230 +2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 6300 4950 7200 4950 7200 4185 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 1575 2475 3600 2475 3600 5625 1575 5625 1575 2475 +4 0 0 50 -1 0 12 0.0000 4 135 480 5625 3645 LED2\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 4725 3645 LED1\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 4725 4545 LED3\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 5625 4545 LED4\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 7425 4140 LED6\001 +4 0 0 50 -1 0 12 0.0000 4 135 480 6525 4140 LED5\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 3825 3915 120R\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 3825 4815 120R\001 +4 0 0 50 -1 0 12 0.0000 4 135 450 3825 3015 120R\001 +4 0 0 50 -1 0 12 0.0000 4 135 240 3240 3195 D9\001 +4 0 0 50 -1 0 12 0.0000 4 135 345 3195 4095 D10\001 +4 0 0 50 -1 0 12 0.0000 4 135 345 3195 4995 D11\001 +4 0 0 50 -1 0 12 0.0000 4 135 345 2205 4185 Uno\001 +4 0 0 50 -1 0 12 0.0000 4 135 675 2070 3915 Arduino\001 +4 0 0 50 -1 0 12 0.0000 4 135 1605 4590 5355 6 x 3mm Red LED's\001 diff --git a/libraries/BlinkLED/examples/Charlieplex/charlieplexeg.png b/libraries/BlinkLED/examples/Charlieplex/charlieplexeg.png new file mode 100644 index 0000000000000000000000000000000000000000..48772ac853fe0dbf9158b8e5f80e1a430ea3de3a GIT binary patch literal 8858 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 S11_5ex(|**__=?5%>D&7;Lm^n literal 0 HcmV?d00001 diff --git a/libraries/BlinkLED/examples/CharlieplexChase/CharlieplexChase.pde b/libraries/BlinkLED/examples/CharlieplexChase/CharlieplexChase.pde new file mode 100644 index 00000000..ee899de2 --- /dev/null +++ b/libraries/BlinkLED/examples/CharlieplexChase/CharlieplexChase.pde @@ -0,0 +1,36 @@ +/* This example is placed into the public domain */ + +#include + +byte pins[3] = {9, 10, 11}; +Charlieplex charlie(pins, sizeof(pins)); + +int previous = 1; +int current = 0; +int step = 1; +unsigned long lastTime; + +void setup() { + lastTime = millis(); + charlie.setLed(current, true); + charlie.setPwmLed(previous, 64); +} + +void loop() { + if ((millis() - lastTime) >= 100) { + charlie.setLed(previous, false); + charlie.setPwmLed(current, 64); + previous = current; + current += step; + if (current < 0) { + current = 1; + step = 1; + } else if (current >= charlie.count()) { + current = charlie.count() - 2; + step = -1; + } + charlie.setLed(current, true); + lastTime += 100; + } + charlie.loop(); +} diff --git a/libraries/BlinkLED/keywords.txt b/libraries/BlinkLED/keywords.txt index 574453aa..9e23dc9e 100644 --- a/libraries/BlinkLED/keywords.txt +++ b/libraries/BlinkLED/keywords.txt @@ -1,4 +1,5 @@ BlinkLED KEYWORD1 +Charlieplex KEYWORD1 ChaseLEDs KEYWORD1 onTime KEYWORD2 @@ -15,3 +16,12 @@ isPaused KEYWORD2 advanceTime KEYWORD2 setAdvanceTime KEYWORD2 previousPin KEYWORD2 + +count KEYWORD2 +led KEYWORD2 +setLed KEYWORD2 +pwmLed KEYWORD2 +setPwmLed KEYWORD2 +holdTime KEYWORD2 +setHoldTime KEYWORD2 +refresh KEYWORD2