![](/media/cache/profiles/80729472_p0.jpg.50x50_q85.jpg)
qweqwe
Dependencies: Si5351A NeoPixel
main.cpp@2:2c78f22e6081, 2021-05-30 (annotated)
- Committer:
- fezine
- Date:
- Sun May 30 15:40:19 2021 +0000
- Revision:
- 2:2c78f22e6081
- Parent:
- 1:34ec04b8a8dd
- Child:
- 3:05c2c10b6bb3
os5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tichise | 0:124662fe9af9 | 1 | #include "mbed.h" |
tichise | 0:124662fe9af9 | 2 | #include "neopixel.h" |
fezine | 1:34ec04b8a8dd | 3 | #include "si5351a.h" |
fezine | 1:34ec04b8a8dd | 4 | |
fezine | 1:34ec04b8a8dd | 5 | NeoPixelOut neoPixel(D9); |
fezine | 1:34ec04b8a8dd | 6 | DigitalOut reset=D4; |
fezine | 1:34ec04b8a8dd | 7 | DigitalOut strobe=D3; |
fezine | 1:34ec04b8a8dd | 8 | int NumColumn=3; |
fezine | 1:34ec04b8a8dd | 9 | //AnalogIn ColumnAnalog_1=A3; |
fezine | 1:34ec04b8a8dd | 10 | //AnalogIn ColumnAnalog_2=A2; |
fezine | 1:34ec04b8a8dd | 11 | AnalogIn analog1_7=A0; |
fezine | 1:34ec04b8a8dd | 12 | AnalogIn analog8_14=A6; |
fezine | 1:34ec04b8a8dd | 13 | float freqData[14]; |
fezine | 1:34ec04b8a8dd | 14 | Timeout PeakDecrease; |
fezine | 1:34ec04b8a8dd | 15 | |
fezine | 1:34ec04b8a8dd | 16 | I2C i2c(D0, D1); // communication with Si5351A |
fezine | 1:34ec04b8a8dd | 17 | SI5351A clk(i2c, 25000000UL); // Base clock = 25MHz |
fezine | 1:34ec04b8a8dd | 18 | |
fezine | 1:34ec04b8a8dd | 19 | Pixel Column[20];//全局数组 |
fezine | 1:34ec04b8a8dd | 20 | Pixel Column_All[280]; |
fezine | 1:34ec04b8a8dd | 21 | |
fezine | 1:34ec04b8a8dd | 22 | int Peak[14]={0}; |
fezine | 1:34ec04b8a8dd | 23 | |
fezine | 1:34ec04b8a8dd | 24 | int ColorBegin=0x00FF00; //初始颜色 |
fezine | 1:34ec04b8a8dd | 25 | int ColorLadder=0x00000C; //颜色级变化量 |
fezine | 1:34ec04b8a8dd | 26 | int PeakDecreaseTime_us=1000*80;//peak下降延迟时间 |
fezine | 1:34ec04b8a8dd | 27 | |
tichise | 0:124662fe9af9 | 28 | |
tichise | 0:124662fe9af9 | 29 | |
fezine | 1:34ec04b8a8dd | 30 | //-------------------------------设置Peak_1降落的互钳函数 |
fezine | 1:34ec04b8a8dd | 31 | void toggleOff(void); |
fezine | 1:34ec04b8a8dd | 32 | void toggleOn(void){ |
fezine | 1:34ec04b8a8dd | 33 | for(int i=0;i<NumColumn;i++){ |
fezine | 1:34ec04b8a8dd | 34 | if(Peak[i]>-2) Peak[i]--; |
fezine | 1:34ec04b8a8dd | 35 | } |
fezine | 1:34ec04b8a8dd | 36 | PeakDecrease.attach_us(toggleOff,PeakDecreaseTime_us); |
fezine | 1:34ec04b8a8dd | 37 | } |
fezine | 1:34ec04b8a8dd | 38 | void toggleOff(void){ |
fezine | 1:34ec04b8a8dd | 39 | for(int i=0;i<NumColumn;i++){ |
fezine | 1:34ec04b8a8dd | 40 | if(Peak[i]>-2) Peak[i]--; |
fezine | 1:34ec04b8a8dd | 41 | } |
fezine | 1:34ec04b8a8dd | 42 | PeakDecrease.attach_us(toggleOn,PeakDecreaseTime_us); |
fezine | 1:34ec04b8a8dd | 43 | } |
fezine | 1:34ec04b8a8dd | 44 | //-----------------------------------------取最大值函数 |
fezine | 1:34ec04b8a8dd | 45 | int max(int i,int j){ |
fezine | 1:34ec04b8a8dd | 46 | if(i>j)return i; |
fezine | 1:34ec04b8a8dd | 47 | else return j; |
fezine | 1:34ec04b8a8dd | 48 | } |
fezine | 1:34ec04b8a8dd | 49 | //--------------------------------------------- |
fezine | 1:34ec04b8a8dd | 50 | void Read() { |
fezine | 1:34ec04b8a8dd | 51 | reset = 1; |
fezine | 1:34ec04b8a8dd | 52 | wait_us(3000); |
fezine | 1:34ec04b8a8dd | 53 | reset = 0; |
fezine | 1:34ec04b8a8dd | 54 | wait_us(1000); |
fezine | 1:34ec04b8a8dd | 55 | for (int i = 0; i < 7; i++){ |
fezine | 1:34ec04b8a8dd | 56 | strobe = 0; |
fezine | 1:34ec04b8a8dd | 57 | wait_us(1000); |
fezine | 1:34ec04b8a8dd | 58 | freqData[i]=analog1_7; |
fezine | 1:34ec04b8a8dd | 59 | freqData[i+7]=analog8_14; |
fezine | 1:34ec04b8a8dd | 60 | strobe = 1; |
fezine | 1:34ec04b8a8dd | 61 | // wait_us(40); |
fezine | 1:34ec04b8a8dd | 62 | } |
fezine | 1:34ec04b8a8dd | 63 | } |
fezine | 1:34ec04b8a8dd | 64 | //-------------------------------------------main |
fezine | 1:34ec04b8a8dd | 65 | void run(int j){ |
fezine | 1:34ec04b8a8dd | 66 | int __ColorBegin=ColorBegin; |
fezine | 1:34ec04b8a8dd | 67 | int H=(freqData[j+3]*19); |
fezine | 1:34ec04b8a8dd | 68 | for(int i=0; i<20; i++) { |
fezine | 1:34ec04b8a8dd | 69 | if(i>=H) Column[i].hex=0; |
fezine | 1:34ec04b8a8dd | 70 | else Column[i].hex=__ColorBegin; |
fezine | 1:34ec04b8a8dd | 71 | __ColorBegin+=ColorLadder; |
fezine | 1:34ec04b8a8dd | 72 | } |
fezine | 1:34ec04b8a8dd | 73 | __ColorBegin=ColorBegin;//重置初始颜色 |
fezine | 1:34ec04b8a8dd | 74 | Column[max(Peak[j],H)].hex=0xFF0000; |
fezine | 1:34ec04b8a8dd | 75 | if(Peak[j]<H) Peak[j]=H;//当Peak小于H时,上拉Peak到最顶端 |
fezine | 1:34ec04b8a8dd | 76 | } |
fezine | 1:34ec04b8a8dd | 77 | int main() |
fezine | 1:34ec04b8a8dd | 78 | { |
fezine | 1:34ec04b8a8dd | 79 | strobe=1; |
fezine | 1:34ec04b8a8dd | 80 | reset=0; |
fezine | 1:34ec04b8a8dd | 81 | clk.set_frequency(SI5351_CLK1, 104570); |
fezine | 1:34ec04b8a8dd | 82 | clk.set_frequency(SI5351_CLK0, 166280); |
fezine | 2:2c78f22e6081 | 83 | wait_us(200*1000); // 等待HSE稳定 |
fezine | 1:34ec04b8a8dd | 84 | neoPixel.global_scale = 0.05f; //亮度调节 |
fezine | 1:34ec04b8a8dd | 85 | neoPixel.normalize = false; // 使r+g+b=255 均匀每个led亮度 |
fezine | 1:34ec04b8a8dd | 86 | //Peakdecrease.detach(); |
fezine | 1:34ec04b8a8dd | 87 | toggleOn();//打开PeakDecrease |
fezine | 1:34ec04b8a8dd | 88 | while(1) { |
fezine | 1:34ec04b8a8dd | 89 | Read(); |
fezine | 1:34ec04b8a8dd | 90 | for(int j=0;j<NumColumn;j++){ |
fezine | 1:34ec04b8a8dd | 91 | run(j); |
fezine | 1:34ec04b8a8dd | 92 | for(int k=20*j;k<20*(j+1);k++){ |
fezine | 1:34ec04b8a8dd | 93 | Column_All[k].hex=Column[k%20].hex; |
fezine | 1:34ec04b8a8dd | 94 | } |
fezine | 1:34ec04b8a8dd | 95 | } |
fezine | 1:34ec04b8a8dd | 96 | neoPixel.send(Column_All, NumColumn*20); |
tichise | 0:124662fe9af9 | 97 | |
fezine | 1:34ec04b8a8dd | 98 | } |
tichise | 0:124662fe9af9 | 99 | } |