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);

    }
}