Tự động hóa

Arduino: cấu trúc rẽ nhánh switch - case

 Giống như if, switch / case cũng là một dạng lệnh nếu thì, nhưng nó được thiết kế chuyên biệt để bạn xử ý giá trị trên một biến chuyên biệt.

Ví dụ, bạn có một biến là action sẽ nhận trị từ những module khác qua serial. Nhưng action sẽ nằm trong một các giá trị nào đó thì lúc này bạn hãy sử dụng switch / case

switch (var) {
  case label1:
    // statements
    break;
  case label2:
    // statements
    break;
  default:
    // statements
    break;
}
Giờ ta đi vào ví dụ nhé. Lại đèn sáng nhấp nháy cho dễ đọc code. 

Bài 1: dùng một nút nhấn, điều khiển 4 đèn led. Mỗi khi nhấn, thì một đèn sáng. 

int ledPIN1 = 8;
int ledPIN2 = 9;
int ledPIN3 = 10;
int ledPIN4 = 11;
int buttonPIN = 2;
int beginStatusButton = 1;
int currentStatusButton;
int dem;

void setup() {
    Serial.begin(9600);
    pinMode(ledPIN1, OUTPUT);
    pinMode(ledPIN2, OUTPUT);
    pinMode(ledPIN3, OUTPUT);
    pinMode(ledPIN4, OUTPUT);
    pinMode(buttonPIN, INPUT_PULLUP);
}

void loop() {
    currentStatusButton = digitalRead(buttonPIN);
    if ( currentStatusButton != beginStatusButton )
    {
        if (currentStatusButton == 0)
        {
            dem+=1;
        }
        beginStatusButton = currentStatusButton;
        
    }
    Serial.println(dem);

    // Xác định các trường hợp nút nhấn. 
    // Chỗ này có thể viết bằng IF.
    switch (dem)
    {
    case 0 :
        digitalWrite(ledPIN1, HIGH);
        digitalWrite(ledPIN2, HIGH);
        digitalWrite(ledPIN3, HIGH);
        digitalWrite(ledPIN4, HIGH);
        
        break;
    case 1 :
        digitalWrite(ledPIN1, LOW);
        digitalWrite(ledPIN2, HIGH);
        digitalWrite(ledPIN3, HIGH);
        digitalWrite(ledPIN4, HIGH);
        break;
    case 2 :
        digitalWrite(ledPIN2, LOW);
        digitalWrite(ledPIN1, HIGH);
        digitalWrite(ledPIN3, HIGH);
        digitalWrite(ledPIN4, HIGH);
        break;
    case 3 :
        digitalWrite(ledPIN3, LOW);
        digitalWrite(ledPIN1, HIGH);
        digitalWrite(ledPIN2, HIGH);
        digitalWrite(ledPIN4, HIGH);
        break;
    case 4 :
        digitalWrite(ledPIN4, LOW);
        digitalWrite(ledPIN1, HIGH);
        digitalWrite(ledPIN2, HIGH);
        digitalWrite(ledPIN3, HIGH);
        break;
    case 5 :
        dem = 0;
        break;
    
    default:
        break;
    }
    
}

Bài này thì cơ bản rồi, ta chỉ có cái mới là có sự xuất hiện của switch và case. 
- switch (dem): tức là xét biến đếm (dem)
- case 1: tức là so sánh biến dem có bằng 1 hay không. Nếu bằng 1 thì thực hiện lệnh dưới trong case,
nếu sai thì thoát ra break chuyển sang case 2.

About Mr. Facebook

0 nhận xét:

Đăng nhận xét