2020年4月11日 星期六

[Arduino] 讀取訊號

讀取訊號

目的:藉由電阻的不同,讀取到不同的訊號

  1. 環境準備
  2. 額外材料
    • 可變電阻 *1
    • 麵包版 * 1
    • 無源蜂鳴器*1
    • 線材
      • 公對母 * 3
      • 公對公 * 5
  3. 程式
    • 開新檔案
    • 另存新檔
      • 檔名:04_DetectSinglal
      • 填入內容
      • const byte analogPin =A0;
        int value;
        
        void setup() {
          // put your setup code here, to run once:
          Serial.begin(9600);
        }
        
        void loop() {
          // put your main code here, to run repeatedly:
          value = analogRead(analogPin);
          Serial.println(value);
          tone(13,value,500);
          delay(550);
        }
示意圖

開啟監控畫面


2020年3月14日 星期六

[Arduino] What is Arduino?

Ref : 維基百科

Arduino是一家製作開源硬體和開源軟體的公司,該公司負責設計和製造單板微控制器和微控制器套件,用於構建數位裝置和互動式物件,以便在物理和數位世界中感知和控制物件。

Arduino電路板設計使用各種微處理器和控制器。這些電路板配有一組數字和類比I/O引腳,可以連接各種擴充板或麵包板和其他電路。這些電路板具有串列埠,包括某些型號上的通用串列匯流排(USB),也用於從個人電腦載入程式。微控制器通常使用C/C++程式語言。除了使用傳統的編譯工具鏈之外,Arduino專案還提供了一個基於Processing語言專案的整合式開發環境。

Arduino專案始於2003年,作為義大利伊夫雷亞地區伊夫雷亞互動設計研究所的學生專案,目的是為新手和專業人員提供一種低成本且簡單的方法,以建立使用感測器與環境相互作用的裝置執行器。適用於初學者愛好者的此類裝置的常見範例包括簡單機器人、恆溫器和運動檢測器。

Arduino這個名字來自義大利伊夫雷亞的一家酒吧,該專案的一些創始人過去常常會去這家酒吧。 酒吧以伊夫雷亞的Arduin(Arduin of Ivrea)命名,他是伊夫雷亞邊疆伯爵,也是1002年至1014年期間的義大利國王

Why Arduino?

有許多其他微控制器和微控制器平台可用。 Parallax Basic Stamp,Netmedia的BX-24,Phidg​​ets,MIT的Handyboard以及許多其他產品都提供了類似的功能。 Arduino簡化了使用微控制器的方式,但與其他系統相比它提供了一些優勢:
  1. 便宜:Arduino板相對便宜。可以手動組裝最便宜的Arduino模塊版本,甚至預組裝的Arduino模塊的價格也不到50美元
  2. 跨平台:Arduino軟件(IDE)在Windows,Macintosh OSX和Linux操作系統上運行。大多數微控制器系統限於Windows。
  3. 簡單:Arduino軟件(IDE)對於初學者來說易於使用且夠靈活
  4. 開源和可擴充:Arduino是開源的軟體且很容易讓別人擴充或使用別的人擴充

2020年2月7日 星期五

[Arduino] 測試按鈕

測試按鈕

目的:按下喇叭之後才能發出聲音
  1. 環境準備
  2. 額外材料
    • 無源蜂鳴器 *1
    • 麵包版 * 1
    • 傾斜開關 * 1
    • 電阻 * 1
    • 線材
      • 公對母 * 3
      • 公對公 * 3
  3. 程式
    • 開新檔案
    • 另存新檔
      • 檔名:02_DoReMi_Btn
      • 填入內容

const int buttonPin = 2;     // button pin
const int beePin =  13;      // bee pin
const int NOTE_C5 = 523;     // Do

void setup() {
  // initialize the BEE pin as an output:
  pinMode(beePin, OUTPUT);      
  // initialize the push button pin as an input:
  pinMode(buttonPin, INPUT);     
}

void loop(){
  
  // check if the push button is pressed.
  // if it is, the buttonState is HIGH:
  if (digitalRead(buttonPin) == HIGH) {     
      tone(13, NOTE_C5 , 500);
  } 
}

接法



挑戰
如果要按按鈕輸出一首音樂該怎麼做
#include "pitches.h"

int kunde[]={
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_D5,NOTE_E5,NOTE_F5,NOTE_G5,NOTE_G5,NOTE_G5,
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_E5,NOTE_G5,NOTE_G5,NOTE_C5};
int kunde_time[]={
  500,500,1000,500,500,1000,500,500,500,500,500,500,1500,
  500,500,1000,500,500,1000,500,500,500,500,1500};
int duration = 500;  // 500 milliseconds
const int buttonPin = 2;     // button pin
const int beePin =  13;      // bee pin

// variables will change:
int buttonState = 0;         // variable for reading the push button status

void setup() {
  // initialize the BEE pin as an output:
  pinMode(beePin, OUTPUT);      
  // initialize the push button pin as an input:
  pinMode(buttonPin, INPUT);     

}

void loop() {
  // read the state of the push button value:
  buttonState = digitalRead(buttonPin);

  // check if the push button is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) { 
       
    for (int i= 0; i < 24; i++) 
    {
      // 在 pin13 上輸出聲音,每個音階響 duration 豪秒
      tone(beePin, kunde[i], kunde_time[i]);
      
      // 間隔一段時間後再播放下一個音階
      delay(kunde_time[i]+100);
    }
    // 兩秒後重新播放 
    delay(2000);
    totalCount=0;
  }
      

}

如果要按三次按鈕才輸出音樂呢
#include "pitches.h"

int kunde[]={
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_D5,NOTE_E5,NOTE_F5,NOTE_G5,NOTE_G5,NOTE_G5,
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_E5,NOTE_G5,NOTE_G5,NOTE_C5};
int kunde_time[]={
  500,500,1000,500,500,1000,500,500,500,500,500,500,1500,
  500,500,1000,500,500,1000,500,500,500,500,1500};
int duration = 500;  // 500 milliseconds
int totalCount =0; 
const int buttonPin = 2;     // button pin
const int beePin =  13;      // bee pin

// variables will change:
int buttonState = 0;         // variable for reading the push button status

void setup() {
  // initialize the Bee pin as an output:
  pinMode(beePin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);     

}

void loop() {
  // read the state of the push button value:
  buttonState = digitalRead(buttonPin);

  // check if the push button is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) { 
        totalCount++;
        delay(500);
  } 
  
  if(totalCount==3)  
  {
    for (int i= 0; i < 24; i++) 
    {
      // 在 pin13 上輸出聲音,每個音階響 duration 豪秒
      tone(beePin, kunde[i], kunde_time[i]);
      
      // 間隔一段時間後再播放下一個音階
      delay(kunde_time[i]+100);
    }
    // 兩秒後重新播放 
    delay(2000);
    totalCount=0;
  }
      

}


2020年2月1日 星期六

[Arduino] 測試喇叭


測試喇叭

目的:利用Pin 13輸出聲音

  • Do(523Hz) 
  • Re (587Hz)
  • Mi(659Hz)
  • Fa(698Hz)
  • So(784Hz)
  • La(880Hz)
  • Si(988Hz)
  • 高音 Do(1047Hz) 
  1. 環境準備
  2. 額外材料
    • 無源蜂鳴器*1
    • 線材公對母*3
  3. 程式
    • 開新檔案
    • 另存新檔
      • 檔名:01_DoReMi
      • 填入內容

#include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6};
int duration = 500;  // 500 milliseconds

void setup() {

}

void loop() {  
  for (int i= 0; i &lt; 8; i++) {
    // 在 pin13 上輸出聲音,每個音階響 duration 豪秒
    tone(13, melody[i], duration);
    
    // 間隔一段時間後再播放下一個音階
    delay(1000);
  }
  
  // 兩秒後重新播放 
  delay(2000);
}
    • 新增標籤
      • 名稱:pitches.h
      • 內容

/*************************************************
 * Public Constants
 *************************************************/

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

接法


挑戰播一首歌

#include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6};
  
int kunde[]={
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_D5,NOTE_E5,NOTE_F5,NOTE_G5,NOTE_G5,NOTE_G5,
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_E5,NOTE_G5,NOTE_G5,NOTE_C5};
int duration = 500;  // 500 milliseconds

void setup() {

}

void loop() {
    
  for (int i= 0; i < 24; i++) 
  {
    // 在 pin13 上輸出聲音,每個音階響 duration 豪秒
    tone(13, kunde[i], duration);
    
    // 間隔一段時間後再播放下一個音階
    delay(kunde_time[i]+100);
  }

  // 兩秒後重新播放 
  delay(2000);
}


挑戰播一首可以有長度變化的歌

#include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6};
  
int kunde[]={
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_D5,NOTE_E5,NOTE_F5,NOTE_G5,NOTE_G5,NOTE_G5,
  NOTE_G5,NOTE_E5,NOTE_E5,NOTE_F5,NOTE_D5,NOTE_D5,NOTE_C5,NOTE_E5,NOTE_G5,NOTE_G5,NOTE_C5};
int kunde_time[]={
  500,500,1000,500,500,1000,500,500,500,500,500,500,1500,
  500,500,1000,500,500,1000,500,500,500,500,1500};

void setup() {

}

void loop() {
    
  for (int i= 0; i < 24; i++) 
  {
    // 在 pin13 上輸出聲音,每個音階響 kunde_time[i]豪秒
    tone(13, kunde[i], kunde_time[i]);
    
    // 間隔一段時間後再播放下一個音階
    delay(kunde_time[i]+100);
  }

  // 兩秒後重新播放 
  delay(2000);
}


[Arduino] 環境準備與測試

環境準備

  1. Arduino軟體
    • 軟體下載:https://www.arduino.cc/en/Main/Software
    • 選擇適用的軟體
  2. 開啟軟體 arduino.exe
  3. 連接Arduino Uno
  4. 選擇序列埠

測試範例

  1. 開啟範本 Blink: 檔案>範例>Basics>Blink
  2. 輸出
  3. 檢視成果

2015年12月18日 星期五

Webpack

KD換了公司之後要做的事情又變得不一樣了~
現在要來研究React.js,
不過根據React官網的介紹,
為了使用React.js最簡單的方式當然就是下載不用自己建置的JavaScript就可以了,
可惜天不從人願,
這樣的寫法可能無法完整了解react的api....
所以請自己建置吧~
官網建議使用 browserify 或是 webpack
這邊就介紹webpack了~~~~
為什麼要特別介紹呢!
因為我要被官網搞死~~
沒有任何基礎下指令怎麼下都是不對的.....................
廢話不多說

Step 1 : install npm
NPM - Node Package Manager 為什麼要用他呢?
請參考連結,因為JavaScript日益茁壯,NPM的功能跟NUGet差不多。
最簡單的安裝方式就是安裝Node.js


Step 2 : install react
記得用工作管理員開啟cmd
$ npm install --save react react-dom babel-preset-react


Step 3 : install webpack
參考webpack官網
$ npm install webpack -g


接下來都是抄官網的..............
Step 4 : setup the compilation

先移動到預計寫code的資料夾~~~cd 應該會吧~
然後新增兩個檔案
1.entry.js
document.write("It works.");

2.index.html
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <script type="text/javascript" src="bundle.js" charset="utf-8"></script>
    </body>
</html>

接下來就簡單了~~
執行指令把entry.js建置成bundle.js(畢竟html裡面是include bundle.js

$ webpack ./entry.js bundle.js

這樣就可以啦~~~~其實官網寫得很清楚了~~
剩下的我就不多說~

最重要的是最後一步,
因為webpack預設是讀取webpack.config.js,
所以最終是要把所有設定都寫在config.js裡面。

2015年7月22日 星期三

Add Microsoft SQL JDBC driver to Maven

參考:

起因:
因為使用Eclipse開發Java Program,希望能採用現在比較主流的Maven控管所有的Dependency檔。
但是MSSQL JDBC是少數不直接支援的。

2015年5月25日 星期一

Use PSCP Cpoy file to Linux

Use PSCP Cpoy file to Linux

As title , I want to copy files from windows to Linux by ssh protocol.


Step 1 : Download PSCP.exe

Step 2 : Use windows cmd and move to the location PSCP exist




Step 3: Send file to the target computer




2015年2月25日 星期三

2015年2月2日 星期一

CentOS 更新Java JDK 版本

終於得開始碰Java~
雖然一開始都是拿Sample Code 所以1.7就夠用了~
但當要自己寫的時候,還是希望用最新的 ^.^

1.查看目前版本~
[training@tiger ~]$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

2015年1月28日 星期三

Centos 6.3 安裝中文語系包+新增yum server

若遇到Linux本身不包含中文語系的時候怎麼辦呢~~
就只要安裝中文語系包並且調一下設定值就可以了~
可惜我拿到VM連YUM都沒有很好用~
所以必須先把YUM Server設定好~

1.設定yum server,大家常用的就是義守大學的伺服器 
(檔名自取,我是新增一個名為 cnetos.repo的檔案)
[training@elephant ~]$ sudo vi /etc/yum.repos.d/centos.repo
---------content---------------------------------------
[base]
name=CentOS 6.3 - Base
baseurl=http://ftp.isu.edu.tw/pub/Linux/CentOS/6.6/os/x86_64
enabled=1
gpgcheck=1
gpgkey=http://ftp.isu.edu.tw/pub/Linux/CentOS/RPM-GPG-KEY-CentOS-6

[updates]
name=CentOS 6.3 - Updates
baseurl=http://ftp.isu.edu.tw/pub/Linux/CentOS/6.6/updates/x86_64
enabled=1
gpgcheck=1
gpgkey=http://ftp.isu.edu.tw/pub/Linux/CentOS/RPM-GPG-KEY-CentOS-6

至於為什麼要用6.6因為實際上的路徑就是那邊~
所以必須直接點進去看看喔~^^
2.安裝中文
[training@elephant ~]$ sudo yum groupinstall "Chinese Support" -y
3.修改設定檔(據說如果沒有i18n這個檔案就自己新增??!!!)
[training@elephant ~]$ sudo vi /etc/sysconfig/i18n
-----------------content---------------------------
#LANG="en_US.UTF-8"
LANG="zh_CN.UTF-8"
SUPPORTED= "zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en:ja_JP.UTF-8:ja_JP:zh"
SYSFONT="latarcyrheb-sun16"
4.重開機~~~~~~~~~~~~就可以了喔!

2015年1月26日 星期一

Use Flume-ng With SparkStreaming to HDFS

試了好久的東西~總算打通了!!
為了要將利用Flume擁有很多Protocal的優勢與Spark Straming結合~
因此試著將原本皆可以獨立運作的東西串起來。

2015年1月16日 星期五

Use Spark to Count Word And write file to HDFS

話說上一篇安裝Apache Maven 3.2.5 原本是打算自己建置Spark~
後來好像可以不必這樣~
所以就直接下載Pre Built的版本就好了阿~~挖哈哈哈哈哈~

環境背景:
4個VM centOS with Hadoop Avaliability
Spark-1.2.0-bin-hadoop2.3

2015年1月15日 星期四

安裝Apache Maven 3.2.5

為什麼要安裝Apache Maven 3.2.5呢?
這說起來真的話非常長~所以可以發現我把這篇文章Tag了無數個相關項目。
因為KD正要開始研究Big Data Use Spark Streaming~
接下來的發展如下:
Big Data→Hadoop→HDFS→Flume→Spark Streaming→Spark→Maven.........

目標:為了建置Spark 1.2.0 (Building Spark using Maven requires Maven 3.0.4 or newer and Java 6+)
1.取得該安裝檔 Apache Maven
wget http://mirror.olnevhost.net/pub/apache/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz

2.解壓縮
tar xvf apache-maven-3.2.5-bin.tar.gz

3.將解壓縮完的資料夾內容移到/usr/local/apache-maven
mv apache-maven-3.2.5  /usr/local/apache-maven

4.將變數加入~/.bashrc file
export M2_HOME=/usr/local/apache-maven
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

5.執行source ~/.bashrc
source ~/.bashrc

6.確認是否運作正常
mvn -version

參考文章:http://stackoverflow.com/questions/7532928/how-do-i-install-maven-with-yum

2014年5月8日 星期四

簡易IPCChannel 實作

Inter Process communication 指的是同一台電腦底下不同Process之間的溝通機制,
參考wiki-IPC可以發現,實現的方式有非常多種。
而在不同的程式語言基礎下,
各家提供的實作方式也都不太一樣。
Windows C#提供了一個蠻簡易的類別可以使用,
叫做IPCChannel,
沒錯!!就是這麼的直覺= = ,
其實他是直接組合了將兩個類別,
IpcClientChannel 和 IpcServerChannel 組合在一起。
參考MSDN: IPCChannel
以下是將程式碼簡化到最簡~
做出最簡易的程式碼。

2014年1月14日 星期二

Configuring Multiple TFS Build Controller on the Same Machine

因為TFS要整併的關係,
所以必須考量不同的Collection皆須建置的問題。
其實我原本也不知道,一個Controller只能對應一個Collection。
廢話不多說,我只想先記下來。
參考:Configuring Multiple TFS Build Controller on the Same Machine

環境:
Windows Server 2012
Microsoft SQL Server 2012
Microsoft Team Foundation Server 2012
擁有兩個Collection



2013年12月6日 星期五

Angular Js Part III : Filter

原本第三篇是要寫Directive自訂控制項或者是Scope的,
但是那些都必須要再整理過,
因此先寫一篇無關痛癢的Filter吧~

Angular Js提供多種Filter可使用。

  • Currency:用來將數字轉換成貨幣
  • Date:轉換成特定日期格式
  • Filter:篩選機制,有點像是AutoComplete
  • Json:將物件轉換成Json字串。
  • limitTo:限制輸出的長度
  • lowercase、uppercase:轉換為大小寫
  • number:轉換為數字格式,並決定小數點後位數。
  • orderBy:排序,超強。

2013年12月3日 星期二

Angular Js Part II : Controller

繼上一篇Start Angularjs之後,
接著要介紹Angular js的另一個特性Controller。
Controller本身能做的事情大概有二:
1.對scope設置初始值(scope泛指應用程式所使用到的物件模型)
2.在scope上增加額外的處置,簡單來說就是寫程式的區塊。
範例一:
給定初始值,input中會有來自controller的文字。
原始碼:
<!DOCTYPE html>
<html ng-app>
  <head>
    <script src="http://code.angularjs.org/1.2.0/angular.min.js"></script>
    <meta charset="utf-8" />
    <script type="text/javascript">
    //Controller
    function urCtrl($scope){
      $scope.urName="it was inited from controller";
    }
    </script>
  </head>
  <body>
    <!-- Smapel ng-controller -->
    <div class="box" ng-controller="urCtrl">
      Sample ng-controller----------------<br>
      Type in ur Name<input name="input" ng-model="urName"><br>
      Hi~ {{urName}}!!!!
    </div>
  </body>
</html>

2013年11月29日 星期五

C# Timer

C# Timer可以提供定期執行特定行為的實作。
而Timer本身的事件即是觸發新的Thread去執行該行為。
MSDN上的範例相當完整,
大家可去實作看看。
這邊提供幾個特定的範例供參考。

2013年11月15日 星期五

Angular Js Part I : Start


Angular js 是一個相當好用的前端開發工具,
之前我在寫html時,
若要即時更新data通常都必須利用JQuery進行DOM元素的抽換,相當不便;
尤其是在一大堆由程式自動產生的表格,更動某筆資料就更費工了。
Angular js所提供的Binding功能,就立刻解決了這一類的需求。
產生的效果如下:
為了達成即時反應的效果,做法有五種。

  • {{modelName}}(表達式)
  • ng-cloak
  • ng-bind
  • ng-bind-template
  • ng-bind-html