2016年6月1日 星期三

Grove TouchSensor 控制 LED -- 使用LinkIt Smart 7688 Duo


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

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

使用材料

Grove TouchSensor                  X 1
LinkIt Smart 7688 Duo            X 1
LinkIt Smart 7688 Duo 底版   X 1

配線

  TouchSensor 接在 LinkIt Smart 7688 Duo 底版 的 "D5"




程式一

    這程式手觸摸TouchSensor,D13 LED會亮手離開時LED就熄滅

//********************程式一***************

const int TouchPin=5;     // 設定 Pin5 名稱為 "TouchPin"
const int ledPin=13;      // 設定 Pin13 名稱為 "ledPin"

void setup(){
pinMode(TouchPin, INPUT);   // 設定"TouchPin"為輸入
pinMode(ledPin,OUTPUT);     // 設定 "ledPin" 為輸出
}

void loop() {
int sensorValue = digitalRead(TouchPin);     //讀取TouchSensor 的狀態
if(sensorValue==HIGH)                        //如果sensorValue =HIGH
{
digitalWrite(ledPin,HIGH);              // ledPin 輸出高電位
}
else {                              
digitalWrite(ledPin,LOW);            // ledPin 輸出低電位
}
delay(100);      //延遲0.1秒
}

程式二 

  這程式是 ON-OFF 模式,觸摸TouchSensor一次LED會亮,觸摸第二次LED會熄滅

//****************程式二*************************

const int TouchPin=5;     // 設定 Pin5 名稱為 "TouchPin"
const int ledPin=13;      // 設定 Pin13 名稱為 "ledPin"
int sensorValue = 0;         // 存放TouchSensor狀態
int ledState = 0;            // 存放LED狀態

void setup(){
  pinMode(ledPin, OUTPUT);    //設定ledPin為輸出
  pinMode(TouchPin, INPUT);  //設定TouchPin為輸入
}

void loop(){
 sensorValue = digitalRead(TouchPin);    //讀取TouchSensor 的狀態
  if (sensorValue == HIGH) {                   /如果sensorValue =HIGH
    ledState = !ledState;                        //反轉 LED 狀態
  }
  while(1) {                       //進入無窮迴圈
    sensorValue = digitalRead(TouchPin);  
    if(sensorValue == LOW)break;            //等待sensorValue =LOW
  }
  if (ledState == 1) {                          //如果LED狀態=1
    digitalWrite(ledPin, HIGH);         //ledPin 輸出高電位
  }
  else {
    digitalWrite(ledPin, LOW);          //ledPin 輸出低電位
  }
  delay(100);            //延遲0.1秒
}

程式三

     程式是透過 PWM控制LED的明亮度,每次觸摸TouchSensor 會增加約2%的電流,直到最亮時再按一次會關閉手沒放開會一直循環

//****************程式三***********************

const int TouchPin=5;     // 設定 Pin5 名稱為 "TouchPin"
const int ledPin=13;      // 設定 Pin13 名稱為 "ledPin"
int n=0;              //變數 n 預設值為0

void setup(){
pinMode(ledPin,OUTPUT);          // 設定ledPin為輸出
pinMode(TouchPin, INPUT);        //設定TouchPin為輸入
}

void loop(){
  int sensorValue= digitalRead(TouchPin);  //讀取TouchSensor 的狀態    
  if (sensorValue==HIGH){              //如果sensorValue =HIGH
    analogWrite(ledPin,n);       // ledPin 輸出PWM
    n=n+5;                      // n+5
    if (n>=255){                //如果n>=255                                      
     n=0;                      //
    }          
  }
   delay (200);           //延遲0.2秒
  }

函數

while() 

while() 是進入無窮迴圈 ,while(1)會等回傳值=true 才會繼續執行下一個動作


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

沒有留言:

張貼留言