qweqwe
Dependencies: Si5351A NeoPixel
main.cpp
- Committer:
- fezine
- Date:
- 2021-05-30
- Revision:
- 2:2c78f22e6081
- Parent:
- 1:34ec04b8a8dd
- Child:
- 3:05c2c10b6bb3
File content as of revision 2:2c78f22e6081:
#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下降延迟时间 //-------------------------------设置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_us(200*1000); // 等待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); } }