PDA

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



CKD
13-03-2015, 03:28:41 PM
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 :D
- 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
http://arduino.cc/en/uploads/Tutorial/ExampleCircuit_bb.png

http://arduino.cc/en/uploads/Tutorial/ExampleCircuit_sch.png

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

CKD
13-03-2015, 03:28:54 PM
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 //

nhatson
13-03-2015, 09:06:09 PM
lan gthang gập cái này, ko biết post đâu, cụ ckd cho em ké nhé


https://www.youtube.com/watch?v=Z6OMT1fIQnU


https://www.youtube.com/watch?v=eOvNkMFb-8s&feature=iv&src_vid=Z6OMT1fIQnU&annotation_id=annotation_1947366235

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