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.
LED.h
- Committer:
- Suzutomo
- Date:
- 2020-11-07
- Revision:
- 0:943dfa56009a
File content as of revision 0:943dfa56009a:
#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; }