Tôi gặp lỗi nhỏ với mã dự án Arduino mới nhất sử dụng TimerOne library để hiển thị số trên màn hình 4 chữ số, 7 đoạn. Tôi sử dụng một ngắt để làm cho bộ vi xử lý liên tục flick giữa mỗi chữ số khi chúng về cơ bản có dây với nhau.Không có lỗi chức năng phù hợp khi sử dụng attachInterrupt
Tôi có mã hoạt động hoàn hảo nếu tôi giữ nguyên tất cả trong tệp PDE chính, nhưng tôi nghĩ sẽ tốt hơn nếu cô lập màn hình trong lớp riêng của nó.
trình biên dịch của tôi đang gặp rắc rối với dòng thứ hai của đoạn mã sau trong PDE:
Timer1.initialize(500);
Timer1.attachInterrupt(digitDisplay.flashDigit,500);
Các arg thứ hai trong attachInterrupt nên không bắt buộc, Tôi đã cố gắng có và không có này! Nhưng dù sao tôi nhận được thông báo lỗi sau:
DigitDisplayTest.cpp: In function 'void setup()':
DigitDisplayTest:29: error: no matching function for call to 'TimerOne::attachInterrupt(<unresolved overloaded function type>)'
C:\Program Files (x86)\arduino-0022\arduino-0022\libraries\Timer1/TimerOne.h:62: note: candidates are: void TimerOne::attachInterrupt(void (*)(), long int)
Trong DigitDisplay (trong đó digitDisplay là một ví dụ), tôi xác định flashDigit như sau:
class DigitDisplay
{
private:
/*...*/
public:
/*...*/
void flashDigit();
}
void DigitDisplay::flashDigit()
{
wipeDisplay();
for (int i = 0; i < _digitCount ; i++)
{
if (i == _digit) digitalWrite(_digitPins[i], HIGH);
else digitalWrite(_digitPins[i], LOW);
}
displayNumber(_digits[_digit]);
_digit++ ;
_digit %= _digitCount;
}
Nếu bạn yêu cầu mã hơn xin vui lòng cho tôi biết nhưng tôi khá chắc chắn không có gì sai với các gubbings của phương thức flashDigit() - nó chắc chắn đã làm việc trước khi tôi đặt nó bên trong lớp riêng của nó.
Rõ ràng tôi có thể phá vỡ được lỗi này bằng cách thêm
void Interrupt()
{
digitDisplay.flashDigit();
}
để PDE chính và gắn chức năng đó, nhưng đó chỉ là một công việc xung quanh, nó sẽ được tốt đẹp nếu tôi có thể gọi nó là trực tiếp.
Tôi thấy lỗi là phải thực hiện với việc tạo con trỏ hàm (trong đó không tồn tại do đó lỗi), nhưng con trỏ không phải là điểm mạnh của tôi vì vậy tôi có thể thực sự làm với một bàn tay sắp xếp này.
ví dụ thứ hai của bạn sử dụng 'digitDisplay.flashDigit() 'là khác nhau hơn' digitDisplay .flashDigit'. Bạn đã thử cái này chưa? – gary
Có, tôi đã làm, nó không giải quyết được vấn đề, nhưng dù sao đi nữa;) – SmallJoeMan