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:
- 1:1de917dde4ed
- Parent:
- 0:943dfa56009a
diff -r 943dfa56009a -r 1de917dde4ed LED.h --- a/LED.h Sat Nov 07 13:40:03 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,242 +0,0 @@ -#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