Tự động hóa

Arduino thực hành: phân biệt giữa biến, trạng thái biến ...

 Chào các bạn, có thể các bạn không bị nhầm như tôi. Nhưng do bài viết này tôi viết khi còn đang là zero, gà về lập trình, nên tôi hay bị nhầm lẫn. Vì vậy tôi viết ra bài viết này để những bạn nhầm như tôi có thể hiểu rõ hơn và nắm chắc kiến thức hơn, để bạn có thể đi xa hơn trong lập trình. Rồi giờ chúng ta đi thẳng vào vấn đề. 

Vẫn là ví dụ led chớp tắt nhé. Cho đơn giản

Bạn gõ code sau:

#include <Arduino.h>
//Bai Tap Led chop tat
  int led =  13;
  int trangthailed;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(led, OUTPUT); // Cài đặt chân 13 thành output
  digitalWrite(led, LOW);
}

void loop() {
  digitalWrite(led, LOW);
  delay(500);
  digitalWrite(led, HIGH);
  delay(500);
    Serial.print(String("Kết quả in ra biến led là :")+led);
    Serial.print("\n");
    delay(500);
}

Bạn sẽ thấy đèn sẽ nhấp nháy, và mở màn hình serial Monitor, Kết quả in ra biến led là : 13. Và tôi cá với bạn nếu ở dòng đầu int bạn khai báo int led = 8, thì kết quả in ra biến led cũng là 8. Vậy tức là biến led nó sẽ in ra cái chân Digital mà bạn đã khai báo ở đầu. 

Giờ thử một câu hỏi dở hơi nhé, thực ra lúc viết bài này tôi còn GÀ lắm, nên tôi cứ đặt ra các câu hỏi lung tung, nhằm cũng cố kiến thức của mình. Nếu tôi gán một biến mới "trangthailed" thì nó sẽ ra cái quái gì. Uhm nói là làm tôi thử thêm dòng code này nhé

    trangthailed = digitalRead(led);
    Serial.print(String("In ra biến trạng thái led trangthailed là :")+trangthailed);
    Serial.print("\n");

Ồ, vậy không biết nó có in ra 13 không nhỉ, vì trangthailed = đọc chân led mà.Và sau khi nạp code xong Kết quả màn hình in ra là: 

In ra biến trạng thái led trangthailed là : 0

Ở đây ta đặt câu hỏi, tại sao trangthailed = digitalRead(led) mà lại ko phải bằng 13 như ở trên. Lý do digitalRead là kết quả khi đọc chân led. Mà kết quả khi đọc chân thì chỉ có 1 hoặc 0. Còn ví dụ đầu tiên tôi cho "in ra biến led" nên kết quả sẽ là 13. Đó là điều hiển nhiên với những bạn đã cứng code, nhưng người mới thì sẽ dễ bị nhầm lẫn giữa hai cái này. Biến và trạng thái chân biến.


Rồi giờ hiểu rồi, chạy thử code này ra và đoán kết quả ở màn hình monitor nhé, Tôi tin là bạn sẽ không bị nhầm lẫn như tôi nữa đâu. Chúc thành công.

#include <Arduino.h>
//Bai Tap Led chop tat
  int led =  13;
  int trangthailed;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(led, OUTPUT); // Cài đặt chân 13 thành output
  digitalWrite(led, 1);
   Serial.print(String("Hàm setup In ra trạng thái đèn led là : ")+digitalRead(led));
  Serial.print("\n");
  delay(500);
}

void loop() {
  trangthailed = digitalRead(led);
  digitalWrite(led, 1);
  Serial.print(String("Hàm loop in ra LED sáng  ")+digitalRead(led));
  Serial.print("\n");
  delay(500);
  digitalWrite(led, 0);
  Serial.print(String("Hàm loop in ra LED tối  ")+digitalRead(led));
  Serial.print("\n");
  delay(500);
  Serial.print(String("Hàm Loop in ra biến Led :  ")+led);
  Serial.print("\n");
   Serial.print(String("Hàm loop in ra biến trạng thái :  ")+ trangthailed);
  Serial.print("\n");

}

Định kết thúc bài viết, mà nhớ ra, nên note cho các bạn cái hay ho ở ý đồ tôi viết. Tại sao ở hàm void setup tôi lại cho in ra một dòng : Hàm setup In ra trạng thái đèn led là :  . Nó có ý đồ cả đấy:

Khi đọc kết quả dòng code trên ở monitor bạn sẽ thấy: "Hàm setup In ra trạng thái đèn led là "
Nó chỉ hiển thị một lần duy nhất, sau đó nó vào hàm loop. Và đúng như vậy, nếu ai đã học cơ bản, sẽ biết, hàm setup (chỉ để khai báo chân, và gán giá trị cho biến ban đầu). Nó sẽ chỉ chạy DUY NHẤT MỘT LẦN và sau đó chạy vào hàm loop lặp mãi mãi, không bao giờ gặp lại em setup nữa. 

Rồi kết thúc bài học siêu siêu cơ bản ở đây. Hẹn gặp lại bạn ở các bài sau nhé.

About Mr. Facebook

0 nhận xét:

Đăng nhận xét