在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>如何使用GPIO引腳將按鈕連接到Raspberry Pi

如何使用GPIO引腳將按鈕連接到Raspberry Pi

2022-12-23 | zip | 0.39 MB | 次下載 | 免費

資料介紹

描述

在這個項目中,我們將使用適用于 Raspberry Pi 2 套件組件的 Windows 10 IoT Core 的 Adafruit 入門包來創(chuàng)建一個項目,該項目使用 RGB 顏色傳感器來測量放置在傳感器上的對象的顏色。按鈕用于觸發(fā)傳感器。然后將顏色數(shù)據(jù)寫入調(diào)試控制臺,并在揚聲器或耳機上輸出檢測到的近似顏色。

在本課中,您將學(xué)習(xí)如何使用 GPIO 引腳將按鈕連接到 Raspberry Pi,如何通過 I2C 總線與傳感器通信以及如何將字符串轉(zhuǎn)換為音頻輸出。

硬件

根據(jù)下面“原理圖”部分中的 Fritzing 圖,將 Raspberry Pi2 連接到面包板和其他組件。

在本課中,您還需要一個揚聲器或一副耳機。將它連接到 Pi 上的 AUX 插座。

軟件

您可以從https://github.com/ms-iot/adafruitsample下載代碼啟動項目,我們將引導(dǎo)您完成添加與 Web 服務(wù)對話并在地圖上獲取您的 pin 所需的代碼。什么地圖?

打開“Lesson_205\StartSolution\Lesson_205.sln”并打開 MainPage.xaml.cs 文件。

我們已經(jīng)填寫了一些方法作為您在此解決方案中的起點。如果你想向前跳,你可以找到一個解決方案,所有代碼都已完成:“Lesson_205\FullSolution\Lesson_205.sln”

?

MainPage.xaml.cs

打開 MainPage.xaml.cs 文件。

在 MainPage 類的頂部添加以下行。這些是我們稍后將使用的類的引用。在這里,您還將指定將用于按鈕的 GPIO 引腳。我們在此示例中使用了 GPIO 4(引腳 7)。

 密封部分MainPage : Page
    {
        
        TCS34725 顏色傳感器;
        
        SpeechSynthesizer 合成器;
        
        媒體元素音頻;
        
        GpioPin 按鈕引腳;
        
         gpioPin =  ;
        主頁()
        {
            .InitializeComponent();
        }

現(xiàn)在我們在 OnNavigatedTo 方法中添加代碼,它將:

  1. 為顏色傳感器創(chuàng)建一個新的 TCS34725 對象并初始化該對象。
  2. 為文本到語音操作創(chuàng)建一個新的語音合成器。
  3. 創(chuàng)建一個新的媒體元素來播放音頻并對其進(jìn)行初始化。
  4. 調(diào)用 InitializeGpio 函數(shù)。

如果您不想在地圖上添加圖釘,請刪除MakePinWebAPICall();??

protected override async void 
        {
             ;
            
            {
                
                colorSensor =   ;
                
                await colorSensor. 
                合成器 =   ;

                 
                audio =   ;

                
                 ;
            }
            抓住(例外 e)
            {
                調(diào)試。 ;
            }
        }

InitializeGpio 函數(shù)應(yīng)執(zhí)行以下操作:

  1. 創(chuàng)建默認(rèn) GPIO 控制器并使用它打開所需的 GPIO 引腳。
  2. 去抖引腳。
  3. 將引腳模式設(shè)置為輸入。
  4. 為 GPIO 引腳 ValueChanged 事件設(shè)置回調(diào)函數(shù)。
 
          
         {
             
            GpioController gpioController = GpioController.GetDefault();
            
            buttonPin = gpioController.OpenPin(gpioPin);
            
            buttonPin.DebounceTimeout =  TimeSpan(  );
            
            buttonPin.SetDriveMode(GpioPinDriveMode.Input);
            
            buttonPin.ValueChanged += buttonPin_ValueChanged;
        }

每次按下按鈕時都會調(diào)用 buttonPin_ValueChanged 函數(shù)。該功能應(yīng)該:

  1. 檢查上升沿,即檢查按鈕是否被釋放。
  2. 如果為真,則獲取近似顏色值并調(diào)用 SpeakColor 函數(shù)。
 
         async void button  
        {
            
             (e.Edge  GpioPinEdge.RisingEdge)
            {
                
                中讀取近似顏色colorRead = await colorSensor.get  ;
                 
                await  ;
            }
        }

SpeakColor 函數(shù)應(yīng)該:

  1. 使用具有近似顏色的字符串創(chuàng)建 SpeechSynthesisStream。
  2. 使用調(diào)度程序,將媒體元素對象的源設(shè)置為 SpeechSynthesisStream 并播放它。
 
         async Task  
        {
             
            var stream = await synthesizer.  ;
            
            var ignored = Dispatcher.  =>
            {
                
                音頻。 ;
                
                音頻。 ;
            });
        }

?

TCS34725.cs?

打開 TCS34725.cs 文件。

首先,創(chuàng)建 2 個類來存儲從傳感器讀取的數(shù)據(jù)。

 
      
         UInt16 Red {  ; ;}
          UInt16 Green {; ;}
          UInt16 Blue {; ;}
          UInt16 Clear {; ;}
    }

    
      
          Red {  ; ;}
           Green {; ;}
           Blue {; ;}
    }

TCS34725 類的第一部分是列出 TCS34725 中不同寄存器的地址。這些值可以在?TCS34725 數(shù)據(jù)表中找到。I2C 和 GPIO 所需的變量在枚舉之后聲明。

已知顏色列表已提供給您。您可以根據(jù)Windows.UI.Colors中包含的顏色在此列表中添加或刪除顏色

添加一個結(jié)構(gòu)來存儲顏色的名稱和值對。

 
         已知顏色
        {
            顏色顏色值;
             顏色名稱;

             
            {
                顏色值 =;
                顏色名稱=名稱;
            }
        };

接下來是構(gòu)造函數(shù)。這里我們設(shè)置 GPIO 引腳來控制顏色傳感器上的 LED我們正在使用 GPIO 12(引腳 32)。

在 Initialize 函數(shù)中,執(zhí)行以下操作:

  1. 使用 TCS34725 傳感器的設(shè)備地址實例化 I2C 連接設(shè)置。
  2. 將連接的 I2C 總線速度設(shè)置為快速模式。
  3. 使用 I2CBus 設(shè)備選擇器創(chuàng)建高級查詢語法字符串并使用該字符串創(chuàng)建集合。
  4. 使用 I2C 總線的設(shè)備 ID 和連接設(shè)置實例化 TCS34725 I2C 設(shè)備。
  5. 創(chuàng)建默認(rèn) GPIO 控制器并使用它打開所需的 GPIO 引腳。
  6. 設(shè)置引腳模式為輸出。
  7. 通過調(diào)用 initColorList 函數(shù)初始化顏色列表。
 
        public async Task 
        {
            調(diào)試。 ;

            
            {
                 
                I2cConnectionSettings settings =   ;
                
                
                settings.BusSpeed = I2cBusSpeed.FastMode;
                
                
                 aqs = I2cDevice.  ;
                
                
                
                DeviceInformationCollection dis = await DeviceInformation 的集合。 ;
                
                
                 
                colorSensor = await I2cDevice 實例化 TCS34725 I2C 設(shè)備。 ;

                
                gpio = GpioController.  ;
                
                LedControlGPIOPin = gpio.  ;
                
                LedControlGPIOPin。 ;

                
                init  ;
            }
            抓住(例外 e)
            {
                調(diào)試。 ;
                扔;
            }
        }

在 initColorList 函數(shù)中,讀取 Windows.UI.Colors 庫中的所有顏色并將已知顏色添加到列表中。

 
         void init 
        {
            colorList =  List<已知顏色>  ;

            
            (PropertyInfo property  typeof(Colors) )
            {
                
                 (limitColorList.Contains  )
                {
                    KnownColor temp =   property.GetValue  , property.Name);
                    顏色列表。;
                }
            }
        }

代碼的下一部分已為您完成。?

  1. 為傳感器 LED 狀態(tài)創(chuàng)建一個枚舉,默認(rèn)情況下設(shè)置為開。
  2. 編寫了一個設(shè)置函數(shù)來設(shè)置 LED 的狀態(tài)。
  3. 使用數(shù)據(jù)表創(chuàng)建了兩個枚舉,以設(shè)置顏色傳感器可用的不同積分時間和增益配置的值。?
  4. 積分時間的默認(rèn)值設(shè)置為 700ms,增益設(shè)置為 0。這些值會影響顏色傳感器的分辨率和靈敏度。

接下來,將以下代碼行添加到 begin 函數(shù)中:

  1. 閱讀并驗證傳感器簽名。
  2. 將 Init 變量設(shè)置為 true。
  3. 設(shè)置積分時間和增益。
  4. 啟用傳感器。
私人異步任務(wù)()
        {
            .WriteLine("TCS34725::開始");
            byte[] WriteBuffer =  byte[] { TCS34725_ID | TCS34725_COMMAND_BIT };
            byte[] ReadBuffer =  byte[] {  };

            //  設(shè)備簽名
            colorSensor.WriteRead(WriteBuffer, ReadBuffer);
             .WriteLine("TCS34725 簽名:" + ReadBuffer[  ].ToString());

            (ReadBuffer[  ] !=  )
            {
                 .WriteLine("TCS34725::Begin Signature Mismatch.");
                ;
            }

            //initalize 變量設(shè)置  
            Init =  ;

            //積分_
            setIntegrationTime(_tcs34725IntegrationTime);

            // 增益
            設(shè)置增益(_tcs34725增益);

            //注意: ,設(shè)備 掉電模式,因此需要。 
            等待();
        }

接下來寫三個函數(shù)。一個用于設(shè)置積分時間,一個用于設(shè)置增益,一個用于啟用傳感器。在這些函數(shù)中的每一個中,不同的值被寫入傳感器以執(zhí)行給定的操作。這些值是使用數(shù)據(jù)表確定的。

為您編寫了類似的禁用功能。

 
           
        {
            (!初始化)開始();
            _tcs34725增益=增益;
             [] WriteBuffer =   [] { TCS34725_CONTROL | TCS34725_COMMAND_BIT,
                                              ()_tcs34725增益};
            colorSensor.Write(WriteBuffer);
        }

        
           
        {
            (!初始化)開始();
            _tcs34725IntegrationTime = 積分時間;
             [] WriteBuffer =   [] { TCS34725_ATIME | TCS34725_COMMAND_BIT,
                                              ()_tcs34725IntegrationTime };
            colorSensor.Write(WriteBuffer);
        }

        
         
        {
            Debug.WriteLine(  );
            (!初始化)開始();

             [] WriteBuffer =   [] {  ,  };

            
            WriteBuffer[  ] = TCS34725_ENABLE | TCS34725_COMMAND_BIT;

            
            WriteBuffer[  ] = TCS34725_ENABLE_PON 上發(fā)送電源;
            colorSensor.Write(WriteBuffer);

            
             Task.Delay(  );

            
            WriteBuffer[  ] = (TCS34725_ENABLE_PON | TCS34725_ENABLE_AEN);
            colorSensor.Write(WriteBuffer);
        }

現(xiàn)在編寫一個簡單的函數(shù)來組合 2 個字節(jié)以創(chuàng)建一個 16 位緩沖區(qū)。

 
        UInt16 ColorFromBuffer(byte[]  )
        {
            UInt16=  x00 

            =[  ] 
            <<= 
            |=[  ] 

             
        }

在 getRawData 函數(shù)中,執(zhí)行以下操作:

  1. 創(chuàng)建一個新的 ColorData 對象。
  2. 檢查I2C設(shè)備是否已經(jīng)初始化。
  3. 讀取清除數(shù)據(jù)。
  4. 重復(fù)相同的操作以讀取紅色、綠色和藍(lán)色數(shù)據(jù)。
  5. 將原始值寫入調(diào)試控制臺并返回 ColorData 對象。
 
        
         {
             
            ColorData colorData =  ColorData();

            
             (!Init)  ;

             [] WriteBuffer =   [] {  };
             [] ReadBuffer =   [] {  ,  };

            
            WriteBuffer[  ] = TCS34725_CDATAL | TCS34725_COMMAND_BIT;
            colorSensor.WriteRead(WriteBuffer, ReadBuffer);
            colorData.Clear = ColorFromBuffer(ReadBuffer);

            
            WriteBuffer[  ] = TCS34725_RDATAL | TCS34725_COMMAND_BIT;
            colorSensor.WriteRead(WriteBuffer, ReadBuffer);
            colorData.Red = ColorFromBuffer(ReadBuffer);

            
            WriteBuffer[  ] = TCS34725_GDATAL | TCS34725_COMMAND_BIT;
            colorSensor.WriteRead(WriteBuffer, ReadBuffer);
            colorData.Green = ColorFromBuffer(ReadBuffer);

            
            WriteBuffer[  ] = TCS34725_BDATAL | TCS34725_COMMAND_BIT;
            colorSensor.WriteRead(WriteBuffer, ReadBuffer);
            colorData.Blue = ColorFromBuffer(ReadBuffer);

            
            Debug.WriteLine(  ,
                            colorData.Red, colorData.Green, colorData.Blue, colorData.Clear);

            
             colorData;
        }

在 getRgbData 函數(shù)中:

  1. 創(chuàng)建一個新的 RgbData 對象。
  2. 使用前面的函數(shù)讀取原始數(shù)據(jù)。
  3. 使用以下方法計算 RGB 值:[原始顏色數(shù)據(jù)] * 255 / [原始清晰數(shù)據(jù)]
  4. 將 RGB 值寫入調(diào)試控制臺并返回 RgbData 對象。
 
        public  Task ()
        {
            
            RgbData rgbData =  RgbData();

            
            ColorData colorData =   ();
            //     (   )
            
            {
                
                rgbData.Red = (colorData.Red *  / colorData.Clear);
                rgbData.Blue = (colorData.Blue *  / colorData.Clear);
                rgbData.Green = (colorData.Green *  / colorData.Clear);
            }
            
            Debug.WriteLine(  , rgbData.Red, rgbData.Green, rgbData.Blue);

            
             rgbData;
        }

最后,在 getClosestColor 函數(shù)中添加以下代碼:

  1. 從上一個函數(shù)中讀取 RGB 顏色數(shù)據(jù)。
  2. 計算?我們列表中 RGB 數(shù)據(jù)和已知顏色之間?的歐氏距離。
  3. 返回距離最短的顏色作為最接近的顏色。
 
        public  Task<  > getClosestColor()
        {
            
            RgbData rgbData =  getRgbData();
            
            已知顏色 closestColor = colorList[  ];
            
             minDiff =  .MaxValue;

            
            foreach(colorList  
            {
                colorValue = color.colorValue;
                 diff =  .Pow((colorValue.R - rgbData.Red),  ) + 
                                .Pow((colorValue.G - rgbData.Green),  ) + 
                                .Pow((colorValue.B - rgbData.Blue) ,  );
                diff = (  )  .Sqrt(diff);
                (差異 < 最小差異)
                {
                    minDiff =差異;
                    closestColor =;
                }
            }
            
            Debug.WriteLine(  + closestColor.colorName +  
                                                  + closestColor.colorValue.ToString());

            
             closestColor.colorName;
        }

您的代碼現(xiàn)在可以部署了!

?

試試看!

將物體放在顏色傳感器頂部并按下按鈕。來自對象的 RGB 數(shù)據(jù)將被讀取并寫入 Visual Studio 的輸出窗口。接下來,揚聲器/耳機會說出大概的顏色。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 国产一区二区在线观看免费 | 四虎在线播放免费永久视频 | 亚洲福利一区 | 天天av天天翘天天综合网 | 天天干天天爽天天操 | 人人草97 | 又粗又长又爽又长黄免费视频 | 欧美一级精品高清在线观看 | 亚洲图色视频 | 日本美女黄网站 | 色男人综合 | 一级大片视频 | 黄色日本网站 | 日本免费黄网站 | 网站啪啪| 深夜大尺度视频在线观看 | 激情五月深爱五月 | 97夜夜澡人人爽人人喊一欧美 | 日日噜噜噜夜夜爽爽狠狠 | 99热手机在线观看 | 极品丰满翘臀后进啪啪 | 国产呦系列呦交 | 亚洲vv| 99久久国产免费 - 99久久国产免费 | 欧美在线观看一区二区三 | 一区视频在线播放 | 在线观看日本免费视频大片一区 | 天天综合久久久网 | 亚欧人成精品免费观看 | 伊人狼人综合网 | 久久中文字幕一区二区三区 | 性欧美大战久久久久久久 | 国产美女精品久久久久中文 | 1024免费看片 | 四虎电影免费观看网站 | www.av在线免费观看 | 一级视频免费观看 | 激情五月激情综合网 | 狠狠操狠狠摸 | 四虎国产成人亚洲精品 | se色综合视频|