前言: 話說前陣子爸爸家陽台不斷出現米奇老鼠,立刻清理陽台所有東西,然後又跟市政部門反映問題,可是情況還沒有好轉,米老鼠來完一隻又一隻,我爸陽台在老鼠界應該是網紅打卡聖地(誤),要不然就是米奇老鼠版米奇林三星餐廳(?) 雖然我們抓到了三隻,到上兩個禮拜為止還有至少一隻一直抓不到,每天淩晨還會來吃事後煙留下老鼠屎,真_北。 這隻老鼠對傳統攻擊有抗性,有IT9朋友前陣子用Raspberry pi自製了一台electric mouse trap ,用pi的超聲波雷達放在鞋盒裡,鞋盒裡有一堆食物,底部佈了鐵網,偵測到有老鼠進去以後立即關門通9V電,通個1分鐘再放牠離開,大推我自己也造一台 (Youtube片搜尋一大堆,人類真變態啊,朋友好變態啊)。可是我覺得這樣又好像有點太殘忍,不如先偵測牠們什麼時候來,嚇嚇牠們看看有沒有效果再說吧。 目的: 用Raspberry pi及手上有的感測器弄一隻放陽台用來偵測和嚇嚇老鼠的東西,並把紀錄圖像化到雲端給老爸使用。 邏輯及設計: 當老鼠進入偵測範圍,Motion Sensor偵測到生物活動Raspberry pi 處理來自Motion Sensor的訊號,如果夠強的話開始準備作出回應 Raspberry pi在Angry cats sounds中隨機選出叫聲,再經由Speaker輸出貓叫聲 Raspberry pi指示強光元件發出強光束照射目標 把偵測計數上傳到雲端圖表 材料: Sensor 在網路上看了一些Raspberry pi wild animal camera ,很多也是用Motion Sensor先偵測動物再來,我用的是PIR Motion Sensor被動式紅外線感測器,有低耗電成本便宜的好處。[1],而且可手動調整靈敏度及反應時間。 PIR Motion Sensor就是下面這個 圖片來源: learn.adafruit.com 可手動調整敏感度還有反應時間,這個有點不好調,要試好多遍才找到最佳位置。 可以在Raspbian中輸入pinout查詢GPIO避免插錯 圖片來源: learn.adafruit.com . 一台Raspberry pi 這次使用較舊的Raspberry pi model B+ 萬一老鼠生氣被咬爛錢包也不太痛 . 一張
前言:
我想很多大大也試過於Windows跑執行檔的時候可以傳參數, 例如 example.exe resolution=1280*1024,今天有同事問我順便跟各位大大分享一下小弟的寫法:
我想很多大大也試過於Windows跑執行檔的時候可以傳參數, 例如 example.exe resolution=1280*1024,今天有同事問我順便跟各位大大分享一下小弟的寫法:
- 先開一個專案(exeparameters),類型為Winform,建立後直接在設計畫面點兩下,進到Coding畫面。
- 打開後打概會看到以下的Code
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace exeparameters { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } } }
- 在public Form1()這一句我們可以看到這個執行檔並不能接受任何參數。先把Form1改裝變成可接受string[]陣列:
public Form1(string[] args) { InitializeComponent(); }
- 接下來把外面傳來的變數轉成內部使用變數
- 最後打開Program.cs檔案, 把
- 除錯之前要先設定輸入參數,不然測試的時候永遠沒有辦法傳參數到程式裡。
在方案總管中按下右鍵,選擇屬性 - myParameters有資料,表示成功傳入參數囉。
string[] myParameters;
public Form1(string[] args)
{
InitializeComponent();
myParameters = args;
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
轉為
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args));
}
你可能會有疑問,為什麼連Program.cs看起來沒有關係的檔案也要轉成可以接收string[]呢? 這是因為Winform初始化的時候會先到Program.cs查看第一張運行的是那一張form, 所以program.cs是執行檔最早的切入點。即是說如果要從外部傳入參數要先傳給Program.cs,然後Program.cs才會把參數值傳到form1那裡。
Comments
Post a Comment