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: LED.h
- Revision:
- 0:943dfa56009a
diff -r 000000000000 -r 943dfa56009a LED.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LED.h Sat Nov 07 13:40:03 2020 +0000 @@ -0,0 +1,242 @@ +#include "WS2812B.h" + +#define BUF 60 +#define BUF2 42 + +double beatTime = 60/60; +bool LR = false; + + +int buf[3] = {BUF,BUF,BUF2}; +WS2812B tape[2] = { + WS2812B(PB_0,BUF), + WS2812B(PC_1,BUF)/*, + WS2812B(PC_0,BUF2)*/ +}; + +Timer ledT; + +volatile double calcBar = 0; + +void TempoWait(double beat,bool useF8 = 0) +{ + calcBar += beat; + if (useF8) while (barClock < calcBar * 24); + else while (ledT.read() < calcBar * beatTime); +} + +void FlowLED(double beat,int type,uint32_t color,bool useF8 = 0) +{ + for (int t = 0; t < 2; t++) tape[t].Clear(buf[t]); + switch (type) { + case 0 : // 端から端 + for (int i = 0; i<=BUF; i++) { + for (int t = 0; t < 2; t++) tape[t].Write(i-1,0x0); + for (int j = 0; j < 3; j++) for (int t = 0; t < 2; t++) tape[t].Write(i + j,color); + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime / BUF); + } + break; + + case 1 : // 端から端 + for (int i = 0; i<=BUF; i++) { + for (int t = 0; t < 2; t++) tape[t].Write(BUF - i + 1,0x0); + for (int j = 0; j > -3; j--) for (int t = 0; t < 2; t++) tape[t].Write(BUF - i + j,color); + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime / BUF); + } + break; + + case 2 : // 外から中央に + for (int i = 0; i<=(BUF / 2); i++) { + for (int t = 0; t < 2; t++) tape[t].Write(i - 1,0x0); + for (int t = 0; t < 2; t++) tape[t].Write(BUF - i + 1,0x0); + for (int j = 0; j < 3; j++) { + for (int t = 0; t < 2; t++) tape[t].Write(i + j,color); + for (int t = 0; t < 2; t++) tape[t].Write(BUF - i - j,color); + } + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 * 2 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime * 2 / BUF); + } + break; + + case 3 : // 中央から外に + for (int i = 0; i<=(BUF / 2); i++) { + for (int t = 0; t < 2; t++) tape[t].Write(BUF / 2 - i + 1,0x0); + for (int t = 0; t < 2; t++) tape[t].Write(BUF / 2 + i - 1,0x0); + for (int j = 0; j < 3; j++) { + for (int t = 0; t < 2; t++) tape[t].Write(BUF / 2 - i - j,color); + for (int t = 0; t < 2; t++) tape[t].Write(BUF / 2 + i + j,color); + } + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 * 2 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime * 2 / BUF); + } + break; + + case 4 : // まとまって流れる + for (int i = 0; i<=BUF + 40; i++) { + //printf("%d\r\n",i); + for (int j = 0; j<20; j++) { + for (int t = 0; t < 2; t++) tape[t].Write(i - 20 + j,tape[t].BrightAdjust(color,(double)j * 1/20/*sin(j * (PI / 10))*/)); + } + for (int j = 0; j < 20; j++) for (int t = 0; t < 2; t++) tape[t].Write(i - 20 + j,0); + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 / (BUF + 40)); + else while (barClock < calcBar * 24 + i * beat * 24 / (BUF + 40)); + + } + break; + } + for (int t = 0; t < 2; t++) tape[t].Clear(BUF); + calcBar += beat; + +} + +void FlashLED(double beat,int type,uint32_t color,bool useF8 = 0) +{ + calcBar += beat; + for (int t = 0; t < 2; t++) tape[t].Clear(BUF); + switch (type) { + case 0 : + int rw = (rand() % 5) + 2; + int rb = (rand() % 5) + 2; + for (int i = 0; i<=BUF;) { + for (int j = 0; j < rw; j++) { + if (rw % 2) for (int t = 0; t < 2; t++) tape[t].Write(i + j,color); + else for (int t = 0; t < 2; t++) tape[t].Write(i + j,0x0); + } + for (int j = 0; j < rb; j++) { + if (rw % 2)for (int t = 0; t < 2; t++) tape[t].Write(i + rw + j,0x0); + else for (int t = 0; t < 2; t++) tape[t].Write(i + rw + j,color); + } + i += rw + rb; + } + break; + case 1 : + int r = (rand() % (BUF / 2 - BUF / 4)); + for (int i = 0; i<=BUF; i++) { + if (LR) { + if ((i - r > 0) && (i - r < (BUF / 4)))for (int t = 0; t < 2; t++) tape[t].Write(i,color); + else for (int t = 0; t < 2; t++) tape[t].Write(i,0x0); + } else { + if ((i - (r + BUF / 2) > 0) && (i - (r + BUF / 2) < (BUF / 4))) for (int t = 0; t < 2; t++) tape[t].Write(i,color); + else for (int t = 0; t < 2; t++) tape[t].Write(i,0x0); + } + } + LR = !LR; + break; + } + + if (useF8) while (barClock < calcBar * 24); + else while (ledT.read() < calcBar * beatTime); + //ws.Clear(BUF); + +} + +void LightLED(double beat,uint32_t color,bool useF8 = 0) +{ + calcBar += beat; + for (int t = 0; t < 2; t++) tape[t].Write(color); + if (useF8) while (barClock < calcBar * 24); + else while (ledT.read() < calcBar * beatTime); +} + +void SendLED(double beat,bool useF8 = 0) +{ + calcBar += beat; + if (useF8) while (calcBar < calcBar * 24); + else while (ledT.read() < calcBar * beatTime); +} + +void FadeLED(double beat,int mode,uint32_t color,bool useF8 = 0) +{ + for (int i = 1; i <= 48; i++) { + if (mode == 0) for (int t = 0; t < 2; t++) tape[t].Write(color,i / 48.0); + if (mode == 1) for (int t = 0; t < 2; t++) tape[t].Write(color,(1.0 - i / 48.0)); + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 / 48); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime / 48); + } + calcBar += beat; +} + +void SendingLED() +{ + while (1) { + for (int t = 0; t < 2; t++) tape[t].Send(); + wait_us((1000 / 60)*1e3); + } +} + + +void FlowLED2(double beat,int type,uint32_t color,int num,bool useF8 = 0) +{ + tape[num].Clear(buf[num]); + switch (type) { + case 0 : // 端から端 + for (int i = 0; i<=BUF; i++) { + tape[num].Write(i-1,0x0); + for (int j = 0; j < 3; j++) tape[num].Write(i + j,color); + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime / BUF); + } + break; + + case 1 : // 端から端 + for (int i = 0; i<=BUF; i++) { + tape[num].Write(BUF - i + 1,0x0); + for (int j = 0; j > -3; j--) tape[num].Write(BUF - i + j,color); + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime / BUF); + } + break; + + case 2 : // 外から中央に + for (int i = 0; i<=(BUF / 2); i++) { + tape[num].Write(i - 1,0x0); + tape[num].Write(BUF - i + 1,0x0); + for (int j = 0; j < 3; j++) { + tape[num].Write(i + j,color); + tape[num].Write(BUF - i - j,color); + } + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 * 2 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime * 2 / BUF); + } + break; + + case 3 : // 中央から外に + for (int i = 0; i<=(BUF / 2); i++) { + tape[num].Write(BUF / 2 - i + 1,0x0); + tape[num].Write(BUF / 2 + i - 1,0x0); + for (int j = 0; j < 3; j++) { + tape[num].Write(BUF / 2 - i - j,color); + tape[num].Write(BUF / 2 + i + j,color); + } + + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 * 2 / BUF); + else while (ledT.read() < calcBar * beatTime + i * beat * beatTime * 2 / BUF); + } + break; + + case 4 : // まとまって流れる + for (int i = 0; i<=BUF + 40; i++) { + //printf("%d\r\n",i); + for (int j = 0; j<20; j++) { + tape[num].Write(i - 20 + j,tape[num].BrightAdjust(color,(double)j * 1/20)); + } + for (int j = 0; j < 20; j++) tape[num].Write(i - 20 + j,0); + if (useF8) while (barClock < calcBar * 24 + i * beat * 24 / (BUF + 40)); + else while (barClock < calcBar * 24 + i * beat * 24 / (BUF + 40)); + + } + break; + } + tape[num].Clear(BUF); + calcBar += beat; + +} \ No newline at end of file