2016年8月7日 星期日

Arduino的語法入門:變數與函數

  這是一個有點意外的狀況,一同在學mBlock的同學,有一天,發現他的變數不能用,也不能新增指令。這就讓我想早一些,讓孩子們開始使用Arduino IDE。原因是,mBlock雖說是使用Scratch,對很多小朋友來說相對是熟悉易學;但是,一旦程式開始複雜一些,Scratch還是不如使用C語言來得好用。
  簡單的說,Scratch(mBlock)是易學難強大;C(Arduino)是需要入門檻,但是,上了手就會是很強大的程式語言。

  開始解說Arduino上的語法時,才發現我是面對一群C語言基礎是零的孩子。所以,什麼時候要用分號,大刮號,小刮號,講了半天,他們只能照打,還是沒聽懂。這時才想起,我國中時開始學習BASIC,也是去買了本書,一頁一頁的學了很久。然後,在電腦上印出
*
**
***
**
*
我就開心了好久。覺得自己是世界上最偉大的工程師了。

  我相信,有師父引進門,應該是可以快一點進到較有趣的程式言語世界。今天就先來C語言程式的第一課,語法:函數與變數。

====== 變數篇 =======
C語言的變數,數一數不多。類型與宣告方式,可以參考別人的寫法。
http://www.csie.ntu.edu.tw/~b98902112/cpp_and_algo/cpp/variable_type_and_declare.html
http://programming.im.ncnu.edu.tw/Chapter5.htm

  但是,對初學者來說,先學會int就可以了。
int代表的是整數(integer),可以是正數,也可以是負數。
在程式裏,寫法是:
int XYZ;
代表,程式裏看到XYZ就是一個整數的變數,也請記得在一行程式的結尾,要加上分號(;)
只要宣告了,我們就可在程式裏,指定XYZ是任何的數字。寫法是:

XYZ=10;
XYZ=-8;

====== 函數篇 =======
  打開Arduino IDE,最最最基本的程式,就是
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

這兩段程式,第一段setup是一開始的設定;第二段loop是指程式在裏面會重覆來回不停的跑。
這兩段程式,共同的程式語法就是
void 函數名稱(){
  // 註解
}

加了底色,希望可以比較容易了解。
紅色的是註解。也就是,只要是跟在兩個斜線//後的,就是註解。
註解是寫給看程式的人,下次回來看時,比較容易理解程式的。不是給電腦看的。
所以,只要是兩個斜線後面,高興打什麼字,就打什麼字。
另一個註解的寫法是
/*
  這一段話是註解,隨便我怎麼打。
要打幾行都可以喔。
*/

藍色的是函數名稱,大小寫的英文字母及數字都可以用,而且,大小寫是不相同的。至於符號,個人是建議先不要用。要去記什麼符號可以,什麼符號不能用,是很痛苦的。不如,用到時就知道了。
函數名稱,雖然是隨便取,但是,如果取得好,下次要用到時,就會容易用些。
所以,常常我會用 LED1On(),LED2Off(),這樣一看就知道是在做什麼的函數。

  函數名稱後面,那兩個小括號,其實,代表的是函數的輸入。
比如說,如果有3個LED燈,我去寫三個函數,分別為LED1On(), LED2On(), LED3On(),
我可能就會把這三個合成一個LEDOn()的函數,然後,在輸入的地方有輸入的數字。
就可以用LEDOn(1), LEDOn(2), LEDOn(3),來代表打開不同的LED。
只是,這樣就要將函數寫成這樣

void LEDOn(int LEDNum){
}

  小刮號裏面,就不再是空空的了。

另外一個要認識的字就是void,代表的就是「沒東西啦」。
可能有人會想說,沒東西就不要寫嘛。偏偏電腦不聰明,有東西或是沒東西,一定要說清楚。不然,電腦不會做事的。

  橘色代表的是函數的輸出。也就是函數的結果。
比如說,有一個函數,不管輸入多少,他就會輸出2倍數。
好像只要給媽媽一個吻,媽媽就會吻你兩下一樣。
打你姐姐一下,姐姐就會回打兩下一樣。
這個函數的寫法就是:

int Multi2(int XX){  // 名稱是Multi2,輸入是整數,輸出也是整數。
  return(XX*2);  // 輸出值要放在return()的刮號裏面。
}

C語言的基礎語法,其實還蠻多的。只是,因個人用久了,也就不覺得那是語法。如同學說話一樣,就是多說,就會自然說對了。比如說,空格。C語言裏的空格,就是用來分開前後的,跟英文拼音一樣;而且,沒人規定要空幾格。這也跟英文拼字一樣。只要有空格就好,空幾格,通常是為了美觀才會有不同的空格數的。


2016年7月20日 星期三

Arduino第二堂課:元件

  寫程式是一件很無趣的事。尤其,當自己要去抓那種重複100次,可能會發生一次的錯誤。這其實不離譜,做工程師的,常常會聽到這種話:「你的程式突然當掉了,重新開又好了。而且,我沒辦法再重複製一次給你看。」真的,程式的路上是常常遇到鬼的。

  雖然說,做一個工程師很無奈;但是,對孩子來說,看到車子會走了,或是,看到燈光一閃一閃亮晶晶,還真的是很令人興奮的。

  要看到一閃一閃亮晶晶,如果,就只是靠人家已經做好的板子來實現,那也很無趣。不如,趁孩子在熱身,我們開始跟他們介紹元件:常用的電阻、電池跟LED。但是,在介紹元件之前,最先要認識的是:三用電錶。

三用電錶:
  三用? 其實,時代真的進步得很快,早就超過三用了。但是,也叫習慣了,要說稱它為萬用電錶,又太誇張了點吧。

  電錶第一個要認識的,是「電壓」的檔位。我們讓孩子,試著自己量一下,三號電池,跟一號電池,哪一個電壓比較高。每個小孩都是說:大的呀。自己量了一次,很快的他們也就學會怎麼看電池,也學會什麼是正電壓,什麼是地(ground)。

  第二個要量的,是有點困難解說的,發光二極體。但是,很快他們也學會如何切到二極體量測的檔位,並且,知道二極體是有方向性的。一邊是正,一邊是負。而且,要讓它亮是要超過一個電壓的。(說實在的,我不想解釋V-I曲線。對小學生來說,是有點太難了。)

  第三個要量的,是電阻。

  最後,5V加上電阻,加上二極體,在麵包板上串起來。就看到燈亮了起來。走到這一步,孩子們是還不用用到電腦喔。但是,已經是呼聲連連了~




2016年7月10日 星期日

安裝軟體mBlock及Arduino IDE


  原本是要先講說基本的元件。但是,因為本週要上的課,要先安裝軟體。所以,還是先把軟體安裝給寫一寫。

  為了讓初學者,可以很快的進到由人控制機械的世界,透過圖形化的介面,是比一行一行的程式,來得人性化多了。mBlock就是其中之一。

  下載mBlock安裝程式,請到下列網頁:
http://mblock.cc/download/
自行選擇是Windows版本,或是Mac版本囉。目前最新版本為3.3.1版。
安裝過程中,若有需要,會再安裝Adobe AIR。這東西是……也不用搞這麼清楚啦。反正就順著安裝步驟,安裝程式需要什麼就給什麼。(信用卡號除外啦)

  另一個要安裝的,是Arduino IDE。請到下列網頁,下載並安裝。
http://www.arduino.cc/en/main/software
同樣的,請自行選擇是Windows版本,或是Mac版本囉。目前最新版本為1.6.9版。
 
  有了實驗板,有了開發程式,那麼接下來,就看程式設計師想玩什麼花樣囉~

2016年7月9日 星期六

Arduino上手第一課:和孩子談目標

  這個應該已經是人性了,如果,我們跟孩子談目標,通常是試著由說服的手段,達到指使的目的;相反的,孩子跟我們談目標,通常是在反抗我們的要求。最常見的對話,是這樣。
  我:「今天下午,我們來把客廳清理乾淨。」(這是目標設定。)
  孩子:「為什麼? 那些都是妹妹的,為什麼我也要一起做。」(這是逃離被設定的目標。)

  Arduino上手第一課,卻是要跟孩子溝通,接下來會發生什麼事。這目的,是為了引起孩子較長期的學習或是工作熱情;只是,第一次跟孩子談,卻是在工作到一半,接到老婆的電話:「老公,孩子的同學再一個小時,就會到我們家了喔。你會回家吧?」
我:「沒問題。」
過一個小時,老婆又來電話:「老公,你到家了嗎?孩子的同學,再10分鐘就到了喔。」
我:「喔,好呀。」(到就到,有什麼好大驚小怪的嗎?孩子的同學來,是需要我在家奉茶嗎?)
老婆:「呀,你不是說要教他們Arduino嗎?」
(汗~~ 我有說是今天嗎? )

  ======== 以上前言,以下就是正文了 ==========

  桌上擺上了Arduino UNO的板子,以一些週邊小元件;然後是mBot。孩子們對於看得到,摸得到的東西,總是比較有興趣。至於,沒辦法透過嘴巴講的東西,就在正式的軟體課開始,再來操作吧。

  我告訴孩子們,整個課程會有三個階段,能做到哪裏,看自己有多想要做。

  第一階段,我們要玩的是Arduino UNO的板子。(註一)
這個階段,我們會學會基本的程式,了解元件。然而,沒解說的是,我們會經過mBlock的過程,接到Arduino IDE。(註二)

  第二階段,我們要玩的是寫程式控制車車。(註三)
這個階段,會透過某些輸入:如超音波或是紅外線,來影響輸出:如馬達控制。
在做自走車的階段,孩子是可以進行某些競賽,來豐富學習過程的。

  第三階段,我就期望是個團隊的專案。透過3~4個主要的功能,共同完成一個有意思的產品。第一部份,是對感應器的更精準控制。第二部份,是針對馬達控制的加強。第三部份,是整合控制。第四部份,是透過3D印表機,設計機構。

  因為是第一次和孩子們介紹,孩子們也沒準備電腦。因此,接下來要介紹的,就是最基本的電子學及電子元件介紹囉。有待下文分曉囉。


(註一) 市面上Arduino的板子很多,整理分析如下。無意廣告、意者自洽。
關於Arduino UNO的板子,可以參考原廠資訊。
https://www.arduino.cc/en/Main/ArduinoBoardUno
在露天,也是找得到有人在賣。可參考下連結。
http://goods.ruten.com.tw/item/show?21207140700363
Arduino相容的板子很多,在露天,鍵入Arduino UNO,就可以找到很多。
個人是買了這一塊(非廣告),主因是價位便宜,又有基本的實驗用元件。但是,這些板子cost down到這個價位,真的能讓自己很放心嗎? 我只能不斷的要求孩子要洗手。
http://goods.ruten.com.tw/item/show?21537634288537
另一個綜合的選擇,是旗標出的FLAG'S 創客‧自造者工作坊 10+ 實驗(「Arduino 超入門: 創客‧自造者的原力」書+實驗套件) 一次買足,書跟實驗板。
http://www.flag.com.tw/book/5105.asp?bokno=F6789A#download

(註二) 關於mBlock,是透過圖形化的介面(Scratch),來連接Arduino的設備。請參閱其網http://www.mblock.cc/
目前透過圖形化介面,來連接控制Arduino的軟體,也有數家在開發。唯個人是因碁峰出版社,有出了一本書「用mBlock玩Arduino」,可以很快的入門。
透過圖形化介面,是讓孩子比較快接受這個起步的階段。一旦喜歡上他們在進行的工作,就會為了效率自然轉到Arduino IDE。

(註三)市面上關於Arduino的自走車,也是五花八門。
目前預計要使用的是mBot。http://www.gmii.net/products/550b04a45eb0342b3c000033




2016年5月28日 星期六

毛豆的學習成長

  我是一個工程師,寫程式已經寫了快30年了。好啦,扣掉在高中時代,根本是在玩電腦;大學時代,電腦只是拿來交作業;真正做為工程師,也差不多有20年的時間啦。
  那~~出來寫這一段學習成長,難道是要寫「我的成長」之類的歷史嗎?
  別怕,我寫不出像「我的少女時代」那樣狗血猛灑的東西來。寫網誌,純粹是兩個原因:一個是當下的,我沒辦法拿30年前的學習方式,來教我的孩子;第二個原因就真的算是歷史故事了,每每我程式寫不出來,一上網查,看到的大多是簡體字。這讓我很替我們未來的競爭力感到擔心。
  直白的說,整件事這麼想就對了:一個靠程式維生的LKK,為了陪孩子一同用較有趣的方式學習程式;順便把過程也寫一寫,也許有人用得到。
  就這樣~ Let's Go.......