qweqwe

Dependencies:   Si5351A NeoPixel

Revision:
1:34ec04b8a8dd
Parent:
0:124662fe9af9
Child:
2:2c78f22e6081
--- 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