Arduino cơ bản 1: Chớp tắt LED trên Arduino Uno

Trong bài viết hôm nay mình xin giới thiệu với các bạn cách chớp tắt Led trên Arduino Uno.

Và cách tạo một biến ra sao, cách thức làm việc của các hàm trên Arduino IDE.

Code ví dụ chớp tắt Led

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
*/
// Pin 10 has an LED connected on most Arduino boards.
// give it a name:
int ledPin = 10;
// the setup routine runs once when you press reset:
void setup() {
        // initialize the digital pin as an output.
        pinMode(ledPin, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
        digitalWrite(ledPin,HIGH);        // turn the LED on (HIGH is the voltage level)
        delay(1000);                      // wait for a second
        digitalWrite(ledPin,LOW);         // turn the LED off by making the voltage LOW
        delay(1000);                      // wait for a second
}

Giải thích Code

Comment

Trong Arduino bạn sẽ bắt gặp 2 dạng comment: Comment đơn dòng và đa dòng

  • Comment theo kiểu đa dòng

Mở đầu bằng /* và kết thúc */ ở dạng comment này không giới hạn ký tự và số dòng.

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
  
  This example code is in the public domain.
*/
  • Comment theo kiểu đơn dòng

Mở đầu bằng // và kéo dài cho tới cuối dòng

digitalWrite(ledPin,HIGH);        // turn the LED on (HIGH is the voltage level)

Kiểu số nguyên int 

int ledPin = 10;
Kiểu dữ liệuĐộ rộng bitDãy giá trị
int (số nguyên) 2 byte (16bit)-32,768 đến 32,767
  • ledPin = 10: Là tên biến (ở đây bạn có thể đặt tên gì mà bạn mong muốn, tốt nhất là các bạn đặt theo tên của chức năng để dễ dàng nhớ khi code. Ở đây mình kết nối LED vào chân số 10 trên Arduino UNO).
  • Kết thúc khai báo bằng dấu (;): Trong trường hợp bạn không có (;) thì trình biên dịch sẽ báo lỗi.

Hàm setup()

void setup() {}

Hàm setup() được Arduino đọc khi bắt đầu khởi động. Nó dùng để khởi tạo biến, khởi tạo thư viện và thiết lập thông số.

Hàm setup() chỉ chạy một lần khi bật nguồn hoặc reset lại chương trình.

pinMode

pinMode(ledPin, OUTPUT);
  • “pinMode”: Cấu hình quy định hoạt động của một chân như là một đầu vào (INPUT) hoặc đầu ra (OUTPUT).
  • “Pin”: Là chân mà bạn muốn đặt.
  • “Mode”: INPUT, OUTPUT hoặc INPUT_PULLUP.

Vòng lặp

void loop() {}

Sau khi hàm 

setup () chạy xong, những lệnh trong vòng 

loop () sẽ thực hiện và chúng sẽ lặp đi lặp lại cho đến khi Arduino bị ngắt nguồn hoặc reset lại chương trình.

digitalWrite(ledPin,HIGH);        // turn the LED on (HIGH is the voltage level)

digitalWrite ghi giá trị mức “CAO” (bật) hoặc mức “THẤP” (tắt) vào chân được cấu hình. Nếu chân được cấu hình là OUTPUT bởi pinMode, thì điện áp của nó sẽ tương ứng với giá trị được đặt: 5V (hoặc 3.3V trên bo là 3.3V) là mức “CAO”, 0V là mức “THẤP”.

Delay()

delay(1000);                      // wait for a second
  • delay(): Tạm dừng chương trình trong khoảng thời gian chỉ định (được tính bằng mili giây) và ở đây (1000 mili giây sẽ bằng 1 giây).

Mối quan hệ của pinMode, digitalWrite và digitalRead

Nếu 

pinMode() cấu hình điều khiển là đầu vào (INPUT), bạn nên sử dụng hàm 

digitalRead(). Nếu chân cấu hình là đầu ra (OUTPUT), bạn nên sử dụng hàm 

digitalWrite().

LED, Buzzer Button
pinMode(pin,OUTPUT)pinMode(pin,INPUT)
digitalWrite(pin,HIGH/LOW)digitalRead(pin)

Sơ đồ đấu nối

Các ví dụ tương tự

Example 1

//The first project -- S.O.S signal

int ledPin = 10;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // 3 quick blinks to represent “S”
  digitalWrite(ledPin,HIGH);
  delay(150);
  digitalWrite(ledPin,LOW);
  delay(100);

  digitalWrite(ledPin,HIGH);
  delay(150);
  digitalWrite(ledPin,LOW);
  delay(100);

  digitalWrite(ledPin,HIGH);
  delay(150);
  digitalWrite(ledPin,LOW);
  delay(100);

  delay(100); //100 milliseconds as a break of each letter

  //3 quick blinks to represent “0”
  digitalWrite(ledPin,HIGH);
  delay(400);
  digitalWrite(ledPin,LOW);
  delay(100);

  digitalWrite(ledPin,HIGH);
  delay(400);
  digitalWrite(ledPin,LOW);
  delay(100);

  digitalWrite(ledPin,HIGH);
  delay(400);
  digitalWrite(ledPin,LOW);
  delay(100);

  delay(100);
  // 100 milliseconds delay between each letter

  //3 quick blinks to represent “S” again
  digitalWrite(ledPin,HIGH);
  delay(150);
  digitalWrite(ledPin,LOW);
  delay(100);

  digitalWrite(ledPin,HIGH);
  delay(150);
  digitalWrite(ledPin,LOW);
  delay(100);

  digitalWrite(ledPin,HIGH);
  delay(150);
  digitalWrite(ledPin,LOW);
  delay(100);

  delay(5000); // wait 5 seconds to repeat the next S.O.S.Sssigignnaal
}

Trong ví dụ 1 mình chia chương trình thành 3 khối để thực hiện nháy LED và chương trình được viết khá dài và không logic, công việc bây giờ là làm sao tối ưu chương trình trên. Mình đã viết thêm một đoạn tối ưu hơn các bạn xem ở ví dụ 2.

Example 2

/*
   SOS Beacon   
*/
int ledPin = 10;
void setup() {
        pinMode(ledPin, OUTPUT);
}
void loop() {
       // S (...) three dot represents "S".
       for(int x=0;x<3;x++){
        digitalWrite(ledPin,HIGH);            // turn the LED on (HIGH is the voltage level)
        delay(150);                           // wait for 150ms
        digitalWrite(ledPin,LOW);             // turn the LED off by making the voltage LOW
        delay(100);                           // wait for 100ms
        }
       
        // wait for 100ms
        delay(100);

        //O(---) three dash represents "O".
       for(int x=0;x<3;x++){
        digitalWrite(ledPin,HIGH);            // turn the LED on (HIGH is the voltage level)
        delay(400);                           // wait for 400ms
        digitalWrite(ledPin,LOW);             // turn the LED off by making the voltage LOW
        delay(100);                           // wait for 100ms
        }

        // wait for 100ms
        delay(100);

       // S (...) three dot represents "S".
       for(int x=0;x<3;x++){
        digitalWrite(ledPin,HIGH);            // turn the LED on (HIGH is the voltage level)
        delay(150);                           // wait for 150ms
        digitalWrite(ledPin,LOW);             // turn the LED off by making the voltage LOW
        delay(100);                           // wait for 100ms
        }

        // wait for 5s
        delay(5000);
}

Vòng lặp for

Vòng lặp for là một cấu trúc điều khiển lặp đi lặp lại cho phép bạn viết một vòng lặp một cách hiệu quả, khi cần thực hiện trong một khoảng thời gian cụ thể nào đó.

 for(int x=0;x<3;x++){
        digitalWrite(ledPin,HIGH);            // turn the LED on (HIGH is the voltage level)
        delay(150);                           // wait for 150ms
        digitalWrite(ledPin,LOW);             // turn the LED off by making the voltage LOW
        delay(100);                           // wait for 100ms
       }

Cú pháp của vòng lặp for

for(bien ; dieu_kien ; tang_giam){
cac_lenh;}    

Quy trình thực hiện

Bước 1: Khởi tạo giá trị biến x = 0

Bước 2: Kiểm tra điều kiện x < 3.

Bước 3: Nếu điều kiện thỏa mãn thì thực hiện các câu lệnh.

Bước 4: Giá trị tăng lên x = 2.

Bước 5: Lặp lại bước 2. 

Bước 6: Lặp lại bước 3.

Cho đến khi x = 3, không còn thỏa mãn điều kiện x < 3 thì chương trình sẽ bỏ qua các câu lệnh và thực hiện các đoạn mã tiếp theo.

Ở đây mình đặt điều kiện x < 3 có nghĩa là sẽ lặp lại 3 lần. Tính từ 0 đến 2.

Toán tử so sánh

Các toán tử so sánh thường được sử dụng với các lệnh điều kiện trong chương trình.

== (so sánh bằng)

!= (khác bằng)

< (bé hơn)

> (lớn hơn)

<= (bé hơn hoặc bằng)

>= (lớn hơn hoặc bằng)

Scroll to Top