跳到主要內容

發表文章

目前顯示的是 2月, 2013的文章

Arduino 數位訊號

一樣用程式碼解釋(這裡所使用到的Digital中都是所謂的數位訊號) int buttonPin = 2; // 人機介面 按鈕 在這裡設定Pin 2 int ledPin = 13; // LED Pin 設定13 int buttonState = 0; //一個變數 容器 裝載buttonMode狀態 void setup() { pinMode(ledPin, OUTPUT); //初始設定LED pin 是輸出端 pinMode(buttonPin, INPUT); //初始設定buttonPin 是輸入端 } void loop(){ buttonState = digitalRead(buttonPin); //變數buttonState 儲存buttonPin的狀態,不是HIGH就是LOW if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); //對應LED輸出端,讓LED發亮 } else { digitalWrite(ledPin, LOW); //對應LED輸出端,讓LED滅 } }

Arduino 處理接收的值

話不多說直接用程式碼解釋:(記得開中介程式) char incomingByte; //接收到的字元 這裡是兩個 這裡算是型態轉換的一個變數 char str[2]; //str陣列 裡面儲存 兩個字元 分別以兩個空間去儲存 int count = 0; //自定變數 void setup() { Serial.begin(9600); // 打開串列埠,設置串列傳輸速率為9600 bps } void loop() { if (Serial.available() > 0) //意思應該是 是否有傳值近來 { incomingByte = Serial.read(); // 把讀取的值 放在incomingByte str[count++] = incomingByte; if(count == 2) { count=0; //REFLASH陣列 Serial.print(str); // 印出陣列,接受到的值 exam(); //執行這個程式 } } } void exam(){ if(str=="W1") { Serial.print("W1"); // 如果字串為W1 就印出 W1 傳值給發送端 }else if(str== "S0") { Serial.print("S0"); // 如果字串為S0 就印出 S0 傳值給發送端 } }

Arduino 鍵盤事件

版子: Arduino Leonardo 之前我們在做人機介面時,把電子媒材所傳遞的類比或數位訊號透過Arduino轉換鍵盤或滑鼠事件都必須在靠中介程式或是JOYSTICK(要接上GamePad)的東西,雖然傳值也是要靠中介程式,例如C#、FLASH要傳字串或數字給Arduino接收,Arduino再去控制電器、機電等。但是這塊版子有提供新的寫法能夠直接控制鍵盤與滑鼠事件,無須在開中介程式。 其寫法如上圖: int digitalPin = 9; //我有接一個紅外線感測器,數位訊號,讓Arduino接收ON或OFF void setup() { pinMode(digitalPin,INPUT); //Pin9為輸入訊號端 Keyboard.begin(); //開起鍵盤事件 } void loop() { if(digitalRead(digitalPin) == HIGH) //在這個loop function 中持續去偵測Pin9 如果HIGH了就~ { Keyboard.write(65); // 就讓Keyboard寫"A" delay(1000); // 延遲1000毫秒 用意是不要讓店鬧一直印 讓他延遲一下在印 } }

ActionScript3.0 setChildIndex與getChildbyName

for (var i:int = 0; i < 4; i++) { var _mc:MovieClip = new ItemMC(); _mc.name = "item"+i; this.addChild(_mc); this.getChildByName("item"+i).gotoAndStop(i*20+1); } 我們宣告一個名叫做_mc的影片片段,使用自製類別(也是一個影片片段,這影片片段中有四個部分,使用程式去控制每個name停在指定的影格)。 這裡用for迴圈去讓他跑個四次,所以最後會產出四個不同的_mc.name,分別是item0~item3。 在倒數第二行的地方用this是因為上面addChild時是放在this這個空間裡面,所以我們要getChildByName的時候就要在this裡面找。而我在這裡做的事情是找到指定的名子,並停在我想要他停在的影格。其實這四個MC是同一個, if(trigger_.hitTestObject(this.getChildByName("item0"))) { this.getChildByName("item0").gotoAndPlay(10); this.setChildIndex(getChildByName("item0"),3); this.setChildIndex(getChildByName("item1"),2); this.setChildIndex(getChildByName("item2"),1); this.setChildIndex(getChildByName("item3"),0); } 上面這個是說假如 item0 碰到 trigger_ 影片片段,就會將舞台裡面的四個item重新排列他的圖層,從0~3,所以意思是item0跑到最上層。而改變圖層的方法()就是:setChildIndex( 影片片段 , 圖層位置 )。還算好用。

關於長寬比與投影機

寬高比 即一個影像的寬度除以它的高度所得的比例,通常表示為X:Y 或是 X*Y ,其中的冒號和叉號表示中文的「比」之意。 目前,在電影工業中最常被使用的是 anamorphic 比例(即  2.39:1) 。傳統的 4:3 (1.33:1) 仍然被使用於現今的許多電視畫面上,而它成功的後繼規格 16:9 (1.78:1) 則被用於 高畫質電視 和歐洲的 數位電視 上。這三種比例,是  MPEG-2 (DVD)數位壓縮格式所指定的三種標準比例,而 16:9 也被 藍光光碟 和 HD DVD 所使用,同時也是兩種普遍使用的 35mm 電影膠片之間的折衷方案(歐洲的 1.66:1 以及美國和英國的 1.85:1)。 上圖中每一個標籤都有一個英文名稱與對應的解析度,而當今我們的投影機規格中,解析度的部分就會以這些英文名稱定義之,例如:XGA解析度就是1024*768。 有關投影機設置或選購有幾點需要去注意: 1.投影機的投射的方式: 有正打  上打到下  下打到上,是背投影還是前投影或是短交投影,使用者與作品互動的距離,投射範圍會不會有人進入產生影子。 2.解析度-影響到製作前至設定與投影效果 。 流明-找尋適合場地的流明數投影機 。 鏡頭-影響到投影的距離,要符合現場空間,在展場空間設計之前必須計算妥當,每個鏡頭都有自己的投射比例,進而影響到投影機與牆面的距離,投射尺寸。輸入端子、電腦視訊輸入訊號。 3.投影機的微調功能,能不能做細部四點梯形較正、上下移動鏡頭、縮放比例。目前用過最棒的投影機是三洋的PLC-XM150,真的還不錯,但是很貴==。但聽說好像停產,三洋被Panasonic吃掉了。 PLC-XM150 投影機: http://www.herngwei.com/download/sanyo/chinese/PLC-XM150.pdf

有關解析度

影片或互動畫面等數位影像,根據不同解析度,可區分成 SD 、 HD 、 Full HD 。 等級 解析度 簡稱 畫質 SD 720*480 480p 、 480i 較差 HD 1280*720 720p 、 720i 佳 Full HD 1920*1080 1080p 、 1080i 最佳 在上述表格中,簡稱有 480p 和 480i ,加上 ”p” 的影片理論上會比加上 ”i” 還好,不過肉眼很難辨別兩者差異。 當我們再做作品的時候,客戶會提出許多的解析度,而我們就要抉擇,怎樣的作品適合怎樣的解析度,且有許多互動作品是必須用投影機投射出來的,投出來的尺寸,畫質, dot size ,投影機規格等等小細節都是環環相扣的,這可是一門學問,佈展與規劃展場設備可真是不簡單的一件事,需要了解許多 ” 眉角 ” 。 顯示卡輸出的視訊孔,一般常聽到的 VGA 是類比訊號 而 DVI 與 HDMI 則是數位訊號,有時候訊號不夠強或是 VGA 線路的問題導致解析度上不去,這時就要將輸出線路換成數位訊號的線路。 顯示卡 常見的接孔 : VGA (Video Graphics Array)  又叫做 D-SUB ,視頻圖形陣列接口,作用是將轉換好的模擬信號輸出到 CRT 或者 LCD 顯示器中 DVI (Digital Visual Interface)  數字視頻接口接口,視頻信號無需轉換,信號無衰減或失真,未來 VGA 接口的替代者。 DVI 數位端子通常比 D-SUB 要來得好,傳統的 D-sub 15pin 的電腦螢幕接頭走的是類比訊號, 將顯示卡內的數位畫面訊號轉換成類比訊號才送到電腦螢幕去;而數位介面全部內容均是採用數位格式的方式傳輸,從輸出端到接收端的傳輸過程中資料的完整性, 可以得到更清晰的影像。 DVI 的主要目的是讓顯示卡的畫面訊號透過數位的方式傳送到電腦螢幕。所以才會說 DVI 數位端子通常比 D-SUB 要來得更好。   DVI 接頭分成三種   ...

ActionScript3.0 控制影格nextFrame 與 prevFrame

var timer_test:Timer = new Timer(20,20) timer_test.addEventListener(TimerEvent.TIMER,timer_); function timer_(e:TimerEvent):void { mc_.prevFrame(); } 上面的程式碼,很簡單,很好用,但是我用的很暴力!!!! 我目的是要讓影片片段可以倒轉,我找不到有什麼方法()可以直接讓他倒轉。所以我用了timer並給予他跑20次的次數。我影片片段(mc_)就預設20個影格,所以才會讓timer跑20次就停住。而假如我下次再把timer(reset)掉就可以再次使用倒退影格了。 而倒退影格的方法()就是上面程式碼MARKER起來的那個, prevFrame (),這是倒退影格,前進影格呢?! 就是 nextFrame(); 又知道一個好方法()可以用了。 但我用的真的很暴力的感覺(硬要說)。哈哈!

ActionScript3.0 addEventListener與removeEventListener

在撰寫flash程式的時候,最常用到的就是對物件元件舞台等加入事件的傾聽,也就是addEventListener,但有時候我在觸發之後想馬上得移除掉傾聽事件,讓事件只發生一次,也避免傾聽事件再次發生,我就會在function中直接的removeEventListener。 然而我假如同時有好幾個傾聽事件要ADD與REMOVE,那程式碼就會"樂樂長",因此我都匯把所有的加入事件傾聽與移除事件傾聽分別放入兩個自創function中,如此一來能夠簡化程式碼的長度,以及能夠一目了然的看清楚程式碼,也不用一直拖曳BAR或滾輪,滾到手都抽筋。 function REU():void { Drag_tree_1.removeEventListener(MouseEvent.MOUSE_UP,tree_1_up); Drag_tree_2.removeEventListener(MouseEvent.MOUSE_UP,tree_2_up); Drag_tree_3.removeEventListener(MouseEvent.MOUSE_UP,tree_3_up); Drag_tree_4.removeEventListener(MouseEvent.MOUSE_UP,tree_4_up); Drag_tree_5.removeEventListener(MouseEvent.MOUSE_UP,tree_5_up); } /////removeaddEventListener DOWN function RED():void { Drag_tree_1.removeEventListener(MouseEvent.MOUSE_DOWN,tree_1_down); Drag_tree_2.removeEventListener(MouseEvent.MOUSE_DOWN,tree_2_down); Drag_tree_3.removeEventListener(MouseEvent.MOUSE_DOWN,tree_3_down); Drag_tree_4.removeEventListener(MouseEvent.MOUSE_DOWN,tree_4_down); Drag_tree_5.removeEventLis...

Augmentd Reality about Virtoolkit

Augmentd Reality about FLAToolkit

PV3DARApp , ARAppBase - FLARToolkit 寫好的 AS 包裹檔案。 物件檔案 AS 包裹檔案 - 自己所自製的 AR 包裹檔案,並對應到 FLASH 物件檔案 。 FLARToolkit 也是一套快速建構擴增實境技術的軟體,除了能夠辨識 PATTERN 以 及多個 PATTERN ,並且能夠以 FLASH   ActionScripts3.0 程式撰寫 PATTERN 之間的互 動,達到互動的多更能性,但是美中不足之處為效能不佳且無法增加太多的 3D 效 果。 必須有三個命名的資料夾, DATA 、 MODEL 、 OSG 。 DATA 檔案夾是用來放置 PATTERN 的資料夾 MODEL 檔案為放至 3D 模型檔案, FLAR 指限於讀取 DAE 檔案 OSG 檔案為原始下載來就存在的檔案,並不需要去更動 。 網頁 :http://saqoosha.net/en/flartoolkit/start-up-guide/

Augmentd Reality about ARToolkit

簡單的ARToolKit使用方法   如PPT所示::

ActionScript3.0 Starling用法

starling適用於連續貼圖,將所有動態單張的圖檔合成一張PNG圖檔,在使用XML去讀取該時間的該張圖。 要如何將許多的連續圖檔合成一張PNG圖呢?! 就是他"TexturePackerGUI",這軟體很棒,他可以直接匯出兩種檔案「PNG  &  XML」讓程式可以直接讀取。在這套軟體中可以調整PNG的大小和縮放比例等等。 接著,如左圖,我們將會出的檔案放到FlashDevelop中的bin-assets裡面命名為leaf01.png與xml檔。 注意:在左圖中,lib資料夾中有一個怪里怪氣的檔案叫做starling.swc這一定要放進去,否則會無法使用starling這個工具。這個檔案就像是我們自己製作的類別檔一樣,放進FlashDevelop後,記得將他add到library中,才能夠使用喔!!! 在src檔案中,我在Main.as放入Game2.as這個檔案,所以主要控制starling的檔案為Game2.as,我貼上主要控制starling的程式碼: private var _container:Sprite; [Embed(source = "/assets/leaf01_.xml", mimeType="application/octet-stream")] private static const SpriteSheetXML:Class;//embed Sprite sheet data file [Embed(source = "/assets/leaf01_.png")] _container = new Sprite(); addChild(_container); addChild(new Stats()); var bitmap:Bitmap = new SpriteSheet(); var texture:Texture = Texture.fromBitmap(bitmap); //將Sprite sheet轉成Texture var xml:XML = XML(new SpriteSheetXML()); //產生一個Sprite sheet data的XML var textureAtlas:Textur...

FlashDevelope Java暫存記憶體 釋放

最近再用FlashDevelop做一個互動牆 ......,因為使用到連續貼 圖,所以在編譯時常常卡住,輸出訊息出現以下: -----\/        \/ Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Build halted with errors (fcsh). -------------------/\                       /\ 這是蝦咪東西阿= =+ 於是就Google一下,發現是FD在編譯時好像會使用到Java的暫存記憶體。要怎麼釋放呢?! 先在C槽搜尋一下檔名叫做 jvm的檔案,找到之後,裡面會有一行-----\/ # Arguments to VM java.args=-Xmx 512 m -Dsun.io.useCanonCaches=false -------------------/\(紅色MARK起來的就是讓你改的地方) 我有嘗試過改的數值,386(這是什麼鬼數字,但是這是預設的)、512、1024、1300(我用過最高的,代表暫存記憶體可以吃到1.3G左右),大概是這樣囉!!!

ActionScript3.0 灰階應用

直接貼上~   講解~ var gray:Array = new Array(); var rwgt:Number = 0.3086; var gwgt:Number = 0.6094; var bwgt:Number = 0.0802; gray = gray.concat([rwgt,gwgt,bwgt,0,0]);//R) gray = gray.concat([rwgt,gwgt,bwgt,0,0]);//G) gray = gray.concat([rwgt,gwgt,bwgt,0,0]);//(B) gray = gray.concat([0,0,0,1,0]); //(alpha) var myFilter:ColorMatrixFilter = new ColorMatrixFilter(gray); pic.filters = [myFilter]; 灰階的RGB值就如 上面宣告的值一樣: R = 0.3086,G = 0.6094,B = 0.0802。 而gray陣列中的「concat」是做什麼用的呢? ADOBE表示: concat, 將參數中指定的元素和陣列中的元素連接,並建立新的陣列。 如果參數指定陣列,便會連接該陣列的元素。 http://help.adobe.com/zh_TW/FlashPlatform/reference/actionscript/3/Array.html#concat() 沒記錯的話,運用這些陣列做一個線性代數的運算,並運用flash中的 ColorMatrixFilter。 再讓「pic」(他是bitmap) 利用陣列中的「 filter 」方法,給bitmap點鎮圖新的參數,改變圖片本身的色調。 ~Yeah~ ----插圖----

ActionScript3.0 聲音用法

我超愛音樂的,但好像不關寫程式的事情啦。好啦~言歸正傳,FLASH是一個很快速可以做到一特殊效果的平台,例如酷炫的動態(要花很多時間設計與拉時間軸,這是一個功夫)、匯入聲音,控制流程等等,在此我們就來說說控制音訊檔吧。 當然首先要把音訊丟到元件庫中囉,目前我是用過wav和mp3都可以啦。然後將音訊檔發佈,讓程式可以讀取(讓她成為一個類別),並且將音訊檔命名: sound_mc 。 接著來介紹,先宣告一個變數。 var sound: Sound = new sound_mc(); 再新增一個變數,我把它稱為音軌(亂取) var channel: SoundChannel = new SoundChannel (); Flash 的 SoundChannel 他有個功能可以記錄音軌目前撥到什麼位置,在程式設計上就能夠使用暫停並且之後接著撥~ channel = sound. play (channel. position ); (基本上一開始讓音軌開始撥的寫法: channel = sound. play ();  這樣就好了,在此是因為有加入了暫停功能,所以按下暫停紐的時候,他會在音軌上做一個紀錄。但在PASS紐案件裡的function 要加入 : var pausePosition:int = channel. position ; 他才會記錄喔~) 當然 讓音訊停止 就用以下的用法吧!! channel. stop (); --------By The Way------ var soundVolume: SoundTransform = new SoundTransform (); 調整音軌聲音 參數介於 0 ~ 1 soundVolume. volume = 0; 靜音 (有關Sound的用法,請洽ADOBE關網: http://help.adobe.com/zh_TW/FlashPlatform/reference/actionscript/3/flash/media/Sound.html ) ----------又要插圖了= =

ActionScript3.0 「netStream」與「NetStatusEvent.NET_STATUS」

stream.addEventListener(NetStatusEvent.NET_STATUS , replay); function replay(e:NetStatusEvent):void { switch (e.info.code) { case "NetStream.Play.Start": //trace("Start [" + ns.time.toFixed(3) + " seconds]"); break; case "NetStream.Play.Stop": //trace("Stop [" + ns.time.toFixed(3) + " seconds]"); stream.play(videoURL); break; } } ---------------------------------------- 接收NetStream事件 當然要先要建立一個裝串流影片的容器,接著我就把ADOBE官網說的複製貼上一下做為補充說明: 串流音效或視訊的一般工作流程: 下列步驟摘要說明發佈即時音效或視訊的工作流程: 建立 NetConnection 物件。 使用  NetConnection.connect()  方法連線到伺服器上的應用程式實體。 建立 NetStream 物件,以建立連線內的資料串流。 使用  NetStream.attachAudio()  方法透過串流擷取和傳送音效,及使用  NetStream.attachCamera()  方法擷取和傳送視訊。 使用  NetStream.publish()  方法為串流指定唯一的名稱,並透過串流傳送資料給伺服器,讓其他人可以接收到。 此外,您也可以在發佈資料時錄製資料,讓使用者可以在稍後播放資料. ( http://bbs.flash2u.com.tw/_html/demo/Adobe_Flash_CS4_Help/flash/events/NetStatusEvent.html#info ) 這裡有一些Info的指...