電子發(fā)燒友App

硬聲App

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創(chuàng)作
電子發(fā)燒友網>電子資料下載>電子資料>如何使用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ā)傳感器。然后將顏色數據寫入調試控制臺,并在揚聲器或耳機上輸出檢測到的近似顏色。

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

硬件

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

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

軟件

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

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

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

?

MainPage.xaml.cs

打開 MainPage.xaml.cs 文件。

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

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

現在我們在 OnNavigatedTo 方法中添加代碼,它將:

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

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

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

                 
                audio =   ;

                
                 ;
            }
            抓?。ɡ?e)
            {
                調試。 ;
            }
        }

InitializeGpio 函數應執(zhí)行以下操作:

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

每次按下按鈕時都會調用 buttonPin_ValueChanged 函數。該功能應該:

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

SpeakColor 函數應該:

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

?

TCS34725.cs?

打開 TCS34725.cs 文件。

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

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

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

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

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

添加一個結構來存儲顏色的名稱和值對。

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

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

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

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

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

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

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

                
                init  ;
            }
            抓?。ɡ?e)
            {
                調試。 ;
                扔;
            }
        }

在 initColorList 函數中,讀取 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)建一個枚舉,默認情況下設置為開。
  2. 編寫了一個設置函數來設置 LED 的狀態(tài)。
  3. 使用數據表創(chuàng)建了兩個枚舉,以設置顏色傳感器可用的不同積分時間和增益配置的值。?
  4. 積分時間的默認值設置為 700ms,增益設置為 0。這些值會影響顏色傳感器的分辨率和靈敏度。

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

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

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

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

            //initalize 變量設置  
            Init =  ;

            //積分_
            setIntegrationTime(_tcs34725IntegrationTime);

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

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

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

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

 
           
        {
            (!初始化)開始();
            _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);
        }

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

 
        UInt16 ColorFromBuffer(byte[]  )
        {
            UInt16=  x00 

            =[  ] 
            <<= 
            |=[  ] 

             
        }

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

  1. 創(chuàng)建一個新的 ColorData 對象。
  2. 檢查I2C設備是否已經初始化。
  3. 讀取清除數據。
  4. 重復相同的操作以讀取紅色、綠色和藍色數據。
  5. 將原始值寫入調試控制臺并返回 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 函數中:

  1. 創(chuàng)建一個新的 RgbData 對象。
  2. 使用前面的函數讀取原始數據。
  3. 使用以下方法計算 RGB 值:[原始顏色數據] * 255 / [原始清晰數據]
  4. 將 RGB 值寫入調試控制臺并返回 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 函數中添加以下代碼:

  1. 從上一個函數中讀取 RGB 顏色數據。
  2. 計算?我們列表中 RGB 數據和已知顏色之間?的歐氏距離。
  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;
        }

您的代碼現在可以部署了!

?

試試看!

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


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

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  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元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  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十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費