qweqwe

Dependencies:   Si5351A NeoPixel

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?

UserRevisionLine numberNew 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 }