Search

2011年9月29日 星期四

有別於C++ Templates - The Complete Guide上的靜態多型



#include <iostream>

template<typename T>
class Base
{
   public:
      void Print();
      void Try(){
T *obj = static_cast<T*>(this);
obj->Print();
      }
};

class D1:public Base<D1>
{
   public:
      void Print(){std::cout << "D1" << std::endl;}
};

class D2:public Base<D2>
{
   public:
      void Print(){std::cout << "D2" << std::endl;}
};

int main(int argc,char**argv)
{
   D1 d1;
   D2 d2;

   d1.Try();
   d2.Try();

   return 0;
}


跟C++ Templates - The Complete Guide第十四章的靜態多型一樣,都是依靠傳入的template argument型別來決定,然後今天早上看到這篇才又想起來,基本上優缺點跟十四章的靜態多型一樣,不過寫成Class Template繼承體系又多了可以把實作跟介面分開的優點,書上是做Function Template。

2011年8月30日 星期二

一些還不錯的書

前些日子同學直屬學弟說他也讀資工叫我推一些書,後來我就翻一些以前高中買的書給他這樣,所以我就想說紀錄一些我看過來不錯的書給有需要的參考,寫出來的都看過不下N次,除了講D3D10的要shader環境我的顯卡沒辦法外其他都有實驗過。

侯捷C++系列:
    1. C++ Primer 4/E
    2. C++ Templates全覽
    3. C++物件模型(絕版)
    4. STL源碼剖析(絕版)
    5. 泛型程式設計與STL(絕版)
    6. Effective C++ 3/e
    7. More Effective C++
    8. Exceptional C++
    9. C++設計新思維:泛型編程與設計範式之應用
    10. C++編程規範
    11. 多型與虛擬(絕版)
    絕版的都是當時看的時候,現在應該也有幾本是買不到的要去圖書館借,目前COM本質論還丟著沒時間認真研究,這本也是絕版的。

    其他:

    1. Windows程式設計(王豔平 著,這本都講win api重點部份搭配MSDN學很快,當初看他有講簡單的Dll Inject就買了,MFC部份可以跳過因為直接衝wxWIdgets會比較好XD)
    2. 3D繪圖程式設計(彭國倫 著,這本大推不過要注意顯卡支不支援shader的部份)
    3. Assembly Language for Intel-Based Computers 5/E (貝殼書,講MASM有人說有點學院派但是我覺的寫的很好理解)
    4. C語言之修煉與實踐(用GCC+GDB+VIM當教學環境蠻特別的,也有講一些基礎資料結構)
    5. 加密與解密3/e(看雪出的大多講逆向分析算是比較全面)
    6. 0 DAY安全軟體漏洞分析技術(主要講buffer overflow目前出第二版了)
    7. 揭密-資料解密的關鍵技術(原本以為是單純逆向,結果其實是在講怎麼拆遊戲資源,有對一些圖像格式做講解,然後有注意到它拆的遊戲是ef-the first tale...其實要看這類可以去一些字幕組的漢化教學找到一些不錯的資源XD)
    8. 最間單的互動設計Arduino一試就上手(Arduino我只看這本,因為其實很多Arduino的書都寫的一樣有差別的都是控制元件,換句話說要對電機電子學多做研究會比較好,另外就是聽作者說要出第二版嚕XD)
    其他還有很多網路找的些謎版ebook跟資料都不錯,這些算是比較好入門的,寫這是因為以前自己摸索遇到爛書浪費不少時間又不知道它寫錯只能上網慢慢股狗這樣XD

    2011年8月28日 星期日

    Nixie Power Supply

    幾天前半夜沒勁就把上上禮拜做的管鐘的設計圖拿出來研究,爬一些文加上問查爾斯電子DIY的站長大致上是理解工作原理了,其中最重要的就是電源,因為數字管要到一定電壓才會發光,比如IN-16建議電壓就要140V,但是還好從上次的圖可以得知用兩個電容兩個二極體可以做一個倍壓電路,大學電子學有提到用重複充電的特性達成的,然後接上110V的交流電就可以變成220V,但是我覺的直接引用插座的交流電有點危險,後來問站長得到很棒的答案,站長給了一個Nixie專用的電源供應電路,可以用9VDC倍壓到200VDC!線路很簡單連我都能黏出來XD不過後來我有找到有曝光圖的文!使用時要注意電容耐壓不然會爆掉的樣子,100uH的電感要用工字電感,有線圈的那種不是色碼的,接著就是將輸出接到管子就會發光了,至於接法可以看這裡寫得不錯,大致上就是有白色乳膠那隻腳是陽極,其他的數字跟點都是陰極,然後陽極接上電壓,陰極接地該數字或點就會發光,陽極電阻要接多大可以這樣計算,假設電源供應輸出200VDC但IN-16發光電壓是140V而且最好不要超過170V,電流又是消耗2mA所以關係如下:(200VDC - 140V) / 2mA = 30k歐姆左右,因此電阻就可以接2~3W然後33k歐姆的電阻,至於要控制哪個數字發光,可以在該數字的接腳接上一個MPSA42電晶體,然後IC輸出接一個電阻在接到電晶體的基極(Base)控制是否導通然後發光,也有人用74141這顆IC,不過暫時還沒有閒暇時間去研究這樣XD

    測試影片:

    因為那顆MOSFET沒焊上所以接觸有點不良XD







    =============2011/12/15===============


    今天沒事做也不想刻Graphics Framework然後去材料行找精密電阻把整個電路都用精密電阻後變得很穩定了!


    2011年8月16日 星期二

    Focus



    這幾個月注意力真的超不集中ORZ...,主要是關注太多項目而且又同時執行...XD,所以我想還是要把注意力集中在遊戲上,目前遊戲製作的進度一直停在二月,當初設定兩年完成的時間也剩一年半了...,最大的原因就是當初很執著要用Arduino控制機器人,在洗電路板還有焊接那邊搞了三週(雖然現在覺的這兩招很實用XD),然後Arduino終於能自製了又發現三合一體積太大,所以又從機構下手改造,而作機構也很複雜,光是要爬文爬到可以讓我用手加工又能有壓克力強度的材料也是搞了好幾周...,其實當初就有SSC32的選擇,但是我就是想整台DIY(電路+機構+程式),最後出來的東西功能都有但是不甚理想,也因為馬達太便宜力量不夠不能使用仿多足生物步伐(抬腳速度太快會垮掉),總結就是我必續決定專注幾個項目,然後用下半年去執行,畢竟下半年也快過三分之一暑假也剩一個月了...,這個暑假搞轉學也是消耗很多時間去了...,所以我有想下半年三個優執行先事項,先把遊戲DEMO做出、英文要加強、最後就是用空閒時間練習很久沒搞的Reverse跟素描,還有就是最近辦了Desire HD花光所有積蓄,不過它可以拿來取代我被拿走的DC(上圖就是它拍的,也能錄影)而本身OS是Android可以讓我寫用藍牙控制下一台要做的機器人的程式XD


    2011年8月8日 星期一

    第一步



    剛剛聚餐回來花了點時間把六足的控制系統還有步態完成了,目前使用WII雙節棍還有RF模組做無線遙控,可以前後左右移動,雖然移動很慢(馬達不夠力太快會垮掉),但我想未來只要用好一點的馬達絕對可以達到實用的程度,當初是打算花NTD:3000完成,但是因為像RF模組還有鎳氫電池買現成的都很貴所以有小超過,但仍然比一台八千起跳的便宜一半XD,最重要的還是連控制板到機構等等都自己DIY很有趣W算是做信心的以後要玩大的比較不怕失敗,當然按照慣例這篇也是開一個Robot的tag。

    材料(NTD):
    1. SG90十八顆:1440
    2. 3M雙面膠:120
    3. 9V鹼性電池:106
    4. NexCell 1.2v/1600mAh鎳氫電池四顆:250
    5. TAMIYA改造膠版3MM一片:140
    6. RF收發模組:200
    7. WII雙節棍:500
    8. ATMega328四片:700
    9. 雜項:300
    Total:3756(NTD)

    2011年8月4日 星期四

    Tube Clock




     
    今天吃飯前用這空檔把管鐘的板子洗出來了,曝光圖檔是M01上一位大大改良的 :http://www.mobile01.com/topicdetail.php?f=181&t=2206805&p=1 ,目前材料大概也都蒐集到了,但是還少一顆叫74HC4013的IC,等這顆找到才會開始來焊接,另外就是因為我不會洗雙面板,所以只好用單面洗兩張到時候焊接再把洞對準即可(沒試過不確定XD),還有那種很小的好像叫SMD的電阻跟電容我沒有黏過這種材料,所以可能還是要先練習才能上XD總之跟某位大大說的一樣,管子沒亮看起來就很讚了真希望它趕快亮起來XD

    2011年8月2日 星期二


        

       最近看蠻多朋友用"wxWidgets"當關鍵字找到在下的部落格的,大多似乎都是覺的新鮮想試試的朋友,因此我想到去年入門就是看本文章標題那本書,這本書似乎也是官方推薦的手冊,但這本書其實有很大問題,就是有很多sample有錯誤,而且沒錯誤的的地方有的也是wxWidgets的目錄下自帶的samples直接去擷取"一小部份",所以看起來沒頭沒尾還要理解它說的意思實在有點困難(在下駑鈍XD),所以我想到的是既然wxWidgets的使用在這本書可以得到不少啟示(現在也出很多wxWidgets的新書),而且官方Document對wxWidgets的使用也說的很清楚了,那我可能就會把之前自己將wxWidgets簡化後sample做紀錄,因為我認為wxWidgets自帶的sample實在很噁心,把所有實作檔案跟宣告都放在一個.cpp....所以少則千行,多的也有快到三千行甚至以上...再來就是找時間把本書再看一次把之前印象有錯誤或沒頭沒尾的地方紀錄,不過除了這本之外後來出的講wxWidgets的書我是都沒看過,所以不卻定有沒有更好的選擇,因此也有可能發現寫的更好的書在拿出來討論XD(當然以上都是個人主觀認為)。

    2011年7月31日 星期日

    好的開始

    很久以前(那時候連LED都不會控制XD)一直想做的六足在本月比較密集動工,今天終於讓它站立了,我相信這是踏入機器人領域一個好的開始XD突然也想把這個設定為兩年的project了XD跟現在在做的遊戲一樣(已經做半年了XD),最終結果是希望能夠有自己開發的N軸向PC端控制款體,還要有視覺系統以及可以安裝一樣配件(機器手或電槍之類的XD),,雖然目前能夠站立,但是必須要先騰空設定好姿勢在放到地上,沒辦法在關閉狀態然後在地上自己站起來(太重),應該要把大腿的部份縮短減少槓桿,還有電池實在太重了,給控制板的9V鹼性電池加上電池殼約56g,然後給Servo的四顆鎳氫電池加上電池盒要147g....比用TAMIYA的プラ板做的機構全部還重...而且第二層太高也要修該一下高度,不過我想完全修改完還是只能用波型步態,三腳步態可能還是很沒力而且又不穩定,雖然SG90這顆Servo號稱給4.8v能有1.8公斤的輸出力,不過我沒有用彈簧拉伸量的方式去測試,所以我猜它要再打個八折約1.44kg的輸出而已,電池應該會改用模型用的四、五顆包成一包那種感覺會比較輕,然後控制就是RF+WII雙節棍這個比較沒問題,等重量問題解決了大概步態一下子就能寫出來了XD

    2011年7月22日 星期五

    晶體振盪器與陶瓷電容鬼打牆的解決方法

        兩天前想趁著空閒時間把小六足用的三合一Arduino完成(三個麵包板版本合成一塊),結果很不可思議的晶片居然沒有辦法Work,原本以為是三個晶片用同一個電源造成的問題,後來把三個電源都獨立之後裝況依舊,麵包板版本除了這片三合一的之外我之前已經做過兩片了,連Arduino官方版本我也做過一片皆可正常Work,所以一直沒有頭緒到底問題出在哪,然後今天早上想說藥水還沒倒掉所以在洗一片直接重作,結果問題一樣存在...,於是我整個下午都把心思放在這問題上,一開始依照學工程的人敏銳的第六感我覺的應該是振盪器有問題所以晶片不能正常工作,但是又覺的振盪器應該不容易有瑕疵而且還一次三個,所以我把腦筋動到陶瓷電容上,因為我發現這次用的陶瓷電容雖然跟先前DIY的Arduino一樣都是0.1uF但是耐壓不同,當然我也不是學電的所以也不知道有沒有可能是這個的差別所以就先換一組起來,測試後問題一樣存在,因此只好換晶體振盪器,結果一樣很神奇的沒有解決問題...這時一整個被搞到精神耗弱索性跑去寫遊戲,結果剛剛突然想到先前想做Boarduino買的陶瓷振盪器,這東西應該是把陶瓷電容跟振盪器做在一起,他有三支腳,中間那支接地另外兩支接上晶片即可,結果很邪門的這個先前做很多次的麵包板版本Arduino就可以正常Work了...所以我在猜可能是店家最近進貨的振盪器或是陶瓷電容品質不佳所造成的吧...ORZ



    於是最終成品就是下圖那樣了...,雖然很醜但是能正常Work,只能說這個問題跟玩M$的Compiler或LIB遇到一些鬼打牆的事一整個讓人籃球火!



    2011年7月6日 星期三

    Arduino - 使用RF模組

        關於無線射頻的應用最常見的大概就是遙控玩具了所以不多做說明,要讓Arduino使用RF收發模組必須要知道Arduino的Digital pin 0 & pin 1,pin 0是RXD(Receive Data)接收資料的,pin 1是TXD(Transmit Data)送出資料的,所以要發送資料的Arduino的TXD要接上RF發射模組,接收資料的Arduino的RXD要接上RF接收模組,這樣兩個電路就可以"單向"傳輸資料了,其實原本我打算使用IR的方式控制我的小六足,但是後來發現IR會有角度的問題,所以後來就決定使用RF的方式。

    2011年6月30日 星期四

    Pyroelectric Detector

        本來這篇是要跟Temperature Senso寫在同一篇才對,但是一直沒有找到之前上課存下來的電路圖,所以就現在才寫而且獨立開一篇了XD,人體溫度感測器可能常見的還是騎樓下的保全系統或是小七的電動門,當經過感測器時感測器瞬間電壓的變化就會造成打光系統啟動或是電動門打開,不過很多監視攝影機其實不用打光,因為本身就是CCD元件在加上紅外線,即使在夜晚也能拍到物體。

    2011年6月19日 星期日

    DIY Arduino - 將Bootloader寫進ATMega晶片!(3)

    因為這兩天產能低下沒作到什麼事,所以就寫完這最後一篇好了,來完成承諾XD

    事實上所謂的Arduino指的其實是它的Bootloader跟Compiler,至於Bootloader的功用簡單來說就是你不用直接去寫AVR的Assemble,用搭配的Compiler寫C/C++就可以透過它的Interface去控制ATMega了,許多做控制板的公司也都早就使用這種概念,主要是簡短一般的開發時間而且方便教學,但需要優化或是要寫複雜的演算法可能就比較不足,電路只要用能剛好驅動ATMega晶片即可(官方網站的麵包板版本就是),要怎麼layout電路就是看個人喜好了,不過官方有個COM Port的標準版本可以參考,就稱它為官方標準版本好了。

    2011年6月9日 星期四

    Arduino - Super Mario BGM

    前言:

    超級瑪莉歐是老任的招牌人物之一,其遊戲關卡第一關的MIDI音樂也是它的招牌!


    準備材料:
    • Arduino
    • 揚聲器(8ohm / 0.5W)
    • 100ohm電阻(可有可無)

    2011年6月8日 星期三

    Switch

    開關的種類相當多種,開關的基本原理就是將斷路點相接啟動反之則關閉,要注意的是開關的選用除了構造是否合適外還跟承受力大小有關,換句話說要讓斷路點接合的力量大小取決於金屬材料本身的彈性係數,因此這類開關反應速度沒有電晶體來的快而且會彈性疲乏,但是在大多工業應用還是很廣泛而且又便宜。

    1.磁簧開關:

    市面上賣的都是將一個開關電路封在一個玻璃阻隔物中,然後可以用帶有磁性的物件來吸附接點的金屬使之導通,也就是取決於磁力,因此一般的「繼電器(Relay)」就是屬於這樣的應用。



    2.振動開關

    當這種開關側面受力時會使接點接合然後導通,一般郵局銀行的防盜玻璃上安裝的就是這種類的開關,當歹徒敲擊玻璃時表面振動的力量就能導通警報電路。



    3.極限開關

    這種開關在CNC之類的加工母機一定都會看到,當操作人員或是程式撰寫不當導致CNC加工母機發生所謂的「過行程」時,剛好使極限開關啟動發出警報聲,並且同時間切斷整個加工機的電源來保護機器,而這類開關也都相當靈敏。



    Condenser Microphone

    電容式麥克風的原理是利用聲波改變電容兩極板的距離,造成電壓值的不同來輸出,看下圖可知聲波打到前板造成與後板的距離改變,使電容的電壓改變之後輸出,通常輸出的電壓還會在做放大然後才輸入到喇叭。



    電容式麥克風的電器符號,上面接點是VCC下面是GND中間就是電壓值輸出了。



    可以看下面一個電容麥克風與喇叭的電路圖,將電容麥克風Vo11的電壓值輸出到喇叭的電路Vin1在做訊號放大最後傳至喇叭放大音訊!




    2011年6月7日 星期二

    Phototransistor

    光電晶體的應用很廣泛,從常見的循跡車到滑鼠還有快門計數器等等都可以看到,光電晶體的種類很多,常見的單一個還有光遮斷器以及上照式光遮斷器(CNY70)都是光電晶體的一種。

    1.光電晶體


    2.光遮斷器

    3.上照式光遮斷器


    wxWidgets

    自從去年暑假Plurk上某大大推薦使用wxWidgets後,跑去用了一下感覺真的是簡單易用,如果對MFC有一定的概念其實是很好上手的差異不會太大,有差異的不是wxApp衍生類別的實體化的形式不一樣就是子窗口或是選單創建的寫法不同這些都不過是雞毛蒜皮的微小差異,嚴格說起來除了去年腸病毒住院用兩天寫一個一千五百行的彈幕(wxWidgets + OpenGL)外沒寫過太大的project 都弄一些小工具XD,不過很有趣的是完全不用修改就可以在windows & linux 編譯過,而且效能不見得會比MFC差甚至更好!

    Temperature Sensor

    溫度感測器一般用在空調的溫度顯示,根據需求不同選用適當的量測範圍,以AD590來說大約是在 -55℃ ~ 150℃其精度是1uA/K,要注意的是要將絕對溫度換成要將絕對溫度減去273.15,溫度感測器的電器符號是以兩個圓圈串上一條直線並在兩端畫上正負號作為代表。

    2011年6月1日 星期三

    Arduino - 使用 Wii Nunchuck

    前言:


    Wii Nunchuck是使用Inter-Integrated Circuit也就是俗稱的I2C作為protocol,關於I2C的初始化等等工作可以參考Example -> Wire裡面的範例,Nunchuck有四個重要的腳位:VCC、GND、SDA、SCL,這四個腳可以分別接上Arduino Analog 2~5,因為Analog 4、5是Arduino的I2C腳位SDA、SCL,而Analog 2、3則就會設成GND與VCC。





    2011年5月16日 星期一

    DIY Arduino - 來玩焊接吧!(2)

    可以先參考我的上一篇DIY Arduino - 從洗電路板開始!(1),或是用俗稱的"洞洞板"來當作等一下要焊接的基板,而焊接是參考這篇可以先看看,至於沒有焊接經驗的可以看這篇(我也是看這篇,訣竅要自己領悟XD),要注意的是這個版本其實是把官方網站上的Building an Arduino on a Breadboard作成PCB版本,不一樣的是並沒有加入RS232 Port,所以要將程式Upload必須要有FTDI模組(建議買現成的,可以用"FT232"當關鍵字去找找)。


    stringizing and merging operator

    既然說要紀錄了,那就順便把以前學MFC時兩組關聯執行時期型別鑑定(RTTI)的巨集,DECLARE_DYNAMIC、IMPLEMENT_DYNAMIC中看到的#和##運算子的使用說明一下,至於上面兩組巨集的實現可參考「深入淺出MFC」或是「Windows程式設計」(王豔平編著)有簡潔的說明。

    #(stringizing)是"字串化"運算子,只能用在帶有參數的巨集,可以直接看範例比較快。

    範例:


    #include ‹cstdio›

    #define str(x) printf(#x)

    int main(int argc,char**argv)
    {
        str(stringizing\n);

        return 0;
    }





    ##(merging)是"合併"運算子,一樣直接看範例比較快。


    範例:



    #include ‹cstdio›

    #define mer(s,n) printf(#s,val##n)
    const int val1 = 7;

    int main(int argc,char**argv)
    {
        mer(%d\n,1);

        return 0;
    }

    2011年5月15日 星期日

    Arduino - 使用H Bridge控制直流馬達(L293D)

    前言:

    關於使用MCU去控制大電流之電動機都會用到放大電路,原因是一般MCU比如Arduino大約只有輸出20mA的電流,甚至現在講求低功耗的MCU只有8mA或更少,因此我們需要由兩個電晶體組成的電路「達靈頓電路」來做電流放大,一般可以買到封裝過的比如「TIP12X」系列,但這類電晶體並不能控制電流方向,換句話說使用這類電路電動機就只能往單一方向運動,如果要改變方向就必須要能改變電流流向,這時就要用到所謂「H Bridge」也就是俗稱的「H橋」電路。



    2011年5月14日 星期六

    DIY Arduino - 從洗電路板開始!(1)


    基本上這個系列的教學(分三篇)是以我自己本身也非電子相關背景的方法來寫的,所以我相信只要東西都弄到要自己如法炮製一樣能完成,建議以前有自己將.hex檔案燒錄進晶片中的經驗者,或是你已經有一塊Arduino的板子才建議你可以考慮自己試著DIY一片Arduino,因為最後要將Arduino Bootloader(目前最新的版本是 UNO )燒錄進ATmega328P-PU有點麻煩,有官方的Arduino板子可以把它當ISP去燒錄晶片會比較方便,不然就是自己製作一條ISP燒錄線(第二篇會提到),我也有看到露X拍賣有賣已經燒錄進Arduino Bootloader的晶片了,至於Arduino的介紹我想去咕狗能找到很多很不錯的說明在這裡我就不提了。
      

    2011年5月9日 星期一

    哈囉!

    關於這裡我想用它來紀錄一些筆記讓我日後需要時可以回顧:)