2016年10月31日 星期一

「Camera」照片分享-台中歌劇院
































焦距 25

光圈 2.5

快門 1/2000

[MCU] PIC 24FJ64GA002 燒錄電路

看到"從PIC開始! RC伺服機機器人製作入門"上的燒錄電路,動作DIY一下。

(由於不確定書中電路圖是否能PO,所以只PO成品)


























正面照1


正面照2



























背面照(焊接技術不好傷眼,多包函)


零件表:

KT-10 電木板                    NT  10

OK 線一捲                        NT 35 (其實只用到一點點)

電源2.1母頭含線             NT 12

1/2 W 10K歐姆電阻        NT  1

10 uF 積層陶瓷電容器    NT  38

28-pin DIP ZIF sockets   NT  135

8 PIN  90度排針座          NT   2

---------------------------------------------
合計                                   233



讀取ID成功



























心得:

(1)使用PICKET 3  建議供電3.3V。

(2)10 uF 積層陶瓷電容器真難買,長明街找了3家都沒有賣,

     最後在RS網站上購買到。

https://twcn.rs-online.com/web/p/ceramic-multilayer-capacitors/8118373/


參考連結

http://shop.robotkingdom.com.tw/books/pic-rc.html

從PIC開始! RC伺服機機器人製作入門

2016年10月15日 星期六

[賣摳Soft] Ubuntu 16.04 LTS 安裝.Net Core

參考以下網址

https://www.microsoft.com/net/core#ubuntu

會有二個,記得選擇下方的16.0.4 ,不要用到上面的14.04

































共有3個指令

 sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'  
 sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893  
 sudo apt-get update  


操作畫面截圖





接下來安裝.Net Core SDK

 sudo apt-get install dotnet-dev-1.0.0-preview2-003131  






























建立一個測試Hello World專案資料夾

 mkdir hwapp  

進入專案資料夾

 cd hwapp  

初始化專案

 dotnet new  

第一次執行dotnet core會出現這個畫面
























跑了約1分鐘後,會告訴你新的C#專案建好了
























這時候資料夾中就會Program.cs以及project.json了






程式碼主要是寫在Program.cs裡面,我們來看一下它裡面有什麼

















而project.json則是一些專案的Properties



接下來我們來透過NuGet 還原一下,在project.json中指定的相依性套件。

 dotnet restore  


























編譯 &執行 (如果編譯有出錯就不會執行了)

 dotnet run  


成功印出Hello World!
















到這裡,你的.Net core基本上是安裝成功的,接下來我們來自己寫一小段程式。



編輯Program.cs

 nano Program.cs  

程式碼如下























我們沒改動套件,所以直接編譯 & 執行

 dotnet run  





















忘了Window Form 吧~在.Net Core中沒這東西






參考網址:

https://www.microsoft.com/net/core#ubuntu


2016年10月9日 星期日

「C#] 取得空的磁碟機代碼

最近要做動態掛載遠端磁碟,所以寫了一個method,

可以取得目前沒用到的磁碟代號。


   public char getFreeLabel()
   {
        char letter = ' ';
        ArrayList driveLetters = new ArrayList(26); // Allocate space for alphabet
        for (int i = 65; i < 91; i++) // increment from ASCII values for A-Z
        {
            driveLetters.Add(Convert.ToChar(i)); // Add uppercase letters to possible drive letters
        }

        foreach (string drive in Directory.GetLogicalDrives())
        {
            driveLetters.Remove(drive[0]); // removed used drive letters from possible drive letters
        }

        foreach (char drive in driveLetters)
        {   // get first unused drive letters
            letter = drive;
            break;
        }
        return letter;
    }



會回傳A~Z,如果回傳的是空白,則代表己經沒有空的磁碟機代號了。


參考來源:

https://hardforum.com/threads/c-getting-free-drive-letters.1208456/

「Raspberry PI」啟用Webcam拍照

Raspberry 如果要啟用webcam拍照,除了用OpenCV之外,

還有一個簡單方法,安裝fswebcam這個套件。


 sudo apt-get install fswebcam  

安裝過程大致上長這樣

 pi@boywhy-pi2:~ $ sudo apt-get install fswebcam  
 Reading package lists... Done  
 Building dependency tree      
 Reading state information... Done  
 The following packages were automatically installed and are no longer required:  
  pypy-upstream-doc wiringpi  
 Use 'apt-get autoremove' to remove them.  
 The following NEW packages will be installed:  
  fswebcam  
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.  
 Need to get 44.0 kB of archives.  
 After this operation, 105 kB of additional disk space will be used.  
 Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main fswebcam armhf 20140113-1 [44.0 kB]  
 Fetched 44.0 kB in 1s (35.9 kB/s)    
 Selecting previously unselected package fswebcam.  
 (Reading database ... 126790 files and directories currently installed.)  
 Preparing to unpack .../fswebcam_20140113-1_armhf.deb ...  
 Unpacking fswebcam (20140113-1) ...  
 Processing triggers for man-db (2.7.0.2-5) ...  
 Setting up fswebcam (20140113-1) ...  
 pi@boywhy-pi2:~ $   

拍一張,存成test.jpg (採用預設的解析度,大概是320*240 左右)

 fswebcam test.jpg  


指定拍照解析度(如果Webcam不支援的話,fswebcam會自動調整成最接近的解析度)

 fswebcam -r 1280x720 image2.jpg  

訊息大致上長這個樣子,注意 Adjusting resolution from 1024x720 to 640x480. 代表相機不支援1024x720,被強制改成640x480了
 pi@boywhy-pi2:~ $ fswebcam -p YUYV -r 1024x720 test.jpg  
 --- Opening /dev/video0...  
 Trying source module v4l2...  
 /dev/video0 opened.  
 No input was specified, using the first.  
 Adjusting resolution from 1024x720 to 640x480.  
 --- Capturing frame...  
 Captured frame in 0.00 seconds.  
 --- Processing captured image...  
 Writing JPEG image to 'test.jpg'.  
 pi@boywhy-pi2:~ $   


以上拍照後,相片上都會有個banner寫著拍照時間等等,如果不要的話,可以加上

--no-banner這個參數,相片就不會有多餘的資訊被打上去。

 fswebcam -r 1280x720 --no-banner image3.jpg  



如果拍照出來是黑黑的一片,注意一下是否有發生如下的訊息



GD Error: gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: 

俺試了2支Webcam,羅技C310 是OK的,但是C 170 就會出現這個錯誤訊息。

俺查詢了相關資料後,做了一個嘗試,改變 palette format 為YUYV後正常,

推測應該是Webcam硬體支援上的問題。

 pi@boywhy-pi2:~ $ fswebcam -p YUYV test.jpg  
 --- Opening /dev/video0...  
 Trying source module v4l2...  
 /dev/video0 opened.  
 No input was specified, using the first.  
 Adjusting resolution from 384x288 to 352x288.  
 --- Capturing frame...  
 Captured frame in 0.00 seconds.  
 --- Processing captured image...  
 Writing JPEG image to 'test.jpg'.  
 pi@boywhy-pi2:~ $   

正常取得照片





















參考資料:

USING A STANDARD USB WEBCAM

fswebcam - gd-jpeg: JPEG library reports unrecoverable error

[C#] String自動斷行

在使用Label遇到就是文字斷行問題,在網路上找到一個解法,寫成一個Method紀錄一下


//透過一個RichTextBox來做斷行功能, sourcetext為字串,width在螢幕上要顯示的寬度
private string autoLinebreak(string sourcetext, int width)
    {
        //宣告一個RichTextBox來用(不會出現在畫面上)
        RichTextBox rtbWrap = new RichTextBox();
        //設定RichTextBox自動換行(不會引響原本的字串,所以後還是要是依據斷行結果,做字串上的處理)
        rtbWrap.WordWrap = true;
        //設定RichTextBox寬度(你想要讓文字顯示在畫面上最大的寬度)
        rtbWrap.Width = width;
        //指定字串給RichTextBox
        rtbWrap.Text = sourcetext;
        //初始化回傳斷行結果的字串
        string resultstr = "";
        //初始化變數
        int i = 0;
        //GetFirstCharIndexFromLine,當i行第一個字元不存在(這行沒東西),會回傳-1,
        //否則會傳i行第1個的Index(就像Array中的Index)        while (rtbWrap.GetFirstCharIndexFromLine(i) != -1)
        {
            int thislineindex = rtbWrap.GetFirstCharIndexFromLine(i);
            int nextlineindex = rtbWrap.GetFirstCharIndexFromLine(i + 1);
            //沒有下一行了,可以在這個地方切斷,並補上斷行。程式執行完這一輪就停了
            if (nextlineindex == -1)
            {
                resultstr += sourcetext.Substring(thislineindex) + "\n";
            }
            //找到這一行以及下一行的Index,補上斷行符號
            else
            {
                resultstr += sourcetext.Substring(thislineindex, nextlineindex - thislineindex) + "\n";
            }
            //i+1 ,進行迴圈下一輪
            i++;
        }
        //釋放RichTextBox資源
        rtbWrap.Dispose();
        //回傳斷行完畢的字串
        return resultstr;
    }





參考資料:


[C#]幫我換行謝謝