A library to drive the Grove Circular LED by Seeed Studio: https://www.seeedstudio.com/Grove-Circular-LED-p-1353.html
Dependents: Seeed_Grove_Circular_LED
Fork of LED_Bar by
Circular_LED.cpp@1:30d1850db92a, 2017-06-16 (annotated)
- Committer:
- mochen
- Date:
- Fri Jun 16 16:09:25 2017 +0000
- Revision:
- 1:30d1850db92a
- Parent:
- LED_Bar.cpp@0:edcb13b58b4f
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:edcb13b58b4f | 1 | /* |
mochen | 1:30d1850db92a | 2 | Circular LED library V1.0 |
screamer | 0:edcb13b58b4f | 3 | 2010 Copyright (c) Seeed Technology Inc. All right reserved. |
screamer | 0:edcb13b58b4f | 4 | |
screamer | 0:edcb13b58b4f | 5 | Original Author: LG |
screamer | 0:edcb13b58b4f | 6 | |
screamer | 0:edcb13b58b4f | 7 | Modify: Mihail Stoyanov (mihail.stoyanov@arm.com) for ARM mbed, 2014-07-30 |
mochen | 1:30d1850db92a | 8 | Modify: Mo Chen (mo.chen@arm.com) for ARM mbed, 2017-06-16 |
screamer | 0:edcb13b58b4f | 9 | User can choose which Io to be used. |
screamer | 0:edcb13b58b4f | 10 | This library is free software; you can redistribute it and/or |
screamer | 0:edcb13b58b4f | 11 | modify it under the terms of the GNU Lesser General Public |
screamer | 0:edcb13b58b4f | 12 | License as published by the Free Software Foundation; either |
screamer | 0:edcb13b58b4f | 13 | version 2.1 of the License, or (at your option) any later version. |
screamer | 0:edcb13b58b4f | 14 | |
screamer | 0:edcb13b58b4f | 15 | This library is distributed in the hope that it will be useful, |
screamer | 0:edcb13b58b4f | 16 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
screamer | 0:edcb13b58b4f | 17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
screamer | 0:edcb13b58b4f | 18 | Lesser General Public License for more details. |
screamer | 0:edcb13b58b4f | 19 | |
screamer | 0:edcb13b58b4f | 20 | You should have received a copy of the GNU Lesser General Public |
screamer | 0:edcb13b58b4f | 21 | License along with this library; if not, write to the Free Software |
screamer | 0:edcb13b58b4f | 22 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
screamer | 0:edcb13b58b4f | 23 | */ |
screamer | 0:edcb13b58b4f | 24 | |
mochen | 1:30d1850db92a | 25 | #include "Circular_LED.h" |
screamer | 0:edcb13b58b4f | 26 | |
mochen | 1:30d1850db92a | 27 | Circular_LED::Circular_LED(PinName pinClk, PinName pinDta) : __pinClk(pinClk), __pinDta(pinDta) |
screamer | 0:edcb13b58b4f | 28 | { |
screamer | 0:edcb13b58b4f | 29 | __led_state = 0x00; |
screamer | 0:edcb13b58b4f | 30 | } |
screamer | 0:edcb13b58b4f | 31 | |
mochen | 1:30d1850db92a | 32 | void Circular_LED::latchData() |
screamer | 0:edcb13b58b4f | 33 | { |
screamer | 0:edcb13b58b4f | 34 | __pinDta = 0; |
screamer | 0:edcb13b58b4f | 35 | wait_us(10); |
screamer | 0:edcb13b58b4f | 36 | |
mochen | 1:30d1850db92a | 37 | for(int i = 0; i < 4; i++) { |
screamer | 0:edcb13b58b4f | 38 | __pinDta = 1; |
screamer | 0:edcb13b58b4f | 39 | __pinDta = 0; |
screamer | 0:edcb13b58b4f | 40 | } |
screamer | 0:edcb13b58b4f | 41 | |
screamer | 0:edcb13b58b4f | 42 | } |
screamer | 0:edcb13b58b4f | 43 | |
mochen | 1:30d1850db92a | 44 | void Circular_LED::send16bitData(uint16_t data) |
screamer | 0:edcb13b58b4f | 45 | { |
mochen | 1:30d1850db92a | 46 | for(int i = 0; i < 16; i++) { |
screamer | 0:edcb13b58b4f | 47 | unsigned int state = data & 0x8000 ? 1 : 0; |
screamer | 0:edcb13b58b4f | 48 | __pinDta = state; |
screamer | 0:edcb13b58b4f | 49 | |
mochen | 1:30d1850db92a | 50 | __pinClk = !__pinClk; |
mochen | 1:30d1850db92a | 51 | // state = __pinClk ? 0 : 1; |
mochen | 1:30d1850db92a | 52 | // __pinClk = state; |
screamer | 0:edcb13b58b4f | 53 | |
screamer | 0:edcb13b58b4f | 54 | data <<= 1; |
screamer | 0:edcb13b58b4f | 55 | } |
screamer | 0:edcb13b58b4f | 56 | } |
screamer | 0:edcb13b58b4f | 57 | |
mochen | 1:30d1850db92a | 58 | void Circular_LED::setState(uint32_t state) |
screamer | 0:edcb13b58b4f | 59 | { |
mochen | 1:30d1850db92a | 60 | uint16_t st; |
mochen | 1:30d1850db92a | 61 | |
mochen | 1:30d1850db92a | 62 | __led_state = state; |
screamer | 0:edcb13b58b4f | 63 | send16bitData(CMDMODE); |
screamer | 0:edcb13b58b4f | 64 | |
mochen | 1:30d1850db92a | 65 | for (int i = 0; i < 12; i++) { |
mochen | 1:30d1850db92a | 66 | st = (state & 0x0001) ? ON : SHUT; |
mochen | 1:30d1850db92a | 67 | send16bitData(st); |
mochen | 1:30d1850db92a | 68 | state = state>>1; |
mochen | 1:30d1850db92a | 69 | } |
mochen | 1:30d1850db92a | 70 | |
mochen | 1:30d1850db92a | 71 | send16bitData(CMDMODE); |
mochen | 1:30d1850db92a | 72 | |
mochen | 1:30d1850db92a | 73 | for (int i = 12; i < 24; i++) { |
mochen | 1:30d1850db92a | 74 | st = (state & 0x0001) ? ON : SHUT; |
mochen | 1:30d1850db92a | 75 | send16bitData(st); |
mochen | 1:30d1850db92a | 76 | state = state >> 1; |
screamer | 0:edcb13b58b4f | 77 | } |
screamer | 0:edcb13b58b4f | 78 | |
screamer | 0:edcb13b58b4f | 79 | latchData(); |
screamer | 0:edcb13b58b4f | 80 | } |
screamer | 0:edcb13b58b4f | 81 | |
mochen | 1:30d1850db92a | 82 | void Circular_LED::setLevel(uint8_t level) |
screamer | 0:edcb13b58b4f | 83 | { |
screamer | 0:edcb13b58b4f | 84 | |
mochen | 1:30d1850db92a | 85 | if (level > 24) { |
mochen | 1:30d1850db92a | 86 | return; |
mochen | 1:30d1850db92a | 87 | } |
mochen | 1:30d1850db92a | 88 | |
mochen | 1:30d1850db92a | 89 | for (int i = 0; i < 24; i++) { |
mochen | 1:30d1850db92a | 90 | // Set state bit for each LED |
mochen | 1:30d1850db92a | 91 | bool st = (i < level); |
mochen | 1:30d1850db92a | 92 | __led_state = st ? (__led_state | (0x01 << i)) : (__led_state & ~(0x01 << i)); |
screamer | 0:edcb13b58b4f | 93 | } |
screamer | 0:edcb13b58b4f | 94 | |
mochen | 1:30d1850db92a | 95 | setState(__led_state); |
screamer | 0:edcb13b58b4f | 96 | } |
screamer | 0:edcb13b58b4f | 97 | |
mochen | 1:30d1850db92a | 98 | void Circular_LED::setSingleLed(uint8_t num, bool st) |
screamer | 0:edcb13b58b4f | 99 | { |
mochen | 1:30d1850db92a | 100 | if (num > 23) { |
mochen | 1:30d1850db92a | 101 | return; |
mochen | 1:30d1850db92a | 102 | } |
mochen | 1:30d1850db92a | 103 | |
screamer | 0:edcb13b58b4f | 104 | __led_state = st ? (__led_state | (0x01<<num)) : (__led_state & ~(0x01<<num)); |
mochen | 1:30d1850db92a | 105 | setState(__led_state); |
screamer | 0:edcb13b58b4f | 106 | } |