Hướng dẫn kết nối Arduino
Các bước cơ bản
[edit]Có 8 giai đoạn để kết hợp hai bản phác thảo, mặc dù bạn có thể hoàn thành sớm tùy thuộc vào những gì trong bản phác thảo của bạn. Các bước này là: -
- Vật lý có được các bản phác thảo vào cùng một tập tin.
- Giải quyết bất kỳ tên hàm trùng lặp bằng cách đổi tên các chức năng.
- Viết các thiết lập mới và các chức năng lặp.
- Loại bỏ bất kỳ sự trùng lặp của các cuộc gọi chức năng.
- Giải quyết bất kỳ tên biến toàn cầu trùng lặp.
- Giải quyết bất kỳ việc sử dụng kép tài nguyên phần cứng.
- Dọn dẹp mã.
- Hãy nghĩ những gì bạn thực sự muốn mã hợp nhất để làm.
Mặc dù bạn có thể muốn xem xét bước cuối cùng trước. Dù sao đi nữa, hãy lấy những cái đó cùng một lúc.
Bước một: Về mặt vật lý Nhận các bản phác thảo vào cùng một tệp
[edit]Có hai cách để làm điều này. Có lẽ cách đơn giản nhất là chỉ cần sao chép một bản phác thảo và dán nó vào bản kia. Cách phức tạp hơn là tạo ra một bản phác thảo mới, hiện tại không có gì trong đó và lưu nó. Sau đó thoát khỏi ứng dụng Arduino và di chuyển hoặc sao chép hai tệp mục tiêu, đó là các tệp .ino hoặc .pde vào cùng thư mục với bản phác thảo mới của bạn. Khi bạn mở lại ứng dụng arduino, hai tệp để hợp nhất sẽ nằm trong các tab riêng biệt trong giao diện. Mặc dù điều này có thể gọn gàng nhưng nó sẽ mở ra một số vấn đề sau này khi bạn sử dụng các biến phổ biến, vì vậy, hiện tại chúng tôi sẽ chỉ sử dụng phương pháp sao chép và dán đơn giản. Vì vậy, hãy tạo một bản phác thảo mới và lưu nó dưới tên của Blink_Fade. Bây giờ hãy mở các bản phác thảo nhấp nháy và mờ dần từ Tệp -> Ví dụ -> menu Cơ bản. Sử dụng bản sao và dán để di chuyển mã từ mỗi trong hai bản phác thảo sang bản mới và sau đó lưu bản mới. Để làm theo chính xác ví dụ của tôi, hãy sao chép bản phác thảo Fade trước và sau đó là Blink sau nó. Đóng các bản phác thảo Blink và Fade để dọn dẹp mọi thứ.
Bước hai: Giải quyết bất kỳ tên hàm trùng lặp nào bằng cách đổi tên các hàm
[edit]Nếu bạn thử và biên dịch nó bằng cách nhấp vào biểu tượng đánh dấu ở góc trên cùng bên trái. Bạn sẽ gặp 6 dòng thông báo lỗi. Không phải các thông báo lỗi không thân thiện với người mới bắt đầu và thông thường có rất nhiều trong số chúng, nhưng nếu bạn dành thời gian để đọc chúng, chúng sẽ cho bạn biết cái gì sai, hoặc ít nhất là tại thời điểm trình biên dịch bị nhầm lẫn. Trong trường hợp này bạn nhận được: -
Blink_Fade.cpp: Trong chức năng 'void setup ()': Blink_Fade: 39: error: xác định lại 'void setup ()' Blink_Fade: 12: error: 'void setup ()' được xác định trước đây tại đây Blink_Fade.cpp: Trong hàm 'void loop () ': Blink_Fade: 45: error: xác định lại' void loop () 'Blink_Fade: 17: error:' void loop () 'được xác định trước đây tại đây
Vì vậy, hãy nhìn vào dòng đầu tiên, nó cho bạn biết có một vấn đề trong thiết lập hàm (), sau đó dòng tiếp theo cho bạn biết vấn đề đó là gì, có một định nghĩa lại của hàm được gọi là setup (). Quy tắc là không có hai chức năng có thể có cùng tên, bởi vì nếu chúng làm như thế nào thì máy tính sẽ biết chọn cái nào khi nó được gọi. Vậy chức năng này được xác định đầu tiên ở đâu? Dòng thứ ba cho bạn biết: - lỗi: 'void setup ()' được xác định trước đây, nhưng đây là đâu? Chà, phần đầu tiên của dòng đó nói: - Blink_Fade: 12: Điều đó có nghĩa là nó được định nghĩa đầu tiên trong dòng 12 của mã. Nhưng đó là ở đâu? Chà, nếu bạn nhìn vào góc dưới bên trái của cửa sổ, bạn sẽ thấy một số, đó là số dòng. Nhấp vào dòng chứa ngay lập tức đầu tiên của thiết lập () và thông báo 13. Nhưng treo trên thông báo nói rằng lỗi nằm ở dòng 12 chứ không phải 13. Đây là một chút không nhất quán giữa giao diện Arduino và trình biên dịch. Giao diện bắt đầu đếm các dòng từ một, vì vậy dòng đầu tiên là dòng một. Tuy nhiên, trình biên dịch bắt đầu đếm các dòng từ 0, vì vậy dòng đầu tiên là dòng 0. Do đó, sự nhầm lẫn giữa dòng 12 và 13, nhưng đừng lo, nó đủ gần. Ba dòng tiếp theo sẽ cho bạn biết cùng một câu chuyện nhưng chỉ về hàm được gọi là loop (). Lưu ý hàm được gọi là loop () không phải void loop (), bit void không phải là một phần của tên, nó chỉ cho bạn biết loại biến nào mà hàm trả về, trong trường hợp này không có gì được trả về, từ không có gì trong ngôn ngữ này là khoảng trống Vì vậy, bước đầu tiên trong việc sửa lỗi này là đổi tên cả hai chức năng một cái gì đó khác nhau. Vì vậy, đổi tên chúng là setupFade () và setupBlink () và loopFade () và loopBlink (). Tại thời điểm này, chúng tôi đã thực hiện với bước 2 nhưng với một cặp phác thảo khác, có thể có các tên trùng lặp khác cả hàm và biến. Đây chỉ là các biến được định nghĩa bên ngoài một hàm, nên được gọi là biến toàn cục. Trình biên dịch sẽ cho bạn biết về chúng và bây giờ bạn có thể đọc các thông báo lỗi về chúng.
Bước ba: Viết các chức năng thiết lập và vòng lặp mới
[edit]Lưu bản phác thảo và nhấp vào biên dịch lại. Rất nhiều thông báo lỗi tiếp theo bạn nhận được sẽ nói: -
core.a (chính /Appluggest/Arduino.app/Contents/Resource/Java/hardware/arduino/cores/arduino/main.cpp:14: tham chiếu không xác định đến `loop '
Chỉ cần làm cho chúng không thể đọc được nhiều hơn, chúng sẽ được tách ra, nhưng hãy đưa chúng từng cái một: - Dòng đầu tiên nói Trong hàm `main ':, Cái gì! chúng ta không có một chức năng gọi là chính trong bản phác thảo của chúng ta vậy nó là về cái gì? Vâng main là một chức năng được ẩn bởi giao diện Arduino, một chức năng mà nó tự đặt. Trong hàm đó, nó gọi một hàm gọi là setup () một lần và sau đó liên tục gọi một hàm gọi là loop (). Nó hy vọng sẽ tìm thấy hai chức năng này trong bản phác thảo của bạn, đã từng có một, thực ra là hai, nhưng chúng tôi đã đổi tên cả hai và bây giờ không có chức năng nào. Vì vậy, cho phép thêm một số, gõ này khi bắt đầu phác thảo.
/ * Nháy mắt
một bài tập kết hợp mã
* /
void setup () {
setupFade ();
setupBlink ();
}
void loop () {
loopFade ();
loopBlink ();
}
Lưu và biên dịch lại và lần này không có lỗi !!!
Tuy nhiên, một lời cảnh báo, chỉ vì trình biên dịch biết cách xử lý những gì bạn đã viết không có nghĩa là nó có ý nghĩa, hoặc nó sẽ làm những gì bạn nghĩ. Nó giống như một trình kiểm tra chính tả, bạn có thể có một bài luận chính tả hoàn toàn chính xác, nhưng nếu các từ không đúng và theo đúng thứ tự người đọc sẽ không thể hiểu nó.
Bước bốn: Loại bỏ bất kỳ cuộc gọi sao chép chức năng
[edit]Vâng, không cần phải làm điều đó với ví dụ này nhưng một lần nữa, một cặp phác thảo khác có thể cho bạn kết quả khác nhau. Đây rất có thể là một vấn đề trong hàm setup (). Điển hình có thể là nếu bạn có một serial.begin () trong mỗi hàm setup () cũ. Xóa một hoặc tốt hơn là vẫn xóa cả hai và đặt nó vào hàm setup () mới. Điều tương tự cũng xảy ra đối với việc khởi tạo những thứ như trình điều khiển I2C hoặc bus 1 Dây.
Bước năm: Xóa mọi tên biến toàn cầu trùng lặp
[edit]Bước sáu: Giải quyết bất kỳ việc sử dụng kép tài nguyên phần cứng
[edit]Ở đây bạn phải nhìn vào hai bản phác thảo và hỏi xem hai bản phác thảo đó có đang sử dụng tài nguyên lưu của một phần của bộ xử lý không. Tài nguyên cơ bản nhất là các chân đầu vào / đầu ra, mỗi bản phác thảo có muốn cùng một chân cho các chức năng khác nhau không? Có phải cùng một pin được đặt làm đầu vào trong một bản phác thảo và đầu ra ở đầu kia không? Điều này có thể được giải quyết bằng cách xáo trộn các chân về và sử dụng các chân khác nhau. Hầu hết các chân có thể hoán đổi cho nhau, chỉ có một số có chức năng dành riêng. Các chức năng như vậy có thể là khả năng PWM, khả năng đầu vào tương tự hoặc trình điều khiển bus như SPI hoặc I2C. Lưu ý rằng các chân tương tự có thể được sử dụng như đầu vào và đầu ra kỹ thuật số thông thường nếu bạn bị đẩy. Vấn đề xảy ra khi mỗi bản phác thảo cần các chân giống nhau. Tuy nhiên, đây không phải lúc nào cũng là vấn đề có thể xuất hiện lần đầu tiên, ví dụ bạn có thể có nhiều hơn một thiết bị trên bus I2C mà không cần thêm phần cứng nào. Ngoài ra, bus SPI có thể có nhiều hơn một thiết bị trên đó, nếu bạn có một dòng riêng cho phép kích hoạt chip của từng thiết bị.
Bước bảy: Dọn dẹp mã
[edit]Làm cho nó trông giống như một bản phác thảo. Trong trường hợp của ví dụ này, di chuyển tất cả các định nghĩa biến toàn cục sang đầu mã và sắp xếp các ý kiến. Bây giờ chạy mã và xem những gì sẽ xảy ra!
Bước thứ tám: Hãy nghĩ những gì bạn thực sự muốn Mã hợp nhất để làm
[edit]Vâng, nó đã làm gì? Bạn có thể được tha thứ vì nghĩ rằng bit nhấp nháy vẫn hoạt động nhưng bit mờ dần thì không. Thực tế cả hai chức năng vẫn hoạt động nhưng chỉ có cái khác. Đèn LED trên tàu vẫn xuất hiện nhấp nháy với một giây bật và tắt một giây. Nhưng đèn LED mờ dần dường như đang bật. Tuy nhiên, nếu bạn đợi đủ lâu, bạn sẽ thấy đèn LED mà bạn đã nối với điện trở đến chân 9, dần dần bắt đầu bật. Vòng lặp làm mờ dần chỉ có một lần bắn khi chạy hai giây một lần, do đó, sẽ mất 102 giây để có được độ sáng đầy đủ và 102 lần nữa để giảm xuống 0 lần nữa, đó là thời gian chu kỳ 3 phút 24 giây.Trong thực tế, nó dài hơn một chút vì độ trễ 30 mili giây ở cuối vòng mờ dần, sẽ thêm 15 giây nữa hoặc lâu hơn cho toàn bộ thời gian chu kỳ. Vì vậy, việc hợp nhất hai bản phác thảo, trong ví dụ này, không hoàn toàn đúng. Giải pháp là gì? Trong trường hợp này và rất nhiều thứ khác bạn cần loại bỏ hàm delay () khỏi các vòng lặp. Điều này là do độ trễ () hoàn toàn ngăn bộ xử lý làm bất cứ điều gì khác, chúng tôi nói rằng đó là một cuộc gọi chặn. Để loại bỏ độ trễ () bạn muốn xem bản phác thảo "Nháy mắt không chậm trễ" trong Tệp -> Ví dụ -> Menu kỹ thuật số của ứng dụng Arduino. Nhưng đó là cho một hướng dẫn khác.