Arduino UNO R4 DIP Switch

DIP (Dual In-line Package) switch thường được sử dụng trong điện tử để thiết lập cấu hình thiết bị, như cài đặt địa chỉ hoặc bật/tắt các tính năng. Trong hướng dẫn này, chúng ta sẽ học cách sử dụng DIP switch với Arduino UNO R4. Chúng ta sẽ tìm hiểu:

Arduino UNO R4 với dip switch

Linh Kiện Cần Thiết

1×Arduino UNO R4 WiFi hoặc Arduino UNO R4 Minima
1×(Tùy chọn) DIYables STEM V4 IoT, tương thích với Arduino Uno R4 WiFi
1×Arduino UNO R4 Minima (Thay thế)
1×Cáp USB Type-C
1×DIP Switch
1×breadboard
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4
1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
1×(Khuyến nghị) Enclosure for Arduino UNO R4
1×(Khuyến nghị) Power Splitter for Arduino UNO R4
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V4 IoT Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về DIP Switch

DIP switch chủ yếu được sử dụng để cấu hình thiết bị, cho phép người dùng điều chỉnh các cài đặt như địa chỉ thiết bị, tùy chọn truyền thông, mã bảo mật, chế độ hoạt động, và các tùy chọn hệ thống cho các ứng dụng và ngành công nghiệp khác nhau.

DIP switch bao gồm nhiều công tắc trượt nhỏ được kết hợp thành một đơn vị. Mỗi công tắc trượt được gọi là một "vị trí". Có nhiều loại DIP switch khác nhau, mỗi loại có số lượng vị trí cụ thể như 2, 4, 5, 6, 8, hoặc 10.

DIP switch có thể được thiết lập để biểu diễn các số khác nhau. Mỗi vị trí công tắc kết nối với một bit trong số đó. Bằng cách chuyển đổi các vị trí này ON hoặc OFF, chúng ta có thể chọn số mà chúng ta cần.

Sơ Đồ Chân

sơ đồ chân dip switch
image source: diyables.io

DIP switch có hai hàng chân. Số lượng chân trong mỗi hàng tương ứng với số lượng vị trí công tắc. Ví dụ, trong DIP switch 4 vị trí, có tổng cộng 8 chân, với 4 chân ở mỗi bên. Mỗi cặp chân đối diện nhau tạo thành một công tắc trượt. Điều quan trọng cần lưu ý là không quan trọng chân nào ở bên nào vì các chân có thể hoán đổi cho nhau.

Cách Hoạt Động

Khi DIP switch ở trạng thái ON, nó đóng. Điều này cho phép điện chạy qua công tắc.

Khi công tắc ở trạng thái OFF, nó mở. Điều này có nghĩa là kết nối điện bị ngắt và không có dòng điện nào có thể chạy qua công tắc.

Để làm rõ:

  • Vị trí ON: Mạch đóng, dòng điện có thể đi qua.
  • Vị trí OFF: Mạch mở, dòng điện không thể đi qua.

Khi bạn kết nối một bên của công tắc với GND và bên kia với chân Arduino UNO R4, và thiết lập chân Arduino UNO R4 làm đầu vào digital pull-up, bảng dưới đây hiển thị mối quan hệ giữa vị trí công tắc và các giá trị đọc từ Arduino UNO R4.

Vị trí DIP switchBiểu diễn nhị phânTrạng thái mạchTrạng thái chân Arduino UNO R4
ON1ĐÓNGLOW
OFF0MỞHIGH

Trong các phần sau, chúng ta sẽ sử dụng DIP switch 4 vị trí làm ví dụ. Bạn cũng có thể điều chỉnh cho DIP switch 2 vị trí, 3 vị trí, 5 vị trí, 6 vị trí, 8 vị trí, và 10 vị trí.

Sơ Đồ Kết Nối

sơ đồ kết nối Arduino UNO R4 dip switch

This image is created using Fritzing. Click to enlarge image

Code Arduino UNO R4 - DIP Switch

Chúng ta sẽ khám phá việc sử dụng hai ví dụ code:

  • Kiểm tra trạng thái ON hoặc OFF của mỗi công tắc.
  • Chuyển đổi các vị trí công tắc này thành một số.

Code Arduino UNO R4 - Đọc trạng thái ON/OFF của DIP switch

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino-uno-r4/arduino-uno-r4-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // initialize serial communication Serial.begin(9600); // set the dip switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { // Read the state of each switch position for (int i = 0; i < POSITION_NUM; i++) { Serial.print("position "); Serial.print(i + 1); Serial.print(": "); int state = digitalRead(SWITCH_PINS[i]); if (state == ON) Serial.println("ON "); else Serial.println("OFF "); } Serial.println(); // add a delay to prevent rapid readings delay(500); }

Các Bước Nhanh

Làm theo hướng dẫn từng bước sau:

  • Nếu đây là lần đầu tiên bạn sử dụng Arduino Uno R4 WiFi/Minima, hãy tham khảo hướng dẫn về Arduino UNO R4 - Cài Đặt Phần Mềm.
  • Kết nối các linh kiện theo sơ đồ được cung cấp.
  • Kết nối bo mạch Arduino Uno R4 với máy tính của bạn bằng cáp USB.
  • Khởi chạy Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
  • Làm theo sơ đồ kết nối được cung cấp.
  • Kết nối Arduino UNO R4 với máy tính của bạn bằng cáp USB.
  • Khởi chạy phần mềm Arduino IDE.
  • Chọn đúng board và port.
  • Nhấn nút Upload trong Arduino IDE để gửi code đến Arduino UNO R4.
  • Bật từng công tắc của DIP Switch một cách lần lượt.
  • Kiểm tra kết quả trên Serial Monitor.
COM6
Send
position 1: OFF position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: ON position 4: OFF position 1: ON position 2: ON position 3: ON position 4: ON
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code Arduino UNO R4 - Mã hóa trạng thái DIP switch thành một số

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino-uno-r4/arduino-uno-r4-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the dip switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // Initialize serial communication Serial.begin(9600); // Set the DIP switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { int encoded_state = 0; for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) encoded_state |= 1 << (POSITION_NUM - i - 1); } Serial.print("encoded state: "); Serial.println(encoded_state); // add a delay to prevent rapid readings delay(500); }

Các Bước Nhanh

Làm theo hướng dẫn từng bước sau:

  • Nếu đây là lần đầu tiên bạn sử dụng Arduino Uno R4 WiFi/Minima, hãy tham khảo hướng dẫn về Arduino UNO R4 - Cài Đặt Phần Mềm.
  • Kết nối các linh kiện theo sơ đồ được cung cấp.
  • Kết nối bo mạch Arduino Uno R4 với máy tính của bạn bằng cáp USB.
  • Khởi chạy Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
  • Upload code lên Arduino UNO R4.
  • Bật từng công tắc trên DIP switch một cách lần lượt.
  • Kiểm tra Serial Monitor để xem kết quả, sẽ xuất hiện như sau.
COM6
Send
encoded state: 0 encoded state: 1 encoded state: 2 encoded state: 3 encoded state: 4 encoded state: 5 encoded state: 6 encoded state: 7 encoded state: 8 encoded state: 9 encoded state: 10 encoded state: 11 encoded state: 12 encoded state: 13 encoded state: 14 encoded state: 15
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Lưu ý rằng giá trị thay đổi dựa trên vị trí của từng công tắc trượt. Bảng dưới đây hiển thị cách các vị trí ON/OFF tương ứng với các giá trị số nguyên cho DIP switch 4 vị trí:

Vị trí-1Vị trí-2Vị trí-3Vị trí-4Giá trị nhị phânGiá trị thập phân
OFF OFF OFF OFF 0000 0
OFF OFF OFF ON 0001 1
OFF OFF ON OFF 0010 2
OFF OFF ON ON 0011 3
OFF ON OFF OFF 0100 4
OFF ON OFF ON 0101 5
OFF ON ON OFF 0110 6
OFF ON ON ON 0111 7
ON OFF OFF OFF 1000 8
ON OFF OFF ON 1001 9
ON OFF ON OFF 1010 10
ON OFF ON ON 1011 11
ON ON OFF OFF 1100 12
ON ON OFF ON 1101 13
ON ON ON OFF 1110 14
ON ON ON ON 1111 15

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.