# Máy, thiết bị và sản phẩm khác > Điện - Điện tử - Tự động hóa > Arduino >  Arduino - Mỗi ngày một ví dụ, từ dễ tới khó - VD001 -  LED Blink

## CKD

Arduino - Mỗi ngày một ví dụ, từ dễ tới khó - VD001 - LED Blink

Để bắt đầu làm quen với Arduino chúng ta sẽ đi từ những ví dụ dễ rồi khó dần. Thông quá đó chúng ta sẽ nắm được các cú pháp, các hàm..
Việc lập trình trên Arduino khá đơn giản, chỉ là việc kết nối các hàm lại với nhau. Người sử dụng không cần quan tâm nhiều đến các phần cứng như vi xử lý (VXL), cấu trúc VXL, tốc độ dao động, các cổng kết nối (PORT), RAM, ROM, EPROM v.v... Điều đó đẫn đến việc tiếp cận & xử dụng một cách dễ dàng.. dù trước đó người dùng không biết gì về điện thì theo các hướng dẫn sẽ dần có thể thực hiện được một cách nhanh chóng.

Đương nhiên.. việc xây dựng nhiều hàm & thư viện tương thích với rất nhiều VXL có nền tảng khác nhau.. nên Arduino có nhiều ưu điểm, song song đó cũng có nhiều nhược điểm. CKD tạm kết thế này:
*Ưu*
- Cái đáng nói nhất là đơn giản hóa quá trình xử dụng cũng như lập trình. Cắm là chạy  :Big Grin: 
- Cộng đồng dùng arduino rất đông, có rất nhiều ví dụ được chia sẽ trên internet, phần lớn đều có dưới dạng mã nguồn mở.
- Thư viện ứng dụng cũng rất nhiều.. có thể ứng dụng được trong hầu hết các yêu cầu dân dụng trong cuộc sông, cũng như các vấn đề điều khiển tự động trong các máy đơn giản. Có thể điều khiển robot, cnc, smart home v.v...

*Nhược*
- Cái nhược duy nhất theo CKD đánh giá là từ việc tương thích rất mạnh trên phần cứng dẫn đến tốc độ làm việc chậm. Việc này có thể khắc phục được nếu người dùng hiểu rỏ về C/C+/C# v.v... cũng như am hiểu về cấu trúc VXL.

Để bắt đầu làm quen chúng ta sẽ xem qua *Ví dụ chớp LED* (LED Blink) có sẵn trong trình IDE Arduino.
_Nhiệm vụ:
Viết một đoạn Code trong Arduino để thực hiện việc tắt/ mở đèn LED (Light Emitting Diode) một cách có chu kỳ (chớp)

Đấu nối


_

*Mã (code/source) chương trình*


```
// cac xac lap cho chuong trinh
void setup()
{
  // Chon chan 13 làm Output.
  pinMode(13, OUTPUT);
}

// chuong trinh chinh thuc hien viec chop LED
void loop()
{
  // mo LED, chan 13 se co muc cao (HIGHT)
  digitalWrite(13, HIGH);
  // cho 1000ms ~ 1s
  delay(1000);
  // tat LED, chan 13 se co muc thap (LOW)
  digitalWrite(13, LOW);
  // cho 1000ms ~ 1s
  delay(1000);
}
```

Trong phần này chúng ta sẽ phần tích dần cấu trúc chương trình.
Phần thân chương trình được chia làm 02 phần
*Phần 01, khởi động chương trình*
*void setup()
{*
  [nội dung]
*}*

Trong phần này, chúng ta có thể khai báo các chân làm nhiệm vụ nhận hoặc phát tín hiệu (input/output), hoặc các chức năng đọc tín hiệu tương tự (analog - ADC), tính năng PWM v.v....
Trong phần này cũng có thể khai báo các biến để lưu dữ liệu trong quá trình chương trình làm việc.

*Phần 02, thân chương trình*
*void loop()
{*
  [nội dung]
*}*

Phần này sẽ mô tả cũng như cách thức mà chương trình làm việc. Nó sẽ thực hiện tuần tự các dòng lệnh [nội dung] xong sẽ tự động chạy lại các dòng lệnh [nội dung] mỗi khi kết thức.

Ghi chú:
- Phần *tô đậm, màu đỏ* là bắt buộc.
- Phần trong ngoặt vuông [..] là tùy chọn, có hoặc không cũng được tùy theo mục đích xử dụng.
- Ngoài ra trong ví dụ này chúng ta không cần đấu nối thêm LED & điện trở từ bên ngoài vẫn có thể thấy được mạch hoạt động thế nào. Trên board đã có sẵn LED ký hiệu là *L*, đã được kết nối vào chân 13 rồi.

Xem thêm: http://arduino.cc/en/tutorial/blink

----------

anhcos, cuong, nhatson

----------


## CKD

Trở lại với phần code/source chương trình


```
// cac xac lap cho chuong trinh
void setup()
{
  // Chon chan 13 làm Output.
  pinMode(13, OUTPUT);
}

// chuong trinh chinh thuc hien viec chop LED
void loop()
{
  // mo LED, chan 13 se co muc cao (HIGHT)
  digitalWrite(13, HIGH);
  // cho 1000ms ~ 1s
  delay(1000);
  // tat LED, chan 13 se co muc thap (LOW)
  digitalWrite(13, LOW);
  // cho 1000ms ~ 1s
  delay(1000);
}
```

Ngoài phần thân chương trình *void setup* và *void loop* như đã nói.. ta thấy thêm phần nội dung có dùng các lệnh:

ta thấy lệnh *pinMod(13, OUTPUT)* là lệnh cho Arduino biết dùng chân nào làm chức năng vào/ra (input/output) dữ liệu.
có cú pháp tổng quát

*pinMode(pin, mode)*
Trong đó:
- *pin* là số thứ tự chân cần dùng, với Arduino UNO thì x từ 0..13, A0..A5
- *mode* là chế độ hoạt động vào là *INPUT* hoặc ra là *OUTPUT*

ta thấy lệnh *digitalWrite(13, HIGHT)* là lệnh cho Arduino biết xuất 1 tín hiệu mức cao hoặc thấp (ON/OFF) ra một chân nào đó.
có cú pháp tổng quát
*digitalWrite(pin, value)*
Trong đó:
- *pin* là số thứ tự chân cần dùng, với Arduino UNO thì x từ 0..13, A0..A5
- *value* là trạng thái mong muốn cao hoặc thấp (ON/OFF), tương ứng mức thấp là *LOW*, mức cao là *HIGHT*

ta thấy lệnh *delay(value)* là lệnh cho Arduino biết xuất cần phải dừng lại chờ một khoảng thời gian rồi mới làm việc tiếp.
có cú pháp tổng quát
*delay(value)*
Trong đó:
- *value* là giá trị thời gian phải chờ dưới dạng số nguyên. Đơn vị được tính là mili giây (ms). Khi thực hiện VD các bạn có thể thay đổi giá trị này & xem hiệu ứng chớp LED để hiểu thêm.

ta thấy các *ghi chú* được thể hiện trong phần nội dung. Khởi đầu các ghi chú là dấu *//*

----------

anhcos, cuong, Luyến, nhatson, zentic

----------


## nhatson

lan gthang gập cái này, ko biết post đâu, cụ ckd cho em ké nhé







source code
https://github.com/neuroprod/ClosedLoopDriver

----------

CKD, cuong, zentic

----------

