久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4004|回復: 2
收起左側

基于stm32的多功能LED設計程序、原理圖、PCB、APP

  [復制鏈接]
ID:524923 發表于 2022-1-25 05:12 | 顯示全部樓層 |閱讀模式
多功能LED設計,擁有自動和手動兩種模式
1)自動模式,可以通過人體紅外傳感器檢測是否有人,采用光敏電阻構成的電路檢測環境光的強度,從而自動實現燈的開啟和關閉,也可以根據環境亮度調節燈的亮度;
2)手動模式,可以使用WIFI連接手機,通過手機APP手動控制不同燈的開啟和關閉,并可控制LED燈的亮度
    單片機選用stm32f103c8t6;APP使用Android stutio環境編寫;OLED為7腳,SPI
   下面OLED顯示圖片手動模式對應上面手動模式介紹的功能,WIFI模式對應的手動模式介紹的功能
手機APP程序文件較大,壓縮后仍大于20M,下面是網盤鏈接(第一次使用Android stutio寫APP,可能還存在問題,歡迎大家指正)
手機APP程序文件在這里
b220909ben
鏈接:https://pan.baidu.com/s/13V5m-kApC2MuFutD7ixFaA
提取碼:kii9

制作出來的實物圖如下:
模式選擇界面.jpg

有人靠近

有人靠近
沒人靠近時.jpg WIFI控制圖片.jpg

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
多功能LEDPCD3.png 多功能LEDPCB2.png

多功能LED原理圖

多功能LED原理圖

stm32控制主要程序
int main(void)
{        
        u16 adcx;
        float temp;
        char display[16]="";
         
        delay_init();  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(115200);
        delay_ms(100);
        WIFI_Init();
        Adc_Init();
        LED_Init();
        KEY_Init();
        OLED_Init();
        OLED_Clear();
        TIM2_Int_Init(9,1799);
        TIM3_Int_Init(99,7999);
        OLED_Interface();
         
        while(1)
        {
                if(control_flag)
                {
                        control_flag=0;
                switch(KEY_Scan(0))
                {
                        case KEY0_PRES:
                                if(!confirm_flag)
                                        confirm_flag=1;
                                else
                                        confirm_flag=0;
                                OLED_Clear();break;
                        case KEY1_PRES:
                                if(!confirm_flag)
                                {
                                        mode=0;
                                        OLED_Clear();
                                        OLED_ShowChar_16X16(5,1,'>');
                                };break;
                        case KEY2_PRES:
                                if(!confirm_flag)
                                {
                                        mode=1;
                                        OLED_Clear();
                                        OLED_ShowChar_16X16(5,4,'>');                                
                                };break;
                        default:break;
                }
                if(!confirm_flag)
                        OLED_ChooseMode();
                else
                {
                        if(mode)
                        {
                                OLED_ShowChar_16X16(25,0,'W');
                                OLED_ShowChar_16X16(35,0,'I');
                                OLED_ShowChar_16X16(45,0,'F');
                                OLED_ShowChar_16X16(55,0,'I');
                                OLED_ShowCHinese(65,0,7);
                                OLED_ShowCHinese(81,0,8);
                                OLED_ShowCHinese(5,3,16);
                                OLED_ShowCHinese(21,3,17);
                                OLED_ShowChar_16X16(37,3,':');
                                switch(USART_RX_Temp[0])
                                {
                                        case 'K':
                                                PWM_OUT=30;
                                                WiFi_Flag=1;
                                                OLED_ShowCHinese(47,3,20);
                                                OLED_ShowCHinese(63,3,22);break;
                                        case 'G':
                                                WiFi_Flag=0;
                                                OLED_ShowCHinese(47,3,21);
                                                OLED_ShowCHinese(63,3,22);break;
                                        case 'Z':
                                                if(PWM_OUT<60)
                                                        PWM_OUT+=10;
                                                break;
                                        case 'F':
                                                if(PWM_OUT>0)
                                                        PWM_OUT-=10;
                                                break;
                                        default:break;
                                }
                                USART_RX_Temp[0]='0';   
                                OLED_ShowCHinese(5,5,18);
                                OLED_ShowCHinese(21,5,19);
                                OLED_ShowChar_16X16(37,5,':');
                                OLED_ShowNum(47,5,PWM_OUT,2,16);

                        }
                        else
                        {
                                adcx=Get_Adc_Average(ADC_Channel_1,10);
                                temp=(float)adcx*(3.3/4096);
                                adcx=temp*10;
                                
                                OLED_ShowCHinese(25,0,5);
                                OLED_ShowCHinese(41,0,6);
                                OLED_ShowCHinese(57,0,7);
                                OLED_ShowCHinese(73,0,8);
                                sprintf(display,"ADC=%.2f",temp);
                                OLED_ShowString(5,4,display);
                                sprintf(display,"PWM=%d",PWM_OUT);
                                OLED_ShowString(5,6,display);
                                
                                if(adcx/10 >= 1 && adcx/10 < 2)
                                {
                                        if(adcx%10 >=0 && adcx%10 <= 6)
                                                PWM_OUT=0;
                                        else if(adcx%10 > 6)
                                                PWM_OUT=15;
                                }
                                else if(adcx/10 >= 2 && adcx/10 < 3)
                                {
                                        if(adcx%10 >=0 && adcx%10 < 5)
                                                PWM_OUT=30;
                                        else if(adcx%10 >=5)
                                                PWM_OUT=45;
                                }
                                else if(adcx/10 >=3)
                                        PWM_OUT=60;
                                OLED_ShowCHinese(5,2,9);
                                OLED_ShowCHinese(21,2,10);
                                OLED_ShowChar_16X16(37,2,':');

                                if(Log_OUT)
                                {
                                        if(!Log_Flag)  
                                        {
                                                count1=0;
                                                Log_Flag=1;
                                        }
                                        OLED_ShowCHinese(47,2,12);
                                        OLED_ShowCHinese(63,2,13);
                                        OLED_ShowCHinese(79,2,14);
                                        OLED_ShowCHinese(95,2,15);
                                }
                                else
                                {
                                        OLED_ShowCHinese(47,2,11);
                                        OLED_ShowCHinese(63,2,13);
                                        OLED_ShowCHinese(79,2,14);
                                        OLED_ShowCHinese(95,2,15);
                                }
                        }
                }
            }
        }         
}
//WiFi3õê¼»ˉ3ìDò
void WIFI_Init(void)
{
        printf("AT+CWMODE=2\r\n");      //
        delay_ms(1000);

        printf("AT+RST\r\n");
        delay_ms(1000);
        delay_ms(1000);

        printf("AT+CIPMUX=1\r\n");
        delay_ms(1000);
        
        printf("AT+CIPSERVER=1,8080\r\n");        
    delay_ms(1000);
}


APP主要程序
public class MainActivity extends AppCompatActivity {
    String IpString = "";                      //記錄IP地址
    int portint = 0;                         //記錄端口號
    int Pwm = 100;                           //pwm輸出
    Socket socket = null;                 //定義socket
    OutputStream outputStream = null;        //定義輸出流
    String str = "";
    ConnectSeverThread connectSeverThread;
    ServerThreadTCP serverThreadTCP;

    Button mBContButton;             //連接按鈕
    Button mBOpenButton;             //打開按鈕
    Button mBCloseButton;
    Button mBPwmZButton;
    Button mBPwmFButton;
    EditText mBIPEditText;
    EditText mBPortEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBContButton = (Button) findViewById(R.id.con_button);
        mBIPEditText = (EditText) findViewById(R.id.ip_edittext);
        mBPortEditText = (EditText) findViewById(R.id.port_edittext);
        mBOpenButton = (Button) findViewById(R.id.open_button);
        mBCloseButton = (Button) findViewById(R.id.close_button);
        mBPwmZButton = (Button) findViewById(R.id.PwmZ_button);
        mBPwmFButton = (Button) findViewById(R.id.PwmF_button);


        mBContButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(socket == null) {
                    IpString = mBIPEditText.getText().toString();
                    portint = Integer.valueOf(mBPortEditText.getText().toString());
                    str = "";
                    serverThreadTCP = new ServerThreadTCP();
                    serverThreadTCP.start();
                }else if(socket != null && socket.isConnected())
                {
                    try {
                        socket.close();
                        socket = null;
                        mBContButton.setText("連接WiFi");
                        Toast.makeText(MainActivity.this, "連接以關閉", Toast.LENGTH_SHORT).show();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        mBOpenButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (socket != null)
                {
                    str = "K\r\n";
                    new ServerThreadTCP().start();
                }
                else
                {
                    Toast.makeText(MainActivity.this, "請先建立socket連接", Toast.LENGTH_SHORT).show();
                }
            }
        });

        mBCloseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (socket != null)
                {
                    str = "G\r\n";
                    new ServerThreadTCP().start();
                }
                else
                {
                    Toast.makeText(MainActivity.this, "請先建立socket連接", Toast.LENGTH_SHORT).show();
                }
            }
        });

        mBPwmZButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (socket != null)
                {
                    str = "Z\r\n";
                    new ServerThreadTCP().start();
                }
                else
                {
                    Toast.makeText(MainActivity.this, "請先建立socket連接", Toast.LENGTH_SHORT).show();
                }
            }
        });

        mBPwmFButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (socket != null)
                {
                    str = "F\r\n";
                    new ServerThreadTCP().start();
                }
                else
                {
                    Toast.makeText(MainActivity.this, "請先建立socket連接", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private class ConnectSeverThread extends Thread {

        private String ip;
        private int port;

        public ConnectSeverThread(String ip, int port) {
            this.ip = ip;
            this.port = port;
        }

        public void run() {
            try {
                    socket = new Socket(ip, port);
                    socket.setSoTimeout(5000);
                    outputStream = socket.getOutputStream();

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mBContButton.setText("關閉WiFi");
                            Toast.makeText(MainActivity.this, "連接成功", Toast.LENGTH_SHORT).show();
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "連接失敗", Toast.LENGTH_SHORT).show();
                        }
                    });
            }
        }
    }

    private class ServerThreadTCP extends Thread
    {public void run()
    {OutputStream outputStream = null;
        InputStream inputStream = null;
        try {
            if(socket == null) {
                socket = new Socket(IpString, portint);
            }
            outputStream = socket.getOutputStream();
            inputStream = socket.getInputStream();
            byte data[] = str.getBytes();
            outputStream.write(data, 0, data.length);
            outputStream.flush();
            byte buffer[] = new byte[1024 * 4];
            int temp = 0;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mBContButton.setText("關閉WiFi");
                    Toast.makeText(MainActivity.this, "連接成功", Toast.LENGTH_SHORT).show();
                }
            });
            while ((temp = inputStream.read(buffer)) != -1)
            {
                System.out.println(new String(buffer, 0, temp));
            }
        } catch (Exception e)
        {System.out.println(e);} finally
        {
            try {
                inputStream.close();
                outputStream.close();
                socket.close();
                socket = null;
                mBContButton.setText("連接WiFi");
                Toast.makeText(MainActivity.this, "連接已關閉", Toast.LENGTH_SHORT).show();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    }
}
手機APP.jpg

程序.7z

212.91 KB, 下載次數: 46, 下載積分: 黑幣 -5

stm32控制程序

多功能LED電路圖PCB文件.7z

3.74 MB, 下載次數: 53, 下載積分: 黑幣 -5

原理圖+PCB

app-release.rar

1.93 MB, 下載次數: 31, 下載積分: 黑幣 -5

apk文件

回復

使用道具 舉報

ID:648123 發表于 2022-6-28 10:43 | 顯示全部樓層
這個人體檢測要怎么調呀?沒玩明白。用手掌擋住會判斷為檢測到人嗎?
回復

使用道具 舉報

ID:1043918 發表于 2022-9-7 16:13 | 顯示全部樓層
大哥請教個事,5V出來已經有穩壓的鉭電容了,為啥過去AMS1117-3 3 的in口還要加一組電容
51hei圖片20220907161024.png
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品人人做人人爽 | 久久精品久久综合 | 一区二区视频在线 | 国产一级片 | 视频一二三区 | 成人精品国产一区二区4080 | 国产清纯白嫩初高生视频在线观看 | 国产一卡二卡三卡 | 在线观看免费高清av | 中文字幕国产精品 | 日韩天堂av | 久久婷婷国产香蕉 | 久草视频在线播放 | 91久久久久久久 | 视频二区 | 日韩一区二区三区在线 | 成人在线观看中文字幕 | 国产亚洲精品精品国产亚洲综合 | 91精品久久久久久久久99蜜臂 | 久久亚洲91 | 91精品久久久久久综合五月天 | 久草网免费 | 亚洲欧美日韩精品久久亚洲区 | 亚洲一区欧美 | 久草视频在线播放 | 亚洲成av人片在线观看无码 | 精精国产视频 | 四虎最新| 色播99| 男人天堂网址 | 三级黄片毛片 | 欧美一区二 | 三级av在线 | 久久亚洲欧美日韩精品专区 | 男人的天堂在线视频 | 国产中文字幕在线观看 | 亚洲精品一区久久久久久 | 亚洲中午字幕 | 久久久久久久国产 | 日韩在线小视频 | 欧美日韩亚洲一区 |