Hướng dẫn 2 về Viết Chức năng tùy chỉnh cho Bo mạch Intel® Galileo
Cho đến thời điểm này, chúng tôi đã viết mã của mình bên trong các chức năng thiết lập và vòng lặp. Điều này hoàn toàn ổn. Nhưng điều gì sẽ xảy ra nếu chương trình của bạn có nhiều logic phức tạp? Bạn sắp xếp mã của mình như thế nào?
Có một nghệ thuật để lập trình và nó bắt đầu bằng việc biết nơi đặt mã của bạn.
Mã hóa đôi khi có thể gây lộn xộn. Nếu bạn đã từng đọc bất kỳ mã nguồn mở nào, bạn có thể gặp phải một số mã:
- nhận xét như thế: bao gồm bình luận giúp bạn và bất kỳ ai đang đọc nhận xét đều hiểu được những gì đang xảy ra
- logic không được tổ chức: sắp xếp mã của bạn thành các khối logic giúp gỡ lỗi và bảo trì mã
- gây hiểu lầm: tên biến và chức năng nên mô tả chính xác những gì họ định làm
- sự thông minh hơn: mã nên dễ dàng đọc; cố gắng không khó hiểu trong những gì bạn đang cố gắng hoàn thành
Chương trình bằng bất kỳ ngôn ngữ nào có thể được viết và sắp xếp, tuy nhiên lập trình viên thấy phù hợp. Điều này sẽ ổn nếu bạn là người duy nhất đọc mã của mình. Tuy nhiên, nếu bạn đang làm việc trên một nhóm, điều quan trọng là phải cung cấp một số hướng dẫn mà mọi người tuân theo. Một ngày nào đó, mã bạn viết sẽ cần được những người khác cập nhật và đọc. Viết mã có tổ chức và thực hành mã hóa phổ biến sẽ giúp bạn và các kỹ sư đồng nghiệp của bạn viết mã đẹp.
Để biết mẹo cải thiện phong cách mã hóa của bạn, hãy xem hướng dẫn phong cách mã hóa C++ của Google.
Có hai loại chức năng:
- Thực hiện hướng dẫn và trả về không có giá trị (loại vô hiệu)
- Thực hiện hướng dẫn và trả về một giá trị (loại bao gồm int, quan tài, gấp đôi)
Xem thêm trong phần Loại dữ liệu trên trang tham khảo Arduino.
Loại chức năng
Type void:
void sayHello(){
Serial.println("Hello!");
}
Type integer:
int theAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything(){
return 42;
}
We can assign the value of functions that return something to variables:
int myAnswer = theAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything();
Giả sử chúng tôi muốn làm cho một chức năng hữu ích hơn một chút. Chúng ta có thể sử dụng các tham số chức năng để truyền dữ liệu độc đáo sẽ ảnh hưởng đến kết quả của chức năng. Ví dụ:
int add(int x, int y){
return x + y;
}
Chúng tôi sẽ gọi chức năng này, truyền các tham số tùy chỉnh như vậy:
int numbersAdded = add(2, 2); // The variable numbersAdded is equal to 4
Có nhiều cách để bạn có thể viết một chức năng. Tất cả phụ thuộc vào những gì bạn muốn. Một nơi tốt để bắt đầu viết một chức năng tùy chỉnh là xác định chức năng bổ nghĩa.
Chức năng chữ ký
Trước khi viết mã của một hàm, tốt nhất là xác định những gì bạn đang cố gắng hoàn thành.
- Nó sẽ trả lại một giá trị?
- Bao nhiêu tham số sẽ được truyền cho nó (nếu có)?
- Mục đích của chức năng là gì?
Hãy tin tưởng rằng bạn đang viết một chương trình xuất một tin nhắn tùy chỉnh vào màn hình nối tiếp. Thông báo này sẽ bình luận về thời tiết (ví dụ như dựa trên cảm biến nhiệt độ).
Bạn không biết chính xác mã bên trong chức năng trông như thế nào, nhưng bạn biết nó muốn nó làm gì:
- Đưa hai tham số tùy chỉnh để ghép nối (hoặc kết hợp) với nhau
- Lấy một số loại Gấp đôi sẽ thêm vào tin nhắn
- Không trả lại một giá trị
- Đầu ra màn hình nối tiếp sẽ in ra "Nó ở ngoài 30 độ."
Tài liệu của chúng tôi có thể trông giống như sau:
void myMessage(String msg1, String msg2, double deg){}
Gọi chức năng sẽ trông giống như:
Bằng cấp ở đây sẽ là một biến được xác định trước dựa trên đọc cảm biến nhiệt độ.
myMessage("Chính là", bằng cấp, "bên ngoài");
Thách thức
Bạn sẽ viết mã như thế nào để hoàn thành tác vụ của chức năng này?
- Giới thiệu
- Đầu vào nâng cao
- Điều chế độ độ rộng xung (PWM)
- Viết một chức năng tùy chỉnh
- Sử dụng chức năng tùy chỉnh
- Kết thúc