2019年5月2日 星期四

LCD顯示


我買到的LCD顯示器有兩種,下圖上方是原始的,下圖下方是有加上轉換IC的,不同點在背面,

原始的LCD雖然接線很複雜,只要照著接就好,自己搞最久的是在相對簡單的加強版上

因為搞錯IC的型號,找到的函式庫都不對,測試了很久,終於找到了底下的連結可以使用
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/


另外,底下是原本的測試碼,用的是11,12,6,5,4,3這6個腳位,但是中間有跳過腳位,心理一直很介意
#include <LiquidCrystal.h>

LiquidCrystal lcd(11,12,6,5,4,3);

void setup() {
  // put your setup code here, to run once:
lcd.begin(16,2);
lcd.print("hello,world!");
}

void loop() {
  // put your main code here, to run repeatedly:
lcd.setCursor(0,1);
lcd.print(millis()/1000);
}

所以又尋找到一篇可以自訂腳位的方法,看到排線都在一邊,心裡就舒暢了點。
http://yhhuang1966.blogspot.com/2015/03/arduino_25.html

#include <LiquidCrystal.h>
#define RS 2
#define E 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7


LiquidCrystal lcd(RS,E,D4,D5,D6,D7);  //建立 LCD 物件


void setup() {  //初始設定 (一次性)
  lcd.begin(16,2);  //定義 LCD 為 2 列 16 行顯示器

  lcd.clear();  //清除螢幕
  lcd.setCursor(0,0);   //游標移到左上角
  lcd.print("Hello World!");   //在第一列印出 Hello World!
  }

void loop() {  //無限迴圈
  lcd.setCursor(0,1);  //游標移到第 2 列第 1 行
  lcd.print(millis()/1000);   //印出秒數
  }

接腳功能接 Arduino 
1 (VSS)電源負極GND
2 (VCC)電源正極5V
3 (Vo)調整對比可變電阻中腳
4 (RS)D0~D7放入資料暫存器 (1) 或指令資料暫存器 (0)腳位 2
5 (RW)讀取 (1) 或寫入 (0) LCDGND (寫入)
6 (E)可寫入 (1) 或不可寫入 (0) LCD腳位 3
7 (D0)資料位元 0不接
8 (D1)資料位元 1不接
9 (D2)資料位元 2不接
10 (D3)資料位元 3不接
11 (D4)資料位元 4腳位 4
12 (D5)資料位元 5腳位 5
13 (D6)資料位元 6腳位 6
14 (D7)資料位元 7腳位 7
15 (A+)背光電源正極5V
16 (-K)背光電源負極GND


再來看有轉換IC的


#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {
  // put your setup code here, to run once:

lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.backlight();
lcd.print("hello,world!");
}

void loop() {
  // put your main code here, to run repeatedly:
lcd.setCursor(0,1);
lcd.print(millis()/1000);
}


溫濕度感測器DHT11



這是測試用的sensor,背面有印上規格,

     
底下聯結有詳細說明
http://playground.arduino.cc/Main/DHT11Lib

並且有建議的接線方式

因為arduino要去讀懂這個sensor的data,所以我們必須要把解讀sensor的資訊給arduino,也就是這個sensor的library,底下的聯結有提供製作的方法
http://playground.arduino.cc/Main/DHT11Lib
像底下這樣子的檔案架構


準備好之後,就可以開始撰寫程式了,但是,有一個觀念要先說明,那就是sensor偵測到的值要怎麼顯示出來呢?因為現在還沒有講到LCD,只能叫arduino送出來,送到哪裡呢?就是寫程式時在工具那邊有個"序列埠監控視窗"的選項,為什麼是序列埠呢?這牽涉arduino的設計,




#include <dht11.h>
dht11 DHT11;
const byte dataPin=2;

void setup() {
  Serial.begin(9600);
}

void loop() {
int chk=DHT11.read(dataPin);
if (chk==0) {
      Serial.print("Humidity  (%):  ");
      Serial.println((float)DHT11.humidity,2);
      Serial.print("Temperature  (.C):  ");
      Serial.println((float)DHT11.temperature,2);
            }
   else {
     Serial.println("Sensor Error");
   }
   delay (2000);
}