2016年5月29日 星期日

Processing 基礎 (三) 陣列&燈光

Processing 基礎 (三)  陣列&燈光

          Processing 是視覺繪圖軟體,陣列&燈光是視覺化少不了的,陣列能產生一的連續的表面,燈光可強調立體感。是用 Processing3.11 範例修改。

範例 一 陣列


float[][] distances;  //設定變數
float maxDistance;
int spacer;

void setup() {
  size(640, 640);
  maxDistance = dist(width/2, height/2, width, height);
  distances = new float[width][height];
  for (int y = 0; y < height; y++) {
    for (int x = 0; x < width; x++) {
      float distance = dist(width/2, height/2, x, y);
      distances[x][y] = distance/maxDistance * 255;
    }
  }
  spacer = 10;      
  strokeWeight(7);      //筆畫大小=7
  noLoop();            //只執行一次
}

void draw() {
  background(0);
  for (int y = 0; y < height; y += spacer) {
    for (int x = 0; x < width; x += spacer) {
      stroke(distances[x][y],x,y);       //設定畫筆顏色
      point(x + spacer/2, y + spacer/2); //畫點
    }
  }
}



範例二 燈光


void setup() {          //設定環境
  size(640, 480, P3D);  //畫面大小 604 X 480 啟用3D
  noStroke();          //物體無邊框
  fill(#EA217F);       //填入顏色 #EA217F
}

void draw() {    //開始畫圖
  noStroke();    //無邊框
  background(0);   //背景黑色
  float dirY = (mouseY / float(height) - 0.5) * 2;    //設定變數dirY
  float dirX = (mouseX / float(width) - 0.5) * 2;     //設定變數dirX
  directionalLight(204, 204, 204, -dirX, -dirY, -1);  //設定燈光來源
  translate(width/2 - 100, height/2, 0);      //把座標0,0 設在螢幕寬/2 -100 螢幕高/2
  sphere(80);                 //畫一個半徑80的空心球
  translate(200, 0, 0);       //把坐標0,0右移200
  sphere(80);               //把坐標0,0右移200
}



sphere()

sphere() 空心的圓球這圓球是很多三角形組合成的

語法 :

sphere(半徑)

directionalLight()

      directionalLight()平行光源,directionalLight(v1, v2, v3, nx, ny, nz)須設定平行光源的顏色與來源,v1, v2,v3 可以是RGB或HSB,nx,ny燈源方向,例如 y = -1 表示燈源從底部往上照。

語法 :

directionalLight(v1, v2, v3, nx, ny, nz)

point()

      point()繪製一個點,第一個參數是該點的水平值,第二值是該點的垂直值,可選的第三值是深度值。

語法 :

point(x, y)
point(x, y, z)


參考資料 : https://processing.org/
         

2016年5月28日 星期六

Processing 基礎 二 正多邊圖形&星星


    你的世界是甚麼形狀?你喜愛的又是甚麼形狀?三角形?五角?八角?這個範例做了一個polygon()的函數,用polygon()函數能做出任何的正多邊形。

     Processing 是做動畫用的,很多設定概念都來自於動畫,這範例看起來是三個多邊形在轉動,事實上是電腦不斷的算出每個多邊形的頂點然後畫線填滿。

   第二段是畫星星,star()這個函數能畫出任何光芒數的星星。

   用 Processing 網站所提供的範例更改。


畫多邊形

void setup() {
  size(640, 480);  //畫面大小640 X 480
  frameRate(60);   //畫面更新速率 60/秒

}

void draw() {
  background(102);     //背景設為 灰階 102
  pushMatrix();    
  fill(255,0,0);     //填滿紅色
  translate(width*0.2, height*0.5); //坐標0,0切換到畫面寬度*0.2高度*0.5的位置
  rotate(frameCount / 100.0);   //旋轉
  polygon(0,0,100, 3);        // 3角形

  popMatrix();
  pushMatrix();
  fill(0,255,0);   //填滿紅色
  translate(width*0.5, height*0.5);
  rotate(frameCount / 50.0);
  polygon(0, 0, 80, 20);  // 20角形
  popMatrix();

  pushMatrix();
  fill(0,0,255);  //填滿藍色
  translate(width*0.8, height*0.5);
  rotate(frameCount / -100.0);
  polygon(0, 0, 70, 7);   //7角形
  popMatrix();

}
void polygon(float x, float y, float radius, int npoints) {      //多邊形函數
  float angle = TWO_PI / npoints;
  beginShape();
  for (float a = 0; a < TWO_PI; a += angle) {
    float sx = x + cos(a) * radius;
    float sy = y + sin(a) * radius;
    vertex(sx, sy);
  }
  endShape(CLOSE);
}


按"撥放"後有三個物體在旋轉



畫星星


void setup() {
  size(640,480);
}

void draw() {
  background(102);
  
  pushMatrix();
  fill(#FCB71F);  
  translate(width*0.2, height*0.5);
  rotate(frameCount / 200.0);
  star(0, 0, 5, 70, 3); 
  popMatrix();
  
  pushMatrix();
  translate(width*0.5, height*0.5);
  fill(#EA9763);   
  rotate(frameCount / 400.0);
  star(0, 0, 60, 100, 12); 
  fill(#F06711);  
  ellipse(0, 0, 100,100); 
  popMatrix();
  
  pushMatrix();
  fill(#B1B1DE);  
  translate(width*0.8, height*0.5);
  rotate(frameCount / -100.0);
  star(0, 0,30, 70, 5); 
  popMatrix();
}

void star(float x, float y, float radius1, float radius2, int npoints) {  //星狀函數
  float angle = TWO_PI / npoints;
  float halfAngle = angle/2.0;
  beginShape();
  for (float a = 0; a < TWO_PI; a += angle) {
    float sx = x + cos(a) * radius2;
    float sy = y + sin(a) * radius2;
    vertex(sx, sy);
    sx = x + cos(a+halfAngle) * radius1;
    sy = y + sin(a+halfAngle) * radius1;
    vertex(sx, sy);
  }
  endShape(CLOSE);
}

按 "播放"後





Processing 函數

rotate()

     rotate()物體繞著原點旋轉,物體旋轉會是整物體的矩陣都一起轉動,配合pushMatrix()translate(x, y)popMatrix()一起使用。

語法 :

rotate(角度)

pushMatrix()
popMatrix()

pushMatrix();popMatrix()是一組的, pushMatrix()後 translate()開始變換坐標0,0的相對位置popMatrix()後會把坐標恢復為系統預設坐標


語法 :

pushMatrix()
.
.
popMatrix()


translate()

       translate();是重新定義坐標原點,translate(50,50)會把坐標0,0重新定位在原本50,50的地方,在下一次translate(50,50)坐標0,0會在畫面100,100的位置,一般都跟pushMatrix();popMatrix()配合使用。

語法 :

translate(x, y)
translate(x, y, z)

frameRate()

    frameRate()指定畫面更新速率,frameRate(30)就是每秒30幅,這跟電腦的運算能力也有關係,電腦能力不足時會無法達到指定的更新速率。

語法 :

 frameRate(速率)

beginShape()

      beginShape()會沿著指定的端點畫直線或是點到endShape()結束,未指定參數時beginShape()會沿著指定的端點一直畫直線,beginShape(POINTS) 只會畫點,beginShape(LINES)會在兩點間劃出一條線,第2點不會與第3點連接,beginShape(TRIANGLES)每三點畫出一個獨立三角形....。

語法 :

beginShape()
beginShape(類型)

類型
POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, QUAD_STRIP

endShape()

        endShape()是結束畫形狀的函數,endShape()最後一點不會連接到第一點。endShape(CLOSE)會把最後一個頂點連接到第一個頂點。

語法 :

endShape()
endShape(CLOSE)

參考資料 :       https://processing.org/
                     

2016年5月27日 星期五

mBlock 介紹

mBlock  介紹

       mBlock是以 Scratch2.0為基礎的開源圖形化軟體開發環境,讓Arduino的開發變的簡單,目前支援的版子有 Arduino Uno, Arduino leonardo, Arduino Nano,Arduino Mega128, Arduino Mega 2560, PicoBoard, mCore等..。 mBlock 有即時的轉碼功能,Arduino 初學者可很快的了解圖型與程式碼的關系,進階著可以切換為純程式碼的撰寫。mBlock內含Arduino IDE  1.6.5 不用另外下載 Arduino,本來電腦有安裝 Arduino 的也不會互相衝突。

mBlock 下載

http://www.mblock.cc/download/



       目前 mblock 只支援兩種作業系統 Windows & Mac,mBlock需要 Adobe Air 的支援,電腦沒裝過 Adobe Air的需要到這裡下載,裝過 Adobe Air 版本不符Adobe Air會自己升級。
 
https://get.adobe.com/tw/air/


         mblock 下載後是ZIP壓縮檔,解壓縮後就下一步下一步就可安裝,在安裝時可先選語言,沒選到也可以進入程式後可切換語言,進入mblock程式後看起來跟Scratch長的沒兩樣,程式標題上也有寫就是Scratch改的,除了把貓改成貓熊外可在Scratch做得在mblock 都能做,mblock 最特別的是多了一個機器人模組,mblock把機器人會用到的感測器 . 驅動器模組都做成Scratch的拼圖,只要照著Scratch的邏輯就能做出可實際運作的機器人。


       這是一個mBot遇到障礙物就會右轉的程式,只要用拼圖的方式就可寫程式,最右邊的程式碼是mBlock產生的,目的讓使用者能了解拼圖的程式碼對應,要更了解對應到Arduino的內容,按下 " 用Arduino IDE 編輯"會自動帶出整個Arduino程式碼。


轉出後的Arduino 程式碼,也可以在次編輯後上傳。



參考資料 :

http://www.mblock.cc/
https://www.arduino.cc/
https://scratch.mit.edu/

Processing 基礎 一 畫幾何圖形

Processing 基礎 一 畫幾何圖形

      Processing 重點在於用程式畫圖,再用一連串的圖做成動畫,在畫圖前有幾個觀念要先了解。


坐標系統

         Processing 的坐標左上角是x0,y0 ,往右邊x會增加往下y增加,Processing 的平面座標負數物體會超出畫面, 3D 坐標 z 需是負數。


色彩空間


    Processing 預設採用 RGB 色彩空間 ,RGB採用加法混色法,因為它是描述各種「光」通過何種比例來產生顏色。光線從暗黑開始不斷疊加 產生顏色。RGB描述的是紅綠藍三色光的數值。Processing 灰階 一樣是用加法 0為黑色255 為白色。


圖片來源 : 維基百科

 實際操作

   開啟Processing 輸入以下程式碼


size(640, 480);          //視窗大小
background(180,0,168);   //背景顏色 紅 180 綠 0 藍 168
stroke(0);              // 物體框 灰階 0

fill(125,128);          // 填滿顏色 灰階 125 透明度 128
triangle(18,18, 18, 360, 81, 360); //畫三角形

fill(102,128,0,128);    // 填滿顏色 紅 102 綠 128 藍 0 透明度 128
rect(81, 81, 63, 63);   //畫方形

fill(204);    //填滿顏色 灰階 204
quad(189, 18, 216, 18, 216, 360, 144, 360); //畫四角形

fill(255);   // 填滿顏色 灰階 255
ellipse(300, 200, 72, 72);  // 畫圓形

fill(255);  // 填滿顏色 灰階 255
arc(480, 280, 280, 280, PI, TWO_PI); // 畫弧形



按  "撥放 " Processing IDE 會依照輸入的程式畫出圖形




 可以改變程式內的數字試看看有甚麼不同的結果

Processing 函數

size()

    size()定義畫面尺寸必須在程式第一行或是setup()後的第一行例如size(640,480)是定義畫面的寬度是640點高度是480點size()只能定義一次程式運作中無法改變,未定義size()預設為100x100size()也可指定渲染器種類

語法 :
size(寬度,高度)
size(寬度,高度,渲染器)

background()

       background() 是設定背景顏色Processing預設背景為淺灰色如填入一個值(0~255中間)會是灰階填入兩個數值(128,20)第二個數字是代表不透明度Processing預設顏色是RGB模式可以填入16進制的顏色表示法如(#FF00FF)也可以填入三個數字(255,0,255)會是紫色第4個數字是代表不透明度(255,0,0,128)紅色不透明度彩色模式如果改為HSB模式這三個值代表(色相,亮度,飽和)背景也可使用圖片,圖片大小要與畫面大小一致


語法 :

background( 紅綠藍 ) 
background( 紅綠藍, 不透明度 ) 
background( 灰階 ) 
background( 灰階,不透明度 )        
background( 色相 , 亮度 , 飽和度 )  //HSB模式
background( 色相, 亮度,飽和度, 不透明度 )    //HSB模式
background( 圖片 )

stroke()

         stroke() 是設定邊框顏色如填入一個值(0~255中間)會是灰階填入兩個數值(128,20)第二個數字是代表不透明度Processing預設顏色是RGB模式可以填入16進制的顏色表示法如(#FF00FF)也可以填入三個數字(255,0,255)會是紫色第4個數字是代表不透明度(255,0,0,128)紅色不透明度彩色模式如果改為HSB模式這三個值代表(色相,亮度,飽和)
也可直接使用無邊框模式 noStroke()

語法:

stroke( 紅綠藍 ) 
stroke( 紅綠藍, 不透明度 ) 
stroke( 灰階 ) 
stroke( 灰階,不透明度 )        
stroke( 色相 , 亮度 , 飽和度 )  //HSB模式
stroke( 色相, 亮度,飽和度, 不透明度 )    //HSB模式

fill()

      fill() 是設定填滿顏色如填入一個值(0~255中間)會是灰階填入兩個數值(128,20)第二個數字是代表不透明度Processing預設顏色是RGB模式可以填入16進制的顏色表示法如(#FF00FF)也可以填入三個數字(255,0,255)會是紫色第4個數字是代表不透明度(255,0,0,128)紅色不透明度彩色模式如果改為HSB模式這三個值代表(色相,亮度,飽和)
也可直接使用無邊框模式 noFill()

語法 :

fill( 紅綠藍 ) 
fill( 紅綠藍, 不透明度 ) 
fill( 灰階 ) 
fill( 灰階,不透明度 )        
fill( 色相 , 亮度 , 飽和度 )  //HSB模式
fill( 色相, 亮度,飽和度, 不透明度 )    //HSB模式

triangle()

     triangle() 是畫一個三角形指定三點就會畫出一個封閉型的三角形須指定每一點的x,y坐標

語法 : 

triangle(X1,Y1,X2,Y2,X3,Y3)


rect()

     rect() 是畫一個4方型有八的參數可下rect(250,250,50,40)在坐標x250,y250地方畫一個寬度50高度40的方形rect(250,250,50,40,10)在坐標x250,y250地方畫一個寬度50高度40圓角半徑10的方形rect(250,250,50,40,10,5,7,4)在坐標x250,y250地方畫一個寬度50高度40左上圓角半徑10右上圓角半徑5右下圓角半徑7左下圓角半徑4的方形

語法 :

rect(x, y, 寬度 , 高度)
rect(x, y, 寬度 , 高度 , R角)
rect(x, y, 寬度 , 高度 , 左上R角,右上R角,右下R角,左下R角)

ellipse()

       ellipse() 畫一個橢圓ellipse(100,100,30,30) 在 x100,y100的地方畫一個高度30寬度30的圓寬度跟高度一樣就是圓寬度跟高度不一樣就叫橢圓

語法 :

 ellipse(x, y, 寬度 , 高度)

arc()

    arc()是畫一個弧形arc(480, 280, 280, 280, PI, TWO_PI)在x480,y280畫一個高度280寬度280起始點為PI終止點為TWO_PI的弧形。模式可決定弧形是否封閉預設為開放

語法 : 

arc(x, y, 寬度,高度,起始點,終止點)
arc(x, y, 寬度,高度,起始點,終止點,模式)


參考資料 :

https://processing.org/

https://zh.wikipedia.org/

2016年5月26日 星期四

Raspberry Pi 3 安裝

Raspberry Pi 3 安裝

      樹莓派(英語:Raspberry Pi),是一款基於Linux的單板機電腦。它由英國的樹莓派基金會所開發,目的是以低價硬體及自由軟體刺激在學校的基本電腦科學教育。樹莓派(Raspberry Pi)分A、B兩種型號,售價分別是A型25美元、B型35美元。樹莓派基金會從2012年2月29日開始接受B型的訂貨。到目前為止Raspberry Pi 3 B還是維持35美元

Raspberry Pi 3 B 規格 (取自 RS Components)

處理器Broadcom BCM2387 晶片組,1.2GHz 四核心 ARM Cortex-A53.802.11 b/g/n 無線 LAN 和藍牙 4.1 (傳統藍牙與藍牙低功耗)
GPU雙核心 VideoCore IVR 多媒體協同處理器。提供 Open GL ES 2.0、硬體加速 OpenVG,以及 1080p30 H.264 高型解碼。支援 1Gpixel/s、1.5Gtexel/s 或 24GFLOPs,並具備材質過濾功能與 DMA 基礎架構
記憶體1GB LPDDR2
作業系統由 Micro SD 記憶卡啟動,執行 Linux 作業系統版本或 Windows 10 IoT
尺寸85 x 56 x 17mm
電源Micro USB 插槽 5V1,2.5A






































Raspberry Pi 3 B  NOOBS 安裝

   Raspberry Pi 可安裝多種  Linux 或 Wwindows 10 IOT對於初次安裝的人還是用NOOBS最為方便到這裡下載NOOBS
     
https://www.raspberrypi.org/downloads/noobs/
.

     下載完成後解壓縮放到一張8G以上的SD卡根目錄。SD卡用UHS-I 規格以上日後的運作速度才會快如果可以SD卡用SDFormatter format 
.

      檔案放到SD卡後將SD卡插入Raspberry Pi 的SD卡槽Raspberry 接上鍵盤滑鼠銀幕再接上Micro USB 電源Raspberry Pi 3 的運作電流會超過一般 PC USB2.0 能提供的電流請用外接2.1A以上的電源供應器供電



       接上電源後 Raspberry Pi  就會開始執行安裝過程會詢問安裝哪套軟體如果接著網路就有多樣可選如果沒接網路就只有Raspbina 可選日後還是會以Raspbina 為主就選 Raspbina


有接網際網路


目前語言沒中文可選


按一下"install"就會開始安裝


安裝過程會自動重開機



Raspberry Pi3 安裝完成


        這是一台完整的Linux 電腦除了沒中文外其他都能做中文在往後的實驗幾乎用不到只會拖慢速度很多實驗連螢幕都不用接

參考資料 :

http://twcn.rs-online.com/web/

https://www.raspberrypi.org/

https://zh.wikipedia.org/wiki/%E6%A0%91%E8%8E%93%E6%B4%BE




Scratch 介紹


       
      Scratch是麻省理工大學(MIT)媒體實驗室終身幼稚園組開發的一套電腦程式開發平台,目的在讓程式設計語言初學者,不需先學習語言語法便能設計創作產品。開發者期望通過學習Scratch,啟發和激勵使用者在愉快的環境下透過實驗學習程式設計、數學和計算知識,同時獲得創造性的思考,系統推理和協同工作的體驗。

     Scratch 最重要的理念是分享和創意,其口號為「想像・程式・分享」。鼓勵使用者加入Scratch 社群,會員可在一個開放的學習社群與其他來自不同背景,年齡和興趣的 Scratch 成員分享其作品,得到回饋並互相學習。

Scratch 社群網址 :
https://scratch.mit.edu/


  進入Scratch 社群後如果網頁是英文的,網頁最下方可改成繁體中文。

 Scratch 社群網站都是社員的成果分享,也可以自己嘗試寫程式。


 進入1(這本來應該是: 試看看),會進入 Scratch 可以自己寫一個程式。


2.就是範例程式,可玩還可看到原始設計方法。


3就是註冊一個帳號完全免費,可與其他社員討論使用心得也可以發表自己的創意。


  Scratch 2.0 除了在線上使用外也有離線版本的可供下載。

   https://scratch.mit.edu/scratch2download/


  Scratch 2.0 是建構在Adobe AIR上面,如果電腦沒裝過AIR第一步就要先下載AIR,電腦如裝過 Adobe AIR 就可省略第一步,Scratch 2.0 下載後就是執行檔,下一下一步就會安裝,也會自動檢查Adobe AIR的版本,Adobe AIR也會自動跳出來升級。安裝程式會自動在桌面建立一個捷徑,按兩下Scratch 2就會開啟。


進入Scratch 後如果不是中文可按左上角地球,內會有正體中文選項。


安裝完成後就可發揮你無限的創意。

參考資料 :

https://scratch.mit.edu/

https://zh.wikipedia.org/wiki/Scratch%E8%AF%AD%E8%A8%80

2016年5月25日 星期三

Processing 入門

Processing 入門

         Processing 是由 MIT 媒體實驗室的 Casey Reas 和 Benjamin Fry 發明的一種開源可視化程式語言。Processing 是為數位媒體與娛樂互動設計而創建,其目的是通過視覺化的方式輔助程式教學,並在此基礎之上表達數位創意。

Processing 安裝

    Processing 是免費的軟體可在這裡下載
https://processing.org/download/


 會詢問是否要捐款贊助,選好後會跳至下載畫面

 
      選擇符合自己電腦的版本下載。下載完成後解壓縮Processing是免安裝軟體不用安裝手續就可執行,我的習慣是把整個目錄直接放在桌面上


點兩下 processing.exe 就會開啟 Processing


    看起來很像 Arduino ? 沒錯 Arduino 是用 Processing 改寫的,目前版本3.1.1只有簡體中文沒繁體中文Processing 是以速寫本方式的直譯程式,有兩個重要的段落void setup() 與 void draw()
 
void setup()  
{     // 在這括號內的會執行一次
.....
}
void draw() 
{     //在這括號內的會重複執行
.....
}
    
聽起來好像很簡單就照著範例先執行一次

void setup() {    
  size(480, 320);    //設定視窗大小
}

void draw() {                 //開始畫畫
  if (mousePressed)     //如果滑鼠按鈕被按下
 {  
    fill(0,255,0);            //將顏色設定為綠色
  } 
else                           //滑鼠按鈕沒被按下
{
    fill(255,0,0);            //將顏色設定為紅色
  }
  ellipse(mouseX, mouseY, 40, 40);  //劃橢圓座標使用滑鼠位置,直徑 40X40

 把上面這段複製到 Processing IDE會所有的中文全部變成框框也辦法打中文字


 須到  Processing IDE 文件 > 偏好設定 。將 編輯器和控制台字體改為 "細明體" 。勾選 "啟用複雜字體輸入" 。編輯器字體大小改為"18"。改好後按 "確認"


 按確認後回到 Processing IDE 中文註解就顯示正常


 按"撥放"按鈕 


 Processing 會跳出另一個視窗滑鼠在視窗上面移動會畫出滑鼠軌跡紅點按著滑鼠按鍵移動會顯示綠色圓點





參考資料 : 
 https://processing.org/
 https://zh.m.wikibooks.org/wiki/Processing%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97

2016年5月24日 星期二

Arduino 路燈自動開關--使用LinkIt Smart 7688 Duo

Arduino  路燈自動開關 --使用LinkIt Smart 7688 Duo  

****注意 LinkIt 7688 Duo 在 Arduino IDE 1.6.9 有問題 Arduino IDE 要用1.6.7***** 

      小雪幼兒園都使用Grove 套件 + LinkIt Smart 7688 Duo


本實驗使用材料 :

LinkIt Smart 7688 Duo   X  1
Grove - Light Sensor       X  1
Grove - OLED Display   X  1
Grove - Relay                  X 1
Grove 7688 Duo 底座    X 1
LinkIt Smart 7688 Duo  X1


Light Sensor 接在 A0 OLED Display 接在 I2C  Relay 接在 D5




      光感應器Light Sensor 最常應用在路燈或庭園燈自動開關上當白天光線較亮就將燈關閉 當光線較暗時就將燈開啟。從Light Sensor讀取的數據最大為630用手遮在上方時讀取的數據200~400為了實驗方便臨界值就設為250用if 來判斷Light Sensor讀取的數據大於250燈就關閉Light Sensor讀取的數據小於250燈就開啟

        
/*********以下為程式**************/

  #include <Wire.h>
  #include <SeeedOLED.h>
  #define LIGHT_SENSOR  A0      // Light Sensor 接在 A2

void setup()
{

  pinMode(5, OUTPUT);                 //設定 Pin5 為輸出
  Wire.begin();              
  SeeedOled.init();                    //初始化 OLED
  SeeedOled.setNormalDisplay();      //設定 OLED 正常顯示
  SeeedOled.setPageMode();           //設定 OLED 為頁模式
  SeeedOled.clearDisplay();           //清除OLED

   }
void loop()
{

    int sensorValue = analogRead(LIGHT_SENSOR);  //感測器的值 = 類比輸入腳的值

    if(sensorValue < 250)          // 如果感測器的值小於250
    digitalWrite(5, 1);            //將燈打開

    else                          //如果不是
    digitalWrite(5, 0);           //將燈關閉
    
    SeeedOled.setTextXY(0,0);              //OLE 游標移至 0,0
    SeeedOled.putString("The analog is ");  //顯示字元 The analog is
    SeeedOled.setTextXY(2,0);              //OLE 游標移至 2,0
    SeeedOled.putFloat(sensorValue);        //顯示 感測器的值
    
}




        但上面這程式以一個臨界值做判斷當Light Sensor讀取的數據剛好在250附近變動時燈就會有閃爍現象 這時就要用兩個臨界值來修正

      下面這程式 當Light Sensor讀取的數據低於250時燈會開啟,當燈開啟後一直要到Light Sensor讀取的數據高於 280 時燈才會關閉

      Light Sensor 會顯示於OLED用手慢慢遮住Light Sensor直到Light Sensor讀取的數據低於250燈就會開啟,開啟後再慢慢移開當Light Sensor讀取的數據高於280燈才會關閉

/*********以下為程式**************/

 #include <Wire.h>
 #include <SeeedOLED.h>
 #define LIGHT_SENSOR A0      // Light Sensor 接在 A2

void setup()
{

  pinMode(5, OUTPUT);                 //設定 Pin5 為輸出
  Wire.begin();            
  SeeedOled.init();                    //初始化 OLED
  SeeedOled.setNormalDisplay();      //設定 OLED 正常顯示
  SeeedOled.setPageMode();           //設定 OLED 為頁模式
  SeeedOled.clearDisplay();           //清除OLED

   }
void loop()
{

    int sensorValue = analogRead(LIGHT_SENSOR);  //感測器的值 = 類比輸入腳的值

    if(sensorValue < 250)          // 如果感測器的值小於250
    digitalWrite(5, 1);            //將燈打開

    else if (sensorValue > 280)    //如果不是且感測器的值大於280
    digitalWrite(5, 0);           //將燈關閉
 
    SeeedOled.setTextXY(0,0);              //OLE 游標移至 0,0
    SeeedOled.putString("The analog is ");  //顯示字元 The analog is
    SeeedOled.setTextXY(2,0);              //OLE 游標移至 2,0
    SeeedOled.putFloat(sensorValue);        //顯示 感測器的值
 
}

if-else 函數

if...else       如果 .. 否則....

        例 : 如果"好天氣" 就 "出門玩"否則就 "在家" 

if  (好天氣)     // 條件成立會做下面這件事條件不成立會執行 else
 出門玩
else                //if 條件不成立時會執行下面這件事
 在家

      if 需要條件執行,當然 else 也可以有條件執行 例如 : 如果"好天氣" 就 "出門玩"天氣不好又有500塊就 "吃麥當勞" ,兩個都不成立就當作沒說過

  if  (好天氣)     // 條件成立會做下面這件事,條件不成立會執行 else
 出門去玩
  else if (有500塊)              //else條件成立時會執行下面這件事
  吃麥當勞



參考資料 : 聯發科創意實驗室                    http://home.labs.mediatek.com/?lang=zh-hans
                     Seeed Technology Co., Ltd      http://www.seeedstudio.com/depot/
                    Arduino LLC                              https://www.arduino.cc/