qweqwe
Dependencies: Si5351A NeoPixel
Diff: main.cpp
- Revision:
- 1:34ec04b8a8dd
- Parent:
- 0:124662fe9af9
- Child:
- 2:2c78f22e6081
diff -r 124662fe9af9 -r 34ec04b8a8dd main.cpp --- a/main.cpp Thu Jan 02 07:57:58 2020 +0000 +++ b/main.cpp Sun May 30 14:37:34 2021 +0000 @@ -1,24 +1,99 @@ #include "mbed.h" #include "neopixel.h" +#include "si5351a.h" + +NeoPixelOut neoPixel(D9); +DigitalOut reset=D4; +DigitalOut strobe=D3; +int NumColumn=3; +//AnalogIn ColumnAnalog_1=A3; +//AnalogIn ColumnAnalog_2=A2; +AnalogIn analog1_7=A0; +AnalogIn analog8_14=A6; +float freqData[14]; +Timeout PeakDecrease; + +I2C i2c(D0, D1); // communication with Si5351A +SI5351A clk(i2c, 25000000UL); // Base clock = 25MHz + +Pixel Column[20];//全局数组 +Pixel Column_All[280]; + +int Peak[14]={0}; + +int ColorBegin=0x00FF00; //初始颜色 +int ColorLadder=0x00000C; //颜色级变化量 +int PeakDecreaseTime_us=1000*80;//peak下降延迟时间 + -NeoPixelOut neoPixel(p11); +//-------------------------------设置Peak_1降落的互钳函数 +void toggleOff(void); +void toggleOn(void){ + for(int i=0;i<NumColumn;i++){ + if(Peak[i]>-2) Peak[i]--; + } + PeakDecrease.attach_us(toggleOff,PeakDecreaseTime_us); +} +void toggleOff(void){ + for(int i=0;i<NumColumn;i++){ + if(Peak[i]>-2) Peak[i]--; + } + PeakDecrease.attach_us(toggleOn,PeakDecreaseTime_us); +} +//-----------------------------------------取最大值函数 +int max(int i,int j){ + if(i>j)return i; + else return j; +} +//--------------------------------------------- +void Read() { + reset = 1; + wait_us(3000); + reset = 0; + wait_us(1000); + for (int i = 0; i < 7; i++){ + strobe = 0; + wait_us(1000); + freqData[i]=analog1_7; + freqData[i+7]=analog8_14; + strobe = 1; + // wait_us(40); + } +} +//-------------------------------------------main +void run(int j){ + int __ColorBegin=ColorBegin; + int H=(freqData[j+3]*19); + for(int i=0; i<20; i++) { + if(i>=H) Column[i].hex=0; + else Column[i].hex=__ColorBegin; + __ColorBegin+=ColorLadder; + } + __ColorBegin=ColorBegin;//重置初始颜色 + Column[max(Peak[j],H)].hex=0xFF0000; + if(Peak[j]<H) Peak[j]=H;//当Peak小于H时,上拉Peak到最顶端 +} +int main() +{ + strobe=1; + reset=0; + clk.set_frequency(SI5351_CLK1, 104570); + clk.set_frequency(SI5351_CLK0, 166280); + wait(0.2); // 等待HSE稳定 + neoPixel.global_scale = 0.05f; //亮度调节 + neoPixel.normalize = false; // 使r+g+b=255 均匀每个led亮度 + //Peakdecrease.detach(); + toggleOn();//打开PeakDecrease + while(1) { + Read(); + for(int j=0;j<NumColumn;j++){ + run(j); + for(int k=20*j;k<20*(j+1);k++){ + Column_All[k].hex=Column[k%20].hex; + } + } + neoPixel.send(Column_All, NumColumn*20); -int main() { - wait(0.2); // wait for HSE to stabilize - - neoPixel.global_scale = 1.0f; // Adjust brightness - neoPixel.normalize = true; // Equalize brightness to make r + g + b = 255 - - Pixel pixels[6]; - pixels[0].hex = 0xFF0000; - pixels[1].hex = 0xFFFF00; - pixels[2].hex = 0x00FF00; - pixels[3].hex = 0x00FFFF; - pixels[4].hex = 0x0000FF; - pixels[5].hex = 0xFF00FF; - - neoPixel.send(pixels, 6); - - while(1); + } } \ No newline at end of file