顯示具有 小雪的小班LinkIt Smart 7688 Duo 標籤的文章。 顯示所有文章
顯示具有 小雪的小班LinkIt Smart 7688 Duo 標籤的文章。 顯示所有文章

2017年1月25日 星期三

LinkIt Smart 7688 Duo + Noritake Itron VFD GU280X16G -7002 跑馬顯示


    VFD (Vacuum Fluorescent Display)真空螢光顯示器是和陰極射線管相似的顯示設備,真空螢光管的主要器件是一個帶有柵極的電子管,陰極射出的電子在柵極的吸引下加速射向陽極,撞擊到陽極上塗覆的螢光粉後發出可見光。通過調節柵極的電壓可以改變真空螢光管的亮度,大量的真空螢光管排列起來就可組成真空螢光顯示器,每個螢光管顯示一個像素。

 這次使用的是 Noritake Itron 出品的 GU280X16G -7002 ,具有280 X 16 點的解析度,傳輸介面可以用並列或是串列。

可到這裡下載 GU7000系列的 Libraries

http://www.noritake-elec.com/specification.php?id=Arduino_Noritake_VFD_GU7000&category=10&type=gu7000

 目前測試結果用Serial_Async interface 的傳輸方式有問題需用Serial_Sync interface的傳輸方式,要用Serial_Sync 的方式傳輸在GU280X16G -7002 的模組PCB上的J2必須銲接短路。



  Noritake Itron 也提供了簡單的圖形轉2進位程式可在這裡下載。

https://www.noritake-elec.com/support/design-resources/tools/bitmap-image-tool-gu-7000

這個VFD模組沒有中文字型ROM這次的跑馬顯示是採用圖形方式顯示。

先開啟一個繪圖程式將圖紙大小設成 280 X 16畫上想要顯示的圖案。


    GU7000系列Libraries的虛擬視窗限制是512無法將280X16的圖案寫到視窗外所以必須將畫面截成兩段分開存檔。

 第一段 140 X16
 第二段 140 X16

 開啟Noritake Itron下載的BitmapImageTool 按 Select Image 選擇要轉換的檔案。
    剛剛在做圖檔時底色是白色須勾選 Invert Image 將圖檔顏色反轉,按Copy Code Clipboard 複製到剪貼簿直接貼在Arduino 就可。


以下是完成的Arduino程式碼

/* GU7000系列 */
#include <GU7000_Interface.h>
#include <GU7000_Serial_Sync.h>
#include <Noritake_VFD_GU7000.h>

/*定義GU7000 VDF 的傳輸方式與 Arduino 接腳 */
GU7000_Serial_Sync interface(3, 5, 6, 7); // SIN,BUSY,SCK,RESET

Noritake_VFD_GU7000 vfd;

/*圖形的前半段 */
/* 140x16 image "y" */
static const uint8_t PROGMEM image_y1[] = {

    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x03,0x00,0x03,0x00,0x02,0x8c,
    0x02,0x78,0x02,0x08,0x06,0x10,0x38,0x10,0x18,0x10,0x06,0x10,0x02,0x48,0x02,0x78,
    0x02,0x8c,0x03,0x00,0x03,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
    0x02,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x18,0xc0,0x60,0x30,0x18,0xc0,0x05,0x00,
    0x05,0x00,0x05,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x04,0x00,0x06,0x00,0x06,0x60,0x05,0xc0,0x0c,0x40,0x30,0x80,0x0c,0x40,0x05,0xc0,
    0x06,0x60,0x06,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x04,0x00,0x07,0x80,0x1d,0x00,0x0d,0x00,0x07,0x80,0x04,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x12,0x48,0x1a,0x58,0x1e,0x40,0x37,0xfc,0x37,0xfc,0x1e,0x54,
    0x00,0x0c,0x1f,0xf8,0x1f,0xf0,0x12,0x00,0x33,0xfc,0x23,0xfc,0x22,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x02,0x20,0x0e,0x20,0x3d,0xe0,0x39,0xe0,0x29,0x20,0x09,0x20,0x0f,0xfc,0x0f,0xfc,
    0x09,0x20,0x19,0x20,0x19,0x20,0x08,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
    0x3f,0xfc,0x3f,0xfc,0x04,0x84,0x0c,0x8c,0x08,0xb8,0x3f,0xf0,0x3f,0xe0,0x08,0xb0,
    0x0f,0x98,0x0f,0x8c,0x00,0x8c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

};

/*圖形的後半段 */
/* 140x16 image  "y2" */
static const uint8_t PROGMEM image_y2[] = {
    0x1b,0x44,0x3d,0x44,0x2f,0x4c,0x18,0x58,0x1f,0x40,0x35,0xfc,0x3f,0xfc,0x1f,0x50,
    0x1b,0x50,0x3d,0x58,0x2f,0x4c,0x1b,0x4c,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x01,0x00,0x01,0x80,0x01,0x84,0x01,0x7c,0x01,0x08,0x06,0x10,0x18,0x10,0x06,0x10,
    0x01,0x08,0x01,0x7c,0x01,0x84,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x06,0x20,
    0x05,0xc0,0x3c,0x40,0x1c,0x40,0x05,0xc0,0x06,0x20,0x04,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0e,0x00,0x34,0x00,
    0x14,0x00,0x0e,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x80,
    0x01,0x84,0x01,0x7c,0x01,0x08,0x06,0x10,0x18,0x10,0x06,0x10,0x01,0x08,0x01,0x7c,
    0x01,0x84,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
    0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x24,0x00,0xc3,0x00,0x24,0x00,0x18,0x00,0x18,
    0x00,0x18,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x03,0x00,0x03,0x00,0x03,0x00,
    0x0c,0xc0,0x30,0x30,0x0c,0xc0,0x03,0x00,0x03,0x00,0x03,0x00,0x02,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

/*這一行是塗黑用*/

/* 1x16 image "16_line" */
const static uint8_t PROGMEM image_16_line[] = {
    0x00,0x00
};


void setup() {

  vfd.begin(280,16);         // 280X16 VFD模組
  vfd.interface(interface);
  vfd.isModelClass(7002);
  vfd.GU7000_reset();       //重置 VFD
  vfd.GU7000_init();        //初始化 VFD
}

  void printScroll(){                           //滾動顯示函式
  vfd.GU7000_defineWindow(1, 0, 0, 420, 16);    //定義式窗大小 420 X16 目前試起來無法超過512
  vfd.GU7000_selectWindow(1);                  //使用視窗 1
  vfd.GU7000_setCursor(280, 0);                //游標位置移到 280,0
  vfd.GU7000_drawImage_p(140, 16, image_y1);   //貼上 Y1 圖片
   scrollY1();                                 // 水平滾動140
   vfd.GU7000_setCursor(280, 0);               //游標位置移到 280,0
   vfd.GU7000_drawImage_p(140, 16, image_y2);  //貼上 Y1 圖片
   scrollY2();                                 // 水平滾動420移動時後面塗黑
}
void scrollY1(){                  // Y1滾動函式
  int i = 0;
  while(i < 140){                //滾動距離
    vfd.GU7000_home();
    vfd.GU7000_scrollScreen(1, 2, 1, 2); //滾動速度
    i++;
  }
}
void scrollY2(){         // Y1滾動函式
  int i = 0;
  while(i < 420){            //滾動距離
    vfd.GU7000_home();
    vfd.GU7000_drawImage_p(1, 16,image_16_line);   //將滾動後的顯示塗黑
    vfd.GU7000_scrollScreen(1, 2, 1, 2);
    i++;
  }
}

void loop() {

printScroll();

}

上傳 LinkIt Smart 7688 Duo後VFD會開始做跑馬顯示



參考資料 : 

https://www.noritake-elec.com/
http://vfd-fun.blogspot.tw/

2017年1月14日 星期六

LinkIt Smart 7688 Duo + TSL237 Light-to-frequency Sensor

****注意 Arduino IDE 使用1.6.7***** 

   
    TSL237光至頻率轉換器在單個 CMOS 單片上組合了矽光電二極體和電流至頻率轉換器。輸出是方波(50%佔空比),頻率與光電二極體上的光強度成正比。數字輸出允許與微控制器或其他邏輯電路的直接接口。TSL237 已經對320nm至700nm的紫外 - 可見光範圍進行溫度補償,響應範圍在320nm至1050nm。

主要特徵 :

電壓 : 2.7V ~ 5V 
5M:1輸入動態範圍
低暗輸出頻率0.1 Hz
亮度響應 2.3kHz /(μW/ cm 2)@λp= 524nm

2X增益的鏡頭

TSL237 的原廠資料:

http://ams.com/eng/Products/Light-Sensors/Light-to-Frequency/TSL237

TSL237的接腳圖
TSL237 的實際接線




#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_ILI9341.h>

#define TFT_RST   5       //LCM  接腳
#define TFT_DC    6
#define TFT_CS    7
#define TFT_MOSI  8
#define TFT_MISO  9
#define TFT_CLK   10

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

const int input=12;    //TSL237 的輸出接腳
int high_time;
int low_time;
float time_period;
float frequency;

void setup()
{
  pinMode(input,INPUT);    
  tft.begin();                                          //LCM 啟始
  tft.fillScreen(ILI9341_BLACK);      //LCM 畫面更新為黑色
  tft.setRotation(3);                             // LCM 旋轉270度
}
void loop()
{
 tft.setCursor(0,0),  
 tft.setTextSize(2);
  tft.fillRect(0,0,320,40,0);
  tft.println("Frequency Meter");

  high_time=pulseIn(input,HIGH);
  low_time=pulseIn(input,LOW);
 
  time_period=high_time+low_time;
  time_period=time_period/1000;
  frequency=1000/time_period;

  tft.print(frequency);
  tft.print(" Hz");
  delay(1000);
}

上傳後LCM就會開始顯示TSL237的輸出頻率




2016年12月29日 星期四

LinkIt Smart 7688 Duo + Adafruit 2.4" TFT Breakout 測試

****注意 Arduino IDE 使用1.6.7***** 

 本來這系列都計畫用SeeedStduio Grove系列產品做的,但是 Grove 系列沒推出較高解析度的LCM,在希望友直接顯示的實驗下只好選用其他廠家的LCM模組。

     Adafruit 2.4" TFT 附帶沒編碼過的電阻式觸控,面板解析度為 240 X 320 對角 2.4英吋,主控IC 是ILI 9341 可用SPI或8Bit傳送資料,資料線和電源是3.3V或5V都可(一般外面買的ILI3941 LCM不只電源要求3.3V就連信號也要3.3V。

Adafruit 最大的特點就是包裝就是隨便綑一綑。


內容物就是一片LCM一個排針。


LCM 排針一邊是給8Bit資料傳輸用一邊是給SPI資料傳輸用,為了減少接腳就選用SPI焊接。


要用SPI傳輸LCM背後IM1.IM2.IM3 要用焊錫短路。


再來就接線

LCM  RST   >>  D5
LCM  DC     >>  D6
LCM  CS      >>  D7
LCM  MOSI  >> D8
LCM  MISO  >> D9
LCM  CLK    >>  D10
LCM  Y+       >>  A3
LCM  X-        >>  A2
LCM  Y-         >>  D3
LCM  X-        >>  D4


到這下載需要的 Library解壓縮後放在Arduino目錄下的\libraries\。

https://github.com/adafruit/Touch-Screen-Library
https://github.com/adafruit/Adafruit_ILI9341
https://github.com/adafruit/Adafruit-GFX-Library

  開啟Arduino 輸入以下程式碼。

//This example implements a simple slidi。ng On/Off button. The example
// demonstrates drawing and touch operations.
//
//Thanks to Adafruit forums member Asteroid for the original sketch!
//
#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_ILI9341.h>
#include <TouchScreen.h>

//觸控 X+ X- Y+ Y- pins
#define YP A3  // 只可以使用類比輸入 An !
#define XM A2  // 只可以使用類比輸入 An !
#define YM 3   //數位 I/O
#define XP 4   //數位 I/O
//觸控面板校正原始資料
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

#define MINPRESSURE 10
#define MAXPRESSURE 1000

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define TFT_RST   5
#define TFT_DC    6
#define TFT_CS    7
#define TFT_MOSI  8
#define TFT_MISO  9
#define TFT_CLK   10

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

boolean RecordOn = false;

#define FRAME_X 70
#define FRAME_Y 80
#define FRAME_W 200
#define FRAME_H 100

#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H

#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H

void drawFrame()
{
  tft.drawRect(FRAME_X, FRAME_Y, FRAME_W, FRAME_H, ILI9341_BLACK);
}

void redBtn()
{
  tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_RED);
  tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_BLUE);
  drawFrame();
  tft.setCursor(GREENBUTTON_X + 6 , GREENBUTTON_Y + (GREENBUTTON_H/2));
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(5);
  tft.println("ON");
  RecordOn = false;
}

void greenBtn()
{
  tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_GREEN);
  tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_BLUE);
  drawFrame();
  tft.setCursor(REDBUTTON_X + 6 , REDBUTTON_Y + (REDBUTTON_H/2));
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(5);
  tft.println("OFF");
  RecordOn = true;
}

void setup(void)
{
 pinMode(13, OUTPUT);

  tft.begin();

  tft.fillScreen(ILI9341_BLACK);
  // origin = left,top landscape (USB left upper)
  tft.setRotation(1);
  redBtn();
}

void loop()
{
   // Retrieve a point
  TSPoint p = ts.getPoint();

  // See if there's any  touch data for us
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
  {
    // Scale using the calibration #'s
    // and rotate coordinate system
    p.x = map(p.x, TS_MINY, TS_MAXY, 0, tft.height());
    p.y = map(p.y, TS_MINX, TS_MAXX, 0, tft.width());
    int y = tft.height() - p.x;
    int x = p.y;

    if (RecordOn)
    {
      if((x > REDBUTTON_X) && (x < (REDBUTTON_X + REDBUTTON_W))) {
        if ((y > REDBUTTON_Y) && (y <= (REDBUTTON_Y + REDBUTTON_H))) {
           digitalWrite(13, LOW);
          redBtn();
        }
      }
    }
    else //Record is off (RecordOn == false)
    {
      if((x > GREENBUTTON_X) && (x < (GREENBUTTON_X + GREENBUTTON_W))) {
        if ((y > GREENBUTTON_Y) && (y <= (GREENBUTTON_Y + GREENBUTTON_H))) {
           digitalWrite(13, HIGH);
          greenBtn();
        }
      }
    }

     }
}

按上傳LCM就會顯示ON綠燈時LinkIt Smart 7688 Duo 版上的D13LED就會亮,按一下LCM的OFF。


    當紅燈亮起時LinkIt Smart 7688 Duo 版上的D13LED就會熄滅。再按一下LCM的 ON LCM就會顯示綠燈 LinkIt Smart 7688 Duo 版上的D13LED就會亮。


參考資料:https://www.adafruit.com/

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/

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/