S25_Light_Cup(魔術光杯)

【說明】

這組2個光杯可提供訊號腳位調整它的光線強弱,使用時必須至少兩個。其實光杯是一個水銀傾斜開關再附加一個紅色 LED的組合。

【零件表】

No.零件名稱數量
1Light Cup (KY_207)2

【零件接腳】

No.零件接腳UNO R3 / Nano 接腳
1Light Cup A – LD 2
2Light Cup A – SD 3
3Light Cup A – VVcc
4Light Cup A : GGND
5Light Cup B  – LD 4
6Light Cup B – SD 5
7Light Cup B – VVcc
8Light Cup B -GGND

【按線圖】

S25_Light_Cup_bb

【應用 1 程式碼】

/* 魔術光杯(KY-027)的應用
 * 魔術光杯的應用:使用一組兩個光杯,讓光杯 A 傾斜開啟時累加一個值、
 * 光杯 B 傾斜開啟時遞減一個值,當數值 <  128 時光杯 A 為關閉 B為開啟,
 * 數值 >= 128 時光杯A 為開啟B為關閉,且組合只有在其中一個開另一個關時
 * 才會作用,即兩者同時開或關時,值是不會改變的。
 */
 
byte LedPinA = 2;              // 定義光杯 A Led 腳位
byte SignalPinA = 3;           // 定義光杯 A 訊號來源腳位
byte LedPinB = 4;              // 定義光杯 B Led 腳位
byte SignalPinB = 5;           // 定義光杯 B 訊號來源腳位
byte SignalStatusA = 0;        // 定義光杯 A 訊號來源的值
byte SignalStatusB = 0;        // 定義光杯 B 訊號來源的值
byte brightness = 0;           // 定義開關的值以決定那個光杯開啟或關閉

void setup()
{
  pinMode(LedPinA, OUTPUT);    // 設定光杯 A Led 腳位為輸出模式
  pinMode(LedPinB, OUTPUT);    // 設定光杯 B Led 腳位為輸出模式
  pinMode(SignalPinA, INPUT);  // 設定光杯 A 訊號來源腳位為輸入模式
  pinMode(SignalPinB, INPUT);  // 設定光杯 B 訊號來源腳位為輸入模式
}

void loop()
{
  // 讀取光杯 A 訊號來源的值
  SignalStatusA = digitalRead(SignalPinA);
  // 若開啟累加 brightness 的值
  if(SignalStatusA == HIGH) brightness ++;

  // 讀取光杯 B 訊號來源的值
  SignalStatusB = digitalRead(SignalPinB);
  // 若開遞減 brightness 的值
  if(SignalStatusB == HIGH) brightness --;

  // 開啟或關閉光杯 A/B
  analogWrite(LedPinA, brightness);
  analogWrite(LedPinB, 255 - brightness);
  
  // 持續一段時間的開關
  delay(25);   
}
下載程式碼

【應用 2 程式碼】

/* 魔術光杯(KY-027)的應用
 * 使用一組兩個光杯,放置於一個平台上,當平台向左傾斜時左邊的光杯燈亮,
 * 反之右光杯燈亮。
 */
 
byte LedPinA = 2;              // 定義光杯 A Led 腳位
byte SignalPinA = 3;           // 定義光杯 A 訊號來源腳位
byte LedPinB = 4;              // 定義光杯 B Led 腳位
byte SignalPinB = 5;           // 定義光杯 B 訊號來源腳位
byte SignalStatusA = 0;        // 定義光杯 A 訊號來源的值
byte SignalStatusB = 0;        // 定義光杯 B 訊號來源的值

void setup()
{
  pinMode(LedPinA, OUTPUT);    // 設定光杯 A Led 腳位為輸出模式
  pinMode(LedPinB, OUTPUT);    // 設定光杯 B Led 腳位為輸出模式
  pinMode(SignalPinA, INPUT);  // 設定光杯 A 訊號來源腳位為輸入模式
  pinMode(SignalPinB, INPUT);  // 設定光杯 B 訊號來源腳位為輸入模式
}

void loop()
{
  // 讀取光杯 A/B 訊號來源的值
  SignalStatusA = digitalRead(SignalPinA);
  SignalStatusB = digitalRead(SignalPinB);

  // 開啟或關閉光杯 A/B
  digitalWrite(LedPinA, SignalStatusA);
  digitalWrite(LedPinB, SignalStatusB);
  
  // 持續一段時間的開關
  delay(25);   
}
下載程式碼

 ※  分享結束  ※


發佈留言