for led jacket

Dependents:   ws2812test

Fork of WS2812 by Rendy Devara

Committer:
elmoow
Date:
Wed Aug 16 23:24:49 2017 +0000
Revision:
2:645ab1279245
Parent:
1:8910a1fcbdb0
final1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
devararendy 0:f080cb888db6 1 #include "WS2812.h"
devararendy 0:f080cb888db6 2
devararendy 0:f080cb888db6 3
devararendy 0:f080cb888db6 4 WS2812::WS2812(PinName pin, int qty):dataOut(pin)
devararendy 0:f080cb888db6 5 {
devararendy 0:f080cb888db6 6 dataPin = pin;
devararendy 0:f080cb888db6 7 LED_Qty = qty;
devararendy 0:f080cb888db6 8 }
devararendy 0:f080cb888db6 9 WS2812::~WS2812()
devararendy 0:f080cb888db6 10 {
devararendy 0:f080cb888db6 11
devararendy 0:f080cb888db6 12 }
devararendy 0:f080cb888db6 13 void WS2812::sendReset()
devararendy 0:f080cb888db6 14 {
devararendy 0:f080cb888db6 15 dataOut = 0;
devararendy 0:f080cb888db6 16 wait_us(60);
devararendy 0:f080cb888db6 17 }
devararendy 0:f080cb888db6 18 void WS2812::writeColor(uint32_t RGB)
devararendy 0:f080cb888db6 19 {
devararendy 0:f080cb888db6 20 Red = ((RGB&0xFF0000)>>16);
devararendy 0:f080cb888db6 21 Green = ((RGB&0xFF00)>>8);
devararendy 0:f080cb888db6 22 Blue = (RGB&0xFF);
devararendy 0:f080cb888db6 23
devararendy 0:f080cb888db6 24 writeByte(Green);
devararendy 0:f080cb888db6 25 writeByte(Red);
devararendy 0:f080cb888db6 26 writeByte(Blue);
devararendy 0:f080cb888db6 27
devararendy 0:f080cb888db6 28 }
devararendy 0:f080cb888db6 29 void WS2812::send0()
devararendy 0:f080cb888db6 30 {
devararendy 0:f080cb888db6 31 dataOut = 1;
elmoow 2:645ab1279245 32 //0.4uS (28 nops)
elmoow 2:645ab1279245 33 asm("nop");
elmoow 2:645ab1279245 34 asm("nop");
elmoow 2:645ab1279245 35 asm("nop");
elmoow 2:645ab1279245 36 asm("nop");
elmoow 2:645ab1279245 37 asm("nop");
elmoow 2:645ab1279245 38 asm("nop");
elmoow 2:645ab1279245 39 asm("nop");
elmoow 2:645ab1279245 40 asm("nop");
elmoow 2:645ab1279245 41 asm("nop");
elmoow 2:645ab1279245 42 asm("nop");
elmoow 2:645ab1279245 43 asm("nop");
elmoow 2:645ab1279245 44 asm("nop");
elmoow 2:645ab1279245 45 asm("nop");
elmoow 2:645ab1279245 46 asm("nop");
elmoow 2:645ab1279245 47 asm("nop");
elmoow 2:645ab1279245 48 asm("nop");
elmoow 2:645ab1279245 49 asm("nop");
elmoow 2:645ab1279245 50 asm("nop");
elmoow 2:645ab1279245 51 asm("nop");
elmoow 2:645ab1279245 52 asm("nop");
elmoow 2:645ab1279245 53 asm("nop");
devararendy 0:f080cb888db6 54 asm("nop");
devararendy 0:f080cb888db6 55 asm("nop");
devararendy 0:f080cb888db6 56 asm("nop");
devararendy 0:f080cb888db6 57 asm("nop");
devararendy 0:f080cb888db6 58 asm("nop");
devararendy 0:f080cb888db6 59 asm("nop");
devararendy 0:f080cb888db6 60 asm("nop");
devararendy 0:f080cb888db6 61 dataOut = 0;
elmoow 2:645ab1279245 62 //0.85uS (59 nops)
devararendy 0:f080cb888db6 63 asm("nop");
devararendy 0:f080cb888db6 64 asm("nop");
devararendy 0:f080cb888db6 65 asm("nop");
devararendy 0:f080cb888db6 66 asm("nop");
devararendy 0:f080cb888db6 67 asm("nop");
devararendy 0:f080cb888db6 68 asm("nop");
devararendy 0:f080cb888db6 69 asm("nop");
devararendy 0:f080cb888db6 70 asm("nop");
devararendy 0:f080cb888db6 71 asm("nop");
devararendy 0:f080cb888db6 72 asm("nop");
devararendy 0:f080cb888db6 73 asm("nop");
devararendy 0:f080cb888db6 74 asm("nop");
devararendy 0:f080cb888db6 75 asm("nop");
devararendy 0:f080cb888db6 76 asm("nop");
devararendy 0:f080cb888db6 77 asm("nop");
devararendy 0:f080cb888db6 78 asm("nop");
devararendy 0:f080cb888db6 79 asm("nop");
devararendy 0:f080cb888db6 80 asm("nop");
elmoow 2:645ab1279245 81 asm("nop");
elmoow 2:645ab1279245 82 asm("nop");
elmoow 2:645ab1279245 83 asm("nop");
elmoow 2:645ab1279245 84 asm("nop");
elmoow 2:645ab1279245 85 asm("nop");
elmoow 2:645ab1279245 86 asm("nop");
elmoow 2:645ab1279245 87 asm("nop");
elmoow 2:645ab1279245 88 asm("nop");
elmoow 2:645ab1279245 89 asm("nop");
elmoow 2:645ab1279245 90 asm("nop");
elmoow 2:645ab1279245 91 asm("nop");
elmoow 2:645ab1279245 92 asm("nop");
elmoow 2:645ab1279245 93 asm("nop");
elmoow 2:645ab1279245 94 asm("nop");
elmoow 2:645ab1279245 95 asm("nop");
elmoow 2:645ab1279245 96 asm("nop");
elmoow 2:645ab1279245 97 asm("nop");
elmoow 2:645ab1279245 98 asm("nop");
elmoow 2:645ab1279245 99 asm("nop");
elmoow 2:645ab1279245 100 asm("nop");
elmoow 2:645ab1279245 101 asm("nop");
elmoow 2:645ab1279245 102 asm("nop");
elmoow 2:645ab1279245 103 asm("nop");
elmoow 2:645ab1279245 104 asm("nop");
elmoow 2:645ab1279245 105 asm("nop");
elmoow 2:645ab1279245 106 asm("nop");
devararendy 0:f080cb888db6 107 asm("nop");
devararendy 0:f080cb888db6 108 asm("nop");
devararendy 0:f080cb888db6 109 asm("nop");
devararendy 0:f080cb888db6 110 asm("nop");
devararendy 0:f080cb888db6 111 asm("nop");
elmoow 2:645ab1279245 112 asm("nop");
elmoow 2:645ab1279245 113 asm("nop");
elmoow 2:645ab1279245 114 asm("nop");
devararendy 0:f080cb888db6 115 asm("nop");
elmoow 2:645ab1279245 116 asm("nop");
elmoow 2:645ab1279245 117 asm("nop");
elmoow 2:645ab1279245 118 asm("nop");
elmoow 2:645ab1279245 119 asm("nop");
devararendy 0:f080cb888db6 120 asm("nop");
devararendy 0:f080cb888db6 121 asm("nop");
devararendy 0:f080cb888db6 122 }
devararendy 0:f080cb888db6 123 void WS2812::send1()
devararendy 0:f080cb888db6 124 {
devararendy 0:f080cb888db6 125 dataOut = 1;
elmoow 2:645ab1279245 126 //0.8uS (55nops)
elmoow 2:645ab1279245 127 asm("nop");
elmoow 2:645ab1279245 128 asm("nop");
elmoow 2:645ab1279245 129 asm("nop");
elmoow 2:645ab1279245 130 asm("nop");
devararendy 0:f080cb888db6 131 asm("nop");
devararendy 0:f080cb888db6 132 asm("nop");
devararendy 0:f080cb888db6 133 asm("nop");
devararendy 0:f080cb888db6 134 asm("nop");
devararendy 0:f080cb888db6 135 asm("nop");
devararendy 0:f080cb888db6 136 asm("nop");
devararendy 0:f080cb888db6 137 asm("nop");
devararendy 0:f080cb888db6 138 asm("nop");
devararendy 0:f080cb888db6 139 asm("nop");
devararendy 0:f080cb888db6 140 asm("nop");
elmoow 2:645ab1279245 141 asm("nop");
elmoow 2:645ab1279245 142 asm("nop");
elmoow 2:645ab1279245 143 asm("nop");
elmoow 2:645ab1279245 144 asm("nop");
elmoow 2:645ab1279245 145 asm("nop");
devararendy 0:f080cb888db6 146 asm("nop");
devararendy 0:f080cb888db6 147 asm("nop");
devararendy 0:f080cb888db6 148 asm("nop");
devararendy 0:f080cb888db6 149 asm("nop");
devararendy 0:f080cb888db6 150 asm("nop");
elmoow 2:645ab1279245 151 asm("nop");
elmoow 2:645ab1279245 152 asm("nop");
elmoow 2:645ab1279245 153 asm("nop");
elmoow 2:645ab1279245 154 asm("nop");
elmoow 2:645ab1279245 155 asm("nop");
elmoow 2:645ab1279245 156 asm("nop");
devararendy 0:f080cb888db6 157 asm("nop");
devararendy 0:f080cb888db6 158 asm("nop");
devararendy 0:f080cb888db6 159 asm("nop");
devararendy 0:f080cb888db6 160 asm("nop");
elmoow 2:645ab1279245 161 asm("nop");
devararendy 0:f080cb888db6 162 asm("nop");
elmoow 2:645ab1279245 163 asm("nop");
elmoow 2:645ab1279245 164 asm("nop");
elmoow 2:645ab1279245 165 asm("nop");
elmoow 2:645ab1279245 166 asm("nop");
elmoow 2:645ab1279245 167 asm("nop");
elmoow 2:645ab1279245 168 asm("nop");
elmoow 2:645ab1279245 169 asm("nop");
elmoow 2:645ab1279245 170 asm("nop");
elmoow 2:645ab1279245 171 asm("nop");
devararendy 0:f080cb888db6 172 asm("nop");
devararendy 0:f080cb888db6 173 asm("nop");
devararendy 0:f080cb888db6 174 asm("nop");
devararendy 0:f080cb888db6 175 asm("nop");
devararendy 0:f080cb888db6 176 asm("nop");
devararendy 0:f080cb888db6 177 asm("nop");
devararendy 0:f080cb888db6 178 asm("nop");
devararendy 0:f080cb888db6 179 asm("nop");
devararendy 0:f080cb888db6 180 asm("nop");
devararendy 0:f080cb888db6 181 asm("nop");
devararendy 0:f080cb888db6 182 dataOut = 0;
elmoow 2:645ab1279245 183 //0.45uS (30 nops)
devararendy 0:f080cb888db6 184 asm("nop");
elmoow 2:645ab1279245 185 asm("nop");
devararendy 0:f080cb888db6 186 asm("nop");
elmoow 2:645ab1279245 187 asm("nop");
devararendy 0:f080cb888db6 188 asm("nop");
devararendy 0:f080cb888db6 189 asm("nop");
devararendy 0:f080cb888db6 190 asm("nop");
devararendy 0:f080cb888db6 191 asm("nop");
elmoow 2:645ab1279245 192 asm("nop");
devararendy 0:f080cb888db6 193 asm("nop");
devararendy 0:f080cb888db6 194 asm("nop");
devararendy 0:f080cb888db6 195 asm("nop");
devararendy 0:f080cb888db6 196 asm("nop");
elmoow 2:645ab1279245 197 asm("nop");
devararendy 0:f080cb888db6 198 asm("nop");
devararendy 0:f080cb888db6 199 asm("nop");
devararendy 0:f080cb888db6 200 asm("nop");
devararendy 0:f080cb888db6 201 asm("nop");
elmoow 2:645ab1279245 202 asm("nop");
devararendy 0:f080cb888db6 203 asm("nop");
devararendy 0:f080cb888db6 204 asm("nop");
devararendy 0:f080cb888db6 205 asm("nop");
devararendy 0:f080cb888db6 206 asm("nop");
elmoow 2:645ab1279245 207 asm("nop");
devararendy 0:f080cb888db6 208 asm("nop");
devararendy 0:f080cb888db6 209 asm("nop");
devararendy 0:f080cb888db6 210 asm("nop");
devararendy 0:f080cb888db6 211 asm("nop");
devararendy 0:f080cb888db6 212 asm("nop");
devararendy 0:f080cb888db6 213 }
devararendy 0:f080cb888db6 214 void WS2812::writeByte(uint8_t data)
devararendy 0:f080cb888db6 215 {
devararendy 0:f080cb888db6 216 for(int x=7;x>=0;x--)
devararendy 0:f080cb888db6 217 {
devararendy 0:f080cb888db6 218 if(data&(1<<x))
devararendy 0:f080cb888db6 219 {
devararendy 0:f080cb888db6 220 //bit is high
devararendy 0:f080cb888db6 221 send1();
devararendy 0:f080cb888db6 222 }
devararendy 0:f080cb888db6 223 else
devararendy 0:f080cb888db6 224 {
devararendy 0:f080cb888db6 225 //bit is low
devararendy 0:f080cb888db6 226 send0();
devararendy 0:f080cb888db6 227 }
devararendy 0:f080cb888db6 228 }
devararendy 0:f080cb888db6 229 }
devararendy 0:f080cb888db6 230 void WS2812::send1Color(uint32_t RGB)
devararendy 0:f080cb888db6 231 {
devararendy 0:f080cb888db6 232 writeColor(RGB);
devararendy 0:f080cb888db6 233 sendReset();
devararendy 1:8910a1fcbdb0 234 }
devararendy 1:8910a1fcbdb0 235 void WS2812::sendColors(uint32_t * ColorBuffer)
devararendy 1:8910a1fcbdb0 236 {
devararendy 1:8910a1fcbdb0 237 for(int x=0;x<LED_Qty;x++)
devararendy 1:8910a1fcbdb0 238 {
devararendy 1:8910a1fcbdb0 239 writeColor(*(&ColorBuffer[x]));
devararendy 1:8910a1fcbdb0 240 }
devararendy 1:8910a1fcbdb0 241 sendReset();
devararendy 0:f080cb888db6 242 }