Most Recent


Arduino điều khiển LCD 16x2 Phần 2 : Một số hiệu ứng cơ bản của LCD 16x2

Giới thiệu:

Xin chào các bạn! Hôm nay mình sẻ tiếp tục đề tài Arduino điều khiển LCD 16x2 .LCD không  chỉ hiển thị các chuỗi ký tự hay số đơn giản mà ta còn có thể thêm vào các hiệu ứng giúp cho giao diện thêm sinh động và thú vị hơn tùy theo ý muốn cá nhân.
 

Mục tiêu cần nắm :

Các pinout của LCD 16x2.
Cách kết nối LCD với Arduino
Cách điểu khiển LCD bằng Arduino.

Chuẩn bị: 

Arduino Uno .
LCD 16x2.
Bread board.
Biến trở 10k ( tinh chỉnh độ sáng ) .

Kết nối:



Code:

Hiệu ứng nhấp nháy:

#include <LiquidCrystal.h> // Khai báo thư viện

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Khởi tạo giao tiếp
void setup() {
  // Khởi tạo LCD:
  lcd.begin(16, 2);
  // Hiển thị  LCD.
  lcd.print("T-HI Group !!");
}

void loop() {
  // Tắc màn hình :
  lcd.noDisplay();
  delay(500); //Thời gian chờ 0.5s 
  // Mở màn hình:
  lcd.display();
  delay(500);
}

Chớp tắc trỏ cuối dòng:

#include <LiquidCrystal.h> // Khai báo thư viện
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Khởi tạo giao tiếp
void setup() {
  // Khởi tạo LCD:
  lcd.begin(16, 2);
// Hiển thị  LCD.
  lcd.print("T-HI Group !!");
}
void loop{
// Tắt mở con trỏ cuối dòng

lcd.noBlink();
delay(3000);
  lcd.blink();
  delay(3000);
}


Tự động cuộn chữ: 

Tự dịch chuyển chữ ở dòng thứ 1 trên LCD khi bắt đầu có kí tự ở dòng thứ 2:

#include <LiquidCrystal.h> // Khai báo thư viện
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Khởi tạo giao tiếp
void setup() {
  // Khởi tạo LCD:
  lcd.begin(16, 2);
void loop() {
  //Đặt con trỏ tại (0,0):
  lcd.setCursor(0, 0);
  // Xuất ký tự số từ 0 đến 9:
  for (int thisChar = 0; thisChar < 10; thisChar++) {
    lcd.print(thisChar);
    delay(500);
  }

  // Đặt con trỏ tại  (16,1):
  lcd.setCursor(16, 1);
  // Tự động cuốn chử:
  lcd.autoscroll();
  //Xuất ký tự số từ 0 đến 9
  for (int thisChar = 0; thisChar < 10; thisChar++) {
    lcd.print(thisChar);
    delay(500);
  }
  // Tắt chế độ tự động cuộn chử:
  lcd.noAutoscroll();

  // Xóa trang:
  lcd.clear();
}

Chạy chữ :

Chữ chạy từ trái sang phải và ngược lại
#include <LiquidCrystal.h> // Khai báo thư viện
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Khởi tạo giao tiếp
void setup() {
  // Khởi tạo LCD:
  lcd.begin(16, 2);
void loop() {
  // Cuộn từ vị trí 13 sang trái
  
  for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
    lcd.scrollDisplayLeft();
    //chờ
    delay(150);
  }
// cuộn từ vị trí 29 sang phải
for (int positionCounter = 0; positionCounter < 29; positionCounter++) 
    lcd.scrollDisplayRight();
  // Chờ 
    delay(150);


Ngoài những hiệu ứng cơ bản và thông dụng như trên thư viện LCD còn hỗ trợ thêm một số hiệu ứng đẹp mắt khác,các bạn có thể sử dụng tùy theo sàng tạo của bản thân.

thitech Thứ Hai, 30 tháng 7, 2018
Arduino điều khiển LCD 16x2 Phần 1:Hiển thị chuỗi, số nguyên, số thực

Giới thiệu:

Xin chào các bạn!
Hôm nay minh giới thiệu các bạn cách chúng ta hiển thị dữ liệu chuổi ký tự,số nguyên sử dụng LCD 16x2 và  được điều khiển bởi Arduino.

Mục tiêu cần nắm :

Các pinout của LCD 16x2.
Cách kết nối LCD với Arduino
Cách điểu khiển LCD bằng Arduino.

Chuẩn bị: 

Arduino Uno .
LCD 16x2.
Bread board.
Biến trở 10k ( tinh chỉnh độ sáng ) .

Thư viện LCD:

Thư viện LiquidCrystal là thư viện điều khiển LCD trên Arduino, nó được xây dựng để cho các bạn có thể lập trình điều khiển các module LCD ô vuông một cách nhanh chóng mà không cần phải lập trình nhiều. Thư viện này được viết để phù hợp với con IC HD44780 (con điều khiển module LCD), tuy nhiên, trên thị trường mình toàn thấy các con LCD của Trung Quốc và thư viện này vẫn hoạt động tốt. Nghĩa là, bạn chỉ cần mua module LCD về và gắn vào Arduino, nạp code là chạy được, không cần quan tâm đến IC điều khiển LCD.
  1. VSS: tương đương với GND - cực âm
  2. VDD: tương đương với VCC - cực dương (5V)
  3. Constrast Voltage (Vo): điều khiển độ sáng màn hình
  4. Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu
  5. Read/Write (RW): Bạn sẽ đọc (read mode) hay ghi (write mode) dữ liệu? Nó sẽ phụ thuộc vào bạn gửi giá trị gì vào.
  6. Enable pin: Cho phép ghi vào LCD
  7. D0 - D7: 8 chân dư liệu, mỗi chân sẽ có giá trị HIGH hoặc LOW nếu bạn đang ở chế độ đọc (read mode) và nó sẽ nhận giá trị HIGH hoặc LOW nếu đang ở chế độ ghi (write mode)
  8. Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình LCD.

Kết nối:

Ở đây mình sử dụng chế độ 4-bit để tiết kiệm  chân ở Arduino.

Demo:

Code:

#include <LiquidCrystal.h>
// khai báo thư viện LCD
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Khởi tạo chân giao tiếp
void setup() {
   lcd.begin(16, 2); // Khởi tạo LCD 16x2 
   lcd.print("Wellcome to T-HI "); // Hiển thị chuổi ký tự
}
void loop() {
  lcd.setCursor(0, 1); // Đặt con trỏ ở vị trí cột 0 dòng 1
  lcd.print(millis() / 1000); //Xuất số điếm 1s đếm một lần

}

Tổng quan:



thitech
Hướng dẫn sử dụng thư viện U8G2-Giao tiếp hiển thị Graphic LCD(GLCD)

Giới thiệu:
Chào các bạn,hôm nay chung ta sẻ tiếp tục với  thư viện đồ họa U8G2 .Mình sẻ làm một ví dụ hiển thì cơ bản lên màn hình Graphic LCD hay còn gọi tắc với tên GLCD ,bằng Arduino IDE.Ta cùng bắt đầu.
Mục tiêu cần nắm : 
Nắm được các pin out của LCD .
Cách kết nối Arduino và LCD .
Chuẩn bị : 
Arduino Uno .
LCD 16x2.
Bread board.
Biến trở 10k

Giới thiệu sơ lược:
Ở bài trước mình đã giới thiệu sơ lược về thư viện U8G2 với nhiều tính năng hỗ trợ các thiết bị khác nhau trong đó có cả GLCD.Bài viết này mình xin giới thiệu các bạn GLCD sử dụng chip KS0108 của SAMSUNG.
Graphic LCD (gọi tắt là GLCD) loại chấm không màu là các loại màn hình tinh thể lỏng nhỏ dùng để hiển thị chữ, số hoặc hình ảnh. Khác với Text LCD (Như LCD 2004, LCD 1602...), GLCD không được chia thành các ô để hiển thị các mã ASCII vì GLCD không có bộ nhớ CGRAM (Character Generation RAM). GLCD 128x64 có 128 cột và 64 hàng tương ứng có 128x64=8192 chấm (dot). Mỗi chấm tương ứng với 1 bit dữ liệu, và như thế cần 8192 bits hay 1024 bytes RAM để chứa dữ liệu hiển thị đầy mỗi 128x64 GLCD. Tùy theo loại chip điều khiển, nguyên lý hoạt động của GLCD có thể khác nhau.
Cách mắc:

Ta kết nối GLCD với Arduino theo cách sau (ở đây mình sử dụng board Arduino uno):
Hai chân A(+) và K(-) là hai chân  Anốt và Katốt của LED nền: A(+) -5V/ K(-)-GND.
Các chân điều khiển ta mắc lần lược theo sau:
Arduino
A0
A1
A2
A3
A4
8
9
10
11
GLCD
CSE1
CSE2
R_W
D_I
EN
D0
D1
D2
D3

Arduino
4
5
6
7
GLCD
D4
D5
D6
D7

Các chân VSS ,VO ,Vout mắc biến trở.
Chân VDD mắc 5v.
Code:
#include <Arduino.h> /// Khai báo thư viện
#include <U8g2lib.h>


U8G2_KS0108_128X64_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ U8X8_PIN_NONE, /* reset=*/  U8X8_PIN_NONE);
//// Chọn thiết bị hiển thị 


void setup(void) {
  u8g2.begin(); 
}
u8g2.setFont(u8g2_font_ncenB08_tr);    // Chọn Font chữ
            u8g2.drawStr(-2,10,"Welcome to"); // Hiển thị tại dòng 2 cột 10
            delay (100);
            u8g2.drawStr(2,20,"T-2 GROUP");           // Hiển thị tại dòng 2 cột 20

Demo:
Ngoài các hiển thị cơ bản như ví dụ các bạn có thể sử dụng các font hay các tính năng được thư viện đồ họa U8G2 hỗ trợ nhằm tạo ra thêm nhiều hiệu ứng theo ý muốn sáng tạo của mình.
Cảm ơn các bạn đã theo dõi bài viết nếu có sai xót mong các bạn đóng góp ý kiến để các bài viết sau mình có thể cải thiện hơn.Thân chào!


thitech Thứ Sáu, 8 tháng 6, 2018
Hướng dẫn sử dụng thư viện đồ họa U8G2-Hiển thị màn hình Oled 128x64

Giới thiệu :
Chào các bạn,hôm nay mình xin giới thiệu các bạn thư viện đồ họa U8G2.Chúng ta sẻ làm một ví dụ cơ bản hiển thị  dữ liệu trên màn hình  Oled 128x64 (ở đây mình sử dụng oled sh1106 với chuẩn giao tiếp I2C) .
Mục tiêu cần nắm:
Cách kết nối Arduino với oled ( tùy theo chuẩn giao tiếp của oled mà bạn chọn)
Các chân giao tiếp I2C của Arduino.
Giới thiệu sơ lược:
U8G2 là thư viện đồ họa đơn sắc, được hỗ trợ rất nhiều font chữ và các chức năng hình vẽ (đường /hộp /vòng tròn).
Một số thiết bị được hỗ trợ: SSD1305, SSD1306, SSD1309, SSD1322, SSD1325, SSD1327, SSD1329, SSD1606, SSD1607, SH1106, SH1107, SH1122, T6963, RA8835, LC7981, PCD8544, PCF8812, HX1230, UC1601, UC1604, UC1608, UC1610, UC1611, UC1701, ST7565, ST7567, ST7588, ST75256, NT7534, IST3020, ST7920, LD7032...
Bạn có thể down thư viện u8g2  trực tiếp từ  library manager của Arduino IDE.



Chân VCC :từ 2v2 đến 5v
Chân GND: nối đất
Chân SCL: Xung clock
Chân SLA: chân Data

Lắp mạch:
Do ở đây mình sử dụng oled 128x64 với giao tiếp i2c nên mình sẻ mắc chân SCL và SLA của Arduino với chân SCL và SLA của oled.Hai chân VCC mắc nguồn 3v3 và GND nối đất.
Code:
#include <U8x8lib.h>


#ifdef U8X8_HAVE_HW_I2C  //// Chuẩn giao tiếp
#include <Wire.h>
#endif


void setup(void)
{
   u8x8.begin(); /// Khởi tạo thư viện U8G2
}
Void loop {
u8x8.print("U8G2 LIBRARY"); //// Hiển thị
u8x8.setCursor(2,2);/// tại vị trí cột 2 dòng 2

 for( i = 10; i > 0; i-- )
  {
    u8x8.setCursor(3,3); /// cột 3 dòng 3
    u8x8.print(i);//// Xuất biến 
}

 u8x8.drawString(0, 2, "Welcome to");//// hiển thị cở chữ nhỏ tại dong 0 cột 2
  u8x8.draw2x2String(0, 3, "T2 Group"); //// hiển thị cỡ 2x2 pixel  tại dong 0 cột 3

u8x8.clearLine(r); /// xóa màn hình
}
Tổng kết:

Rất đơn giản ngoài hiển thị cơ bản  mình còn sử dụng thêm một số hiệu ứng hay chức năng vẽ mà thư viện U8G2 hỗ trợ các bạn có thể tham khảo clip sau:

Ngoài ra các bạn có thể tự do sáng tạo ra hiệu ứng cho mình dựa theo các chức năng thư viện hỗ trợ.Cảm ơn các bạn đã theo dõi ,có gì thiếu xót mong các bạn đóng góp ý kiến để mình có thể khắc phục và làm tốt hơn xin cảm ơn

thitech
Arduino giao tiếp với Button (phần 3):Một nút nhấn điều khiển 2 led đơn theo từng chế độ

Nội dung

  • Sau đây là ví dụ về điều khiển 2 led đơn bằng 1 nút nhấn.

  • Ở chế độ này thì gồm có 4 thao tác khác nhau. Ban đầu ở chế độ 1 chưa nhấn gì thì cả 2 led tắt, ở chế độ 2 khi nhấn nút led 1 sáng/led 2 tắt, ở chế độ 3 khi nhấn nút led 1 tắt/led 2 sáng, và ở chế độ cuối khi nhấn nút thì cả 2 led đều sáng rồi cứ tiếp tục 4 thao tác lặp đi lặp lại.


Về phần cứng

  1. Board mạch Arduino
  2. Nút nhấn (1 cái)
  3. Điện trở 10k ohm (1 cái) và 220 ohm(2 cái)
  4. Led đơn(2 cái)

Sơ đồ lặp mạch





Lập trình



    int switch = 5;              // nút nhấn được kết nối với pin 5

    int led1 = 8;

    int led2 = 9;

    int val;                         // đọc trạng thái pin
    int val2;                       // đọc trạng thái bị trì hoãn
    int buttonState;           // giữ trạng thái nút
    int mode = 0;              // led sẽ sáng ở chế độ nào

void setup () 
{
      pinMode(switch, INPUT);    // đặt nút nhấn làm ngỏ vào
      pinMode(led1, OUTPUT);
      pinMode(led2, OUTPUT);
      buttonState = digitalRead(switch);   // đọc trạng thái ban đầu
}

void loop ()
{
      val = digitalRead(switch);      // đọc giá trị đầu vào và lưu trữ nó trong val
      delay(10);                         // 10 mili giây là thời gian chờ
      val2 = digitalRead(switch);     // đọc lại đầu vào để kiểm tra xem có bị trả lại không
      if (val == val2) // make sure we got 2 consistant readings!
        {                 
        if (val != buttonState) // trạng thái nút đã thay đổi!
            {          
             if (val == LOW)// kiểm tra xem nút có được nhấn hay không
             {                
                     if (Mode == 0) 
                      {          
                       Mode = 1;               
                      }
               else 
               {
                     if (Mode == 1) 
                      {        
                       Mode = 2;           
                      } 
               else 
               {
                    if (Mode == 2) 
                      {      
                       Mode = 3;           
                      } 
               else 
                {
                    if (Mode == 3) 
                      { 
                       Mode = 0;          
                      }
                }
                }
                }
               }
           }
        buttonState = val;                // lưu trạng thái mới trong biến của chúng tôi
      }

      //Thiết lập các chế độ
      if (Mode == 0) 
        {                           
          digitalWrite(led1, LOW);
          digitalWrite(led2, LOW);
        }

      if (Mode == 1) 
        { 
          digitalWrite(led1, HIGH);
          digitalWrite(led2, LOW);
        }

      if (Mode == 2) 
        { 
          digitalWrite(led1, LOW);
          digitalWrite(led2, HIGH);
        }
      if (Mode == 3)  
        { 
          digitalWrite(led1, HIGH);
          digitalWrite(led2, HIGH);
        }    
}

Mô phỏng

Gồm có 4 chế độ xác lập trong lập trình:

  • Ở chế độ ban đầu thì cả 2 led đều ở mức thấp nên cả 2 đều tắt.

Chế độ 1



  • Ở chế độ 2, khi nhấn nút led 1 sáng, led 2 tắt.

Chế độ 2



  • Ở chế độ 3, khi nhấn nút led 1 tắt, led 2 sáng.

Chế độ 3



  • Ở chế độ cuối, khi nhấn nút thì cả 2 led đều ở mức cao nên cả 2 đều sáng.




Chúc các bạn thành công ở bài này! 

thitech Thứ Tư, 23 tháng 5, 2018
Pic16F887 - Điều khiển 1 led đơn bằng 2 button .

Giới thiệu :

 Hôm nay mình sẽ hướng dẫn các bạn cách điều khiển 1 led đơn bằng 2 button đơn giản ( 1 button làm led sáng , 1 button làm led tắt ) sử dụng vi điều khiển pic 16f887 . Mời các bạn theo dõi !!!

Chuẩn bị :

Pic16f887 .
Led đơn ( màu sắc tùy ý ) .
Trở : 1 con  (  để bảo vệ led ( tùy theo màu sắc led )
         1 con (1k-10k)
1 button ( 2 pin )

Lắp mạch :


 Code :

#include <16f887.h>
#fuses noprotect, nowdt, nolvp, hs, put
#use delay(clock=20Mhz)
#define bt1 pin_B0
#define bt2 pin_B1
void main()
{
  set_tris_D(0x00);
  set_tris_B(0xff);
   while(TRUE)
   {
     if(!input(bt1))
      {
        do{}
        while (!input(bt1));//chống rung cho button
        output_high(pin_D0);
     }
     if(!input(bt2))
      {
        do{}
        while (!input(bt2));
        output_low(pin_D0);
     }
   }
}

Kết quả :



Có gì thắc mắc các bạn cứ nhận xét bên dưới bài viết nhé ^^ ,
Chúc các bạn thành công .

thitech Thứ Ba, 22 tháng 5, 2018
Pic16F887 - Điều khiển 2 led đơn bằng 1 button .

Giới thiệu :

 Hôm nay mình sẽ hướng dẫn các bạn cách điều khiển 2 led đơn bằng button đơn giản sử dụng vi điều khiển pic 16f887 . Mời các bạn theo dõi !!!

Chuẩn bị :

Pic16f887 .
2 Led đơn ( màu sắc tùy ý ) .
Trở : 2 con  (  để bảo vệ led ( tùy theo màu sắc led )
         1 con (1k-10k)

Lắp mạch :


 Code :

#include <16f887.h>
#fuses noprotect, nowdt, nolvp, hs, put
#use delay(clock=20Mhz)
#define button pin_B0
int8 i; // khai báo biến i
void main()
{
   set_tris_D(0x00);//khởi tạo port D xuất mức thấp
   set_tris_B(0xff);//khởi tạo port B xuất mức cao
   while(TRUE)//vòng lặp
   {
   i=0;//cho ban đầu i=0
      if(!input(button))// kiểm tra trạng thái button
      {
        do{}// chống rung
         while (!input(button));// bấm rồi nhả ra mới tăng giá trị biến i
         i++;
         if(i==4)// nếu i=4 cho i quay về 0
         {
           i=0;
         }
        delay_ms(5);
        if(i==0)
        {
          output_low(pin_D0);
          output_low(pin_D1);
        }
         if(i==1)
        {
          output_high(pin_D0);
          output_low(pin_D1);
        }
         if(i==2)
        {
          output_high(pin_D1);
          output_low(pin_D0);
        }
         if(i==3)
        {
          output_high(pin_D0);
          output_high(pin_D1);
        }
      }
   }

}

Kết quả :

Có gì thắc mắc các bạn cứ nhận xét bên dưới bài viết nhé ^^ ,
Chúc các bạn thành công .

thitech