- Vật liệu cần thiết:
- Sơ đồ mạch:
- Giải thích lập trình:
- Thiết lập phần cứng cho chuỗi đèn LED nhấp nháy:
- Tải lên và làm việc:
Đây là hướng dẫn thứ hai trong chuỗi hướng dẫn mà chúng ta đang học về MSP430G2 LaunchPad từ Texas Instruments bằng cách sử dụng Energia IDE. Trong hướng dẫn Blinky LED cuối cùng, chúng tôi đã giới thiệu bản thân của mình với LaunchPad Development Board và Energia IDE, chúng tôi cũng đã tải lên chương trình đầu tiên của chúng tôi là nhấp nháy đèn LED trên bo mạch theo một khoảng thời gian đều đặn.
Trong hướng dẫn này, chúng ta sẽ học cách sử dụng tùy chọn Digital Read và Digital Write để đọc trạng thái của thiết bị đầu vào như công tắc và điều khiển nhiều đầu ra như đèn LED. Vào cuối hướng dẫn này, bạn sẽ học cách làm việc với Đầu vào và đầu ra Kỹ thuật số, có thể được sử dụng để giao tiếp với nhiều cảm biến kỹ thuật số như cảm biến IR, cảm biến PIR, v.v. và cũng có thể bật hoặc tắt các đầu ra như LED, Buzzer, v.v. Nghe thú vị đúng!!? Bắt đầu nào.
Vật liệu cần thiết:
- MSP430G2 LaunchPad
- Đèn LED bất kỳ màu nào - 8
- Chuyển đổi - 2
- Điện trở 1k - 8
- Kết nối dây
Sơ đồ mạch:
Trong hướng dẫn trước của chúng tôi, chúng tôi nhận thấy rằng bản thân bệ phóng đi kèm với hai đèn LED và một công tắc trên bảng. Nhưng trong hướng dẫn này, chúng tôi sẽ cần nhiều hơn thế, vì chúng tôi dự định phát sáng tám đèn LED theo trình tự khi một nút được nhấn. Chúng tôi cũng sẽ thay đổi trình tự khi một nút khác được nhấn chỉ để làm cho nó thú vị. Vì vậy, chúng ta phải xây dựng một mạch với 8 đèn LED và hai công tắc, sơ đồ mạch đầy đủ có thể được tìm thấy bên dưới.
Ở đây 8 LED là đầu ra và hai công tắc là đầu vào. Chúng tôi có thể kết nối chúng với bất kỳ chân I / O nào trên bo mạch nhưng tôi đã kết nối LRD từ chân P1.0 đến P2.1 và chuyển 1 và 2 sang chân P2.4 và P2.3 tương ứng như hình trên.
Tất cả các chân cực âm của đèn LED được gắn với đất và chân cực dương được kết nối với các chân I / O thông qua một điện trở. Điện trở này được gọi là điện trở giới hạn dòng, điện trở này không bắt buộc đối với MSP430 vì dòng điện tối đa mà chân I / O có thể cấp chỉ là 6mA và điện áp trên chân chỉ là 3.6V. Tuy nhiên, đó là một thực hành tốt để sử dụng chúng. Khi bất kỳ chân kỹ thuật số nào trong số này tăng cao, đèn LED tương ứng sẽ bật. Nếu bạn có thể nhớ lại chương trình LED hướng dẫn cuối cùng, thì bạn sẽ nhớ rằng DigitalWrite (LED_pin_name, HIGH) sẽ làm cho LED phát sáng và digitalWrite (LED_pin_name, LOW) sẽ chuyển sang LED.
Công tắc là thiết bị đầu vào, một đầu của công tắc được kết nối với đầu nối đất và đầu kia được kết nối với các chân kỹ thuật số P2.3 và P2.4. Điều này có nghĩa là bất cứ khi nào chúng ta nhấn công tắc, chân I / O (2.3 hoặc 2.4) sẽ được nối đất và sẽ tự do nếu không nhấn nút. Hãy để chúng tôi xem cách chúng tôi có thể sử dụng sự sắp xếp này trong khi lập trình.
Giải thích lập trình:
Chương trình phải được viết để điều khiển 8 LED theo trình tự khi nhấn công tắc 1 và sau đó khi nhấn công tắc 2, trình tự phải được thay đổi. Các chương trình hoàn chỉnh và trình diễn video có thể được tìm thấy ở dưới cùng của trang này. Dưới đây tôi sẽ giải thích từng dòng chương trình để các bạn dễ hiểu.
Như mọi khi, chúng ta nên bắt đầu với hàm void setup (), bên trong chúng ta sẽ khai báo các chân mà chúng ta đang sử dụng là chân đầu vào hoặc đầu ra. Trong chương trình của chúng tôi, 8 chân LED là đầu ra và 2 công tắc là đầu vào. Những 8 đèn LED được kết nối từ P1.0 đến P2.1 là pin số 2-9 trên diễn đàn. Sau đó, các công tắc được kết nối với chân P2.3 và chân 2.4 tương ứng là chân số 11 và 12. Vì vậy, chúng tôi đã khai báo như sau trong void setup ()
void setup () {for (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } for (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Như chúng ta đã biết, hàm pinMode () khai báo chân là đầu ra hoặc đầu vào và hàm digitalWrite () làm cho nó ở mức cao (ON) hoặc thấp (OFF). Chúng tôi đã sử dụng vòng lặp for để thực hiện khai báo này nhằm giảm số lượng dòng. Biến “i” sẽ được tăng lên 2-9 trong cho vòng lặp và đối với mỗi increment bên trong hàm sẽ được thực thi. Một điều khác có thể khiến bạn nhầm lẫn là thuật ngữ “ INPUT_PULLUP ”. Một chân có thể được khai báo là đầu vào bằng cách gọi hàm pinMode (Pin_name, INPUT) nhưng ở đây chúng tôi đã sử dụng INPUT_PULLUP thay vì INPUT và cả hai đều có một thay đổi đáng chú ý.
Khi chúng tôi đang sử dụng bất kỳ chân vi điều khiển nào, chân đó phải được kết nối với mức thấp hoặc cao. Trong trường hợp này, chân 11 và 12 được kết nối với công tắc sẽ được kết nối với đất khi được nhấn. Nhưng khi công tắc không được nhấn, chân không được kết nối với bất kỳ thứ gì, tình trạng này được gọi là chân nổi và nó có hại cho vi điều khiển. Vì vậy, để tránh điều này, chúng ta sử dụng một điện trở kéo lên hoặc kéo xuống để giữ cho chốt ở trạng thái khi nó nổi. Trong Vi điều khiển MSP430G2553, các chân I / O có sẵn một điện trở kéo lên. Để sử dụng điều đó, tất cả những gì chúng ta phải làm là gọi INPUT_PULLUP thay vì INPUT trong khi khai báo giống như chúng ta đã làm ở trên.
Bây giờ chúng ta hãy bước vào hàm void loop () . Bất cứ điều gì được viết trong hàm này sẽ được thực thi mãi mãi. Bước đầu tiên trong chương trình của chúng tôi là kiểm tra xem công tắc có được nhấn hay không và nếu được nhấn, chúng tôi nên bắt đầu nhấp nháy các đèn LED theo trình tự. Để kiểm tra xem nút được nhấn, dòng sau được sử dụng
if (digitalRead (12) == LOW)
Ở đây chức năng mới là chức năng digitalRead () , chức năng này sẽ đọc trạng thái của chân kỹ thuật số và sẽ trả về mức CAO (1) khi chân nhận được một số điện áp và sẽ trả về mức thấp LOW (0) khi chân được nối đất. Trong phần cứng của chúng tôi, chân cắm sẽ chỉ được nối đất khi chúng tôi nhấn nút, nếu không, chân cắm sẽ ở mức cao vì chúng tôi đã sử dụng điện trở kéo lên. Vì vậy, chúng tôi sử dụng nếu tuyên bố để kiểm tra xem các nút được nhấn.
Khi nút được nhấn, chúng ta sẽ đi vào vòng lặp while (1) vô hạn. Đây là nơi chúng tôi bắt đầu nhấp nháy các đèn LED theo trình tự. Một vòng lặp while vô hạn được hiển thị bên dưới và bất cứ điều gì được viết bên trong vòng lặp sẽ chạy mãi mãi cho đến khi ngắt; câu lệnh được sử dụng.
đánh (1) {}
Bên trong vô hạn trong khi chúng tôi kiểm tra trạng thái của công tắc thứ hai được kết nối với chân 11.
Nếu công tắc này được nhấn, chúng tôi nhấp nháy đèn LED theo một trình tự cụ thể khác, chúng tôi sẽ nhấp nháy nó theo một trình tự khác.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); chậm trễ (100); } for (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Để nhấp nháy đèn LED theo trình tự, chúng ta lại sử dụng vòng lặp for , nhưng lần này chúng ta sử dụng độ trễ nhỏ là 100 mili giây bằng cách sử dụng hàm delay (100) để chúng ta có thể nhận thấy đèn LED đang ở mức cao. Để chỉ làm cho một đèn LED phát sáng tại một thời điểm, chúng tôi cũng sử dụng một vòng lặp for khác để tắt tất cả đèn LED. Vì vậy, chúng tôi bật một đèn LED chờ một thời gian và sau đó tắt tất cả đèn LED sau đó tăng số lần bật đèn LED chờ một thời gian và chu kỳ tiếp tục. Nhưng tất cả điều này sẽ xảy ra miễn là công tắc thứ hai không được nhấn.
Nếu công tắc thứ hai được nhấn thì chúng ta thay đổi trình tự, chương trình sẽ ít nhiều giống với trình tự mà đèn LED được bật. Các dòng được hiển thị bên dưới, hãy thử xem và tìm ra những gì đã được thay đổi.
else {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); chậm trễ (100); } for (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Có, vòng lặp for đã được thay đổi. Trước đây, chúng tôi đã làm cho đèn LED phát sáng từ số 2 và đến hết số 9. Nhưng bây giờ chúng tôi sẽ bắt đầu từ số 9 và giảm dần xuống 2. Bằng cách này, chúng tôi có thể nhận thấy công tắc có được nhấn hay không.
Thiết lập phần cứng cho chuỗi đèn LED nhấp nháy:
Được rồi, đủ tất cả lý thuyết và phần mềm. Hãy lấy một số thành phần và xem chương trình này hoạt động như thế nào. Mạch rất đơn giản và do đó có thể dễ dàng xây dựng trên breadboard. Nhưng tôi đã hàn đèn LED và chuyển mạch trên bo mạch chỉ để làm cho nó trông gọn gàng. Bảng hoàn thiện mà tôi đã hàn được hiển thị bên dưới.
Như bạn có thể thấy, chúng tôi có các chân đầu ra của đèn LED và công tắc được lấy ra làm chân kết nối. Bây giờ chúng ta đã sử dụng dây nối cái đến cái để kết nối các đèn LED và chuyển mạch ra bo mạch MSP430 LaunchPad như trong hình bên dưới.
Tải lên và làm việc:
Khi bạn đã hoàn tất phần cứng, chỉ cần kết nối bo mạch MSP430 của bạn với máy tính và mở Energia IDE và sử dụng chương trình được cung cấp ở cuối trang này. Đảm bảo chọn đúng bo mạch và cổng COM trong IDE Energia và nhấp vào nút Tải lên. Chương trình sẽ được biên dịch thành công và sau khi tải lên sẽ hiển thị “Tải lên xong”.
Bây giờ nhấn nút 1 trên bảng và đèn LED sẽ sáng theo trình tự như hình dưới đây
Bạn cũng có thể giữ nút thứ hai để kiểm tra xem trình tự có bị thay đổi hay không. Toàn bộ hoạt động của dự án được hiển thị trong video dưới đây. Nếu bạn hài lòng với kết quả, bạn có thể thử thực hiện một số thay đổi trong mã như thay đổi thời gian trễ thay đổi trình tự, v.v. Điều này sẽ giúp bạn học và hiểu rõ hơn.
Hy vọng bạn đã hiểu hướng dẫn và học được điều gì đó hữu ích với nó. Nếu bạn gặp phải bất kỳ vấn đề gì, vui lòng đăng câu hỏi trong phần bình luận hoặc sử dụng diễn đàn. Chúng ta hãy gặp nhau trong một hướng dẫn khác, nơi sẽ tìm hiểu cách đọc điện áp tương tự bằng cách sử dụng bệ phóng MSP30 của chúng tôi.