Sau khi tìm kiếm khá lâu trên internet, tôi không còn cách nào khác ngoài việc thử hỏi ai đó xem họ có thể giải thích cho tôi tình huống có vẻ kỳ lạ này không.
Tôi đang thực hiện một số thử nghiệm bằng cách sử dụng một số động cơ servo, cố gắng di chuyển chúng gần như cùng nhau bằng cách sử dụng millis()
và Servo
đối tượng.
Tất nhiên, nó hoạt động hoặc cho các Servos đơn và nhiều servo.
Trường hợp, chi tiết hơn, là về điều này:
- Di chuyển một, hai hoặc nhiều động cơ servo cùng nhau.
- Buộc họ phải thực hiện cùng một lúc để hoàn thành bất kỳ hành động nào.
- Có số lượng động cơ servo.
Về hai điểm đầu tiên tôi không gặp vấn đề gì để giải quyết chúng, tôi dễ dàng tạo ra một chức năng và sau đó tạo một thư viện để hoàn thành công việc như vậy.
Tuy nhiên, vì tôi KHÔNG quen với C ++ và tôi đã tự hỏi liệu thực sự có thể tạo ra một mảng các đối tượng Servo, giống như bạn thực sự có thể làm, trên arduino, với các chuỗi:
String stringArray[] = {"string1", "string2", "and so on, I love it."};
Vì vậy, sau khi tự hỏi một lúc, tôi đã thử điều này:
Servo servObject;
Servo servObject_2;
Servo servObject_3;
Servo servos[] = {servObject, servObject_2, servObject_3};
Và bạn biết những gì mát mẻ? Hàm của tôi thực sự hoạt động chính xác bằng cách buộc số lượng phần tử của mảng servo.
Điều tôi muốn nói là điều đó là nếu tôi buộc chức năng của mình biết rằng nó sẽ có 3 phần tử vào mảng, tất nhiên, nó sẽ hoạt động; Tuy nhiên, vì một số lý do, nếu tôi sử dụng sizeof(servos);
giá trị được trả về, thật đáng ngạc nhiên, là 2
.... Hơn nữa, nếu tôi chỉ đẩy hai đối tượng servo thay vì ba vào mảng servo, nó sizeof
sẽ trả về 6
.
Bằng cách googling, tôi đã tìm ra một vài cuộc thảo luận về thực tế rằng, vì một số lý do, trong một số trường hợp, sizeof trả về một giá trị không chính xác (nếu tôi không sai thì đó là giá trị đúng -1), nhưng trong trường hợp của tôi nó dường như không theo bất kỳ logic nào cả.
Bảng tôi đang sử dụng là Arduino nano w / ATMEGA 328.
Bất kỳ ý tưởng về lý do tại sao nó không trả lại giá trị chính xác? Tôi thực sự sẽ hoàn toàn sai bởi vì tôi không nên tạo ra một loạt các đối tượng servo?
ps: Tôi đã không đăng toàn bộ mã bởi vì nó sẽ vô dụng, vì sizeof là hàm đầu tiên được gọi trong loop()
Trân trọng,
briosheje
sizeof
cấu trúc tiêu chuẩn có sẵn cho bất kỳ đối tượng mảng nào. Do đó, bất kỳ mảng nào (ví dụ: phần tử int [] = {2,3,1,3,9};) đều đưa ra giá trị chính xác của nó (trong trường hợp trước 5) và tôi nhận được giá trị trực tiếp từ cổng Nối tiếp. Trong mọi trường hợp, tối nay, tôi sẽ tải lên toàn bộ mã, tôi không ở nhà và thực sự không thể dán nó từ Nexus 5: P
sizeof
ở đầu vòng lặp của mình, nó vẫn xuất ra như cũ giá trị như trong hàm mà tôi đang sử dụng nó. Ngoài ra, có cách nào khác để kiểm tra xem một phần tử mảng có tồn tại không? Nếu có thể, thì tôi có thể tự sizeof
tạo nguyên mẫu.
#define countof(a) (sizeof(a)/sizeof(a[0]))
để tìm # các phần tử trong một mảng, nhưng vì nó phụ thuộc vào sizeof()
nó sẽ không giúp ích nhiều cho bạn.