Lỗi tkd2 was not declared in this scope năm 2024

新版的 Arduino IDE 在使用 IR Library 時會編譯錯誤,如下圖:

Lỗi tkd2 was not declared in this scope năm 2024

導致錯誤的原因是因為在 IRremoteTools.cpp 裡面沒有宣告 'TKD2' 變數。

歸根究底的原因是新版的 IDE 會讀取內建的紅外線函式庫,而這個內建的紅外線函式庫是專為 Adafruit 公司產品訂製的,如果你沒有該公司的產品可能就無法使用它的函式庫。

那麼該如何解決這個問題呢?

解決辦法有很多種,其中一種是去修改 RobotIRremote.cpp,但這個方法對於不熟悉 C 語言的人來說似乎是有點困難,有可能會愈弄愈糟。

另一種辦法是用其他可用的紅外線函式庫取代內建的 RobotIRremote Library,此舉應該是最簡單又安全的作法了。

下載 IR Library https://github.com/coopermaa/Arduino-IRremote/archive/master.zip

下載後解壓縮,將資料夾名稱更改為「IRremote」,然後複製到 [Arduino]\libraries 路徑下,再重新啟動 Arduino IDE 即可。

你也可以把 Robot_Control、Robot_Motor 和 RobotIRremote 這幾個資料夾移除掉,這樣並不會影響紅外線函式庫的運作。

檢查新的紅外線函式庫是否正常運作

我們可以開啟內建的範例程式:

1. 點擊下拉功能表 File > Examples > IRremote > IRrecvDemo

2. 點擊工具列的 Upload 按鈕。

成功編譯,如下圖:

Lỗi tkd2 was not declared in this scope năm 2024

Hey. I ran into a problem. The program does not allow me to compile my project. An error: 'D2' was not declared in this scope.

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

include

define USE_DISPLAY /* <-- uncomment that if you wanna use the display */

include

//include the library you need

include "SSD1306.h"

//

include "SH1106.h"

//button pins

define upBtn D6

define downBtn D7

define selectBtn D5

define buttonDelay 180 //delay in ms

//render settings

define fontSize 8

define rowsPerSite 8

//create display(Adr, SDA-pin, SCL-pin) SSD1306 display(0x3c, D2, D1); //SH1106 display(0x3c, D2, D1);

Error: esp8266_deauther:61: error: 'D2' was not declared in this scope

esp8266_deauther:61: error: 'D1' was not declared in this scope

C:\Users\Григорий\Desktop\esp8266_deauther-master\esp8266_deauther\esp8266_deauther.ino:500:26: note: in expansion of macro 'selectBtn'

Khi lập trình, người học Arduino gặp nhiều loại lỗi khác nhau và đôi khi việc khắc phục mã lỗi trở nên khó khăn. Các mã lỗi chủ yếu đến khi chương trình Arduino được biên dịch và những lỗi này được hiển thị trong menu đầu ra của Arduino IDE nằm ở cuối phần mềm. Arduino IDE cũng cho biết lỗi tồn tại trên dòng mã nào và nó cũng đề xuất các hành động phù hợp để sửa lỗi. Lỗi phổ biến nhất mà người mới bắt đầu gặp phải là not declared in this scope và chúng ta sẽ tìm hiểu tại sao loại lỗi như vậy lại phát sinh và cách để khắc phục lỗi này.

Lỗi not declared in this scope là gì

Như từ cái tên, chúng ta có thể hiểu rằng khi trình biên dịch của Arduino IDE không thể nhận ra bất kỳ biến nào hoặc không thể xử lý bất kỳ vòng lặp nào hoặc bất kỳ lệnh nào có bất kỳ biến chưa được khai báo nào, do đó, nó gây ra lỗi not declared in this scope, có nghĩa là mã không thể hiểu hướng dẫn được cung cấp trong mã Arduino.

Arduino IDE có một tính năng là nó tự động chỉ ra dòng chương trình có lỗi bằng cách gạch dưới chúng bằng màu đỏ ngay cả trước khi mã được biên dịch.

Các tình huống khi trình biên dịch đưa ra lỗi not declared in this scope

Để minh họa khi lỗi not declared in this scope phát sinh trong chương trình Arduino, chúng tôi đã đưa ra một đoạn mã ví dụ trong đó loại lỗi này đã gặp phải.

Để đơn giản hơn, ví dụ dưới đã biên dịch mã Arduino thực hiện thao tác cộng và hình ảnh của mã cho phép cộng đơn giản có lỗi:

Lỗi tkd2 was not declared in this scope năm 2024

Khi biên dịch mã này, chúng ta gặp lỗi "b is not declared in this scope" như trong hình ảnh bên dưới.

Lỗi tkd2 was not declared in this scope năm 2024

Lỗi tkd2 was not declared in this scope năm 2024

Như bạn có thể thấy rằng trình biên dịch cũng đã xác định được dòng có lỗi và nó cũng đã chỉ ra rằng biến “b” nằm ngoài phạm vi của chương trình.

Như hình ảnh bên dưới, trong đó bạn có thể thấy rõ rằng Arduino IDE đã đánh dấu biến mà nó không thể hiểu được.

Lỗi tkd2 was not declared in this scope năm 2024

Cách sửa lỗi not declared in this scope

Để sửa lỗi, chúng ta chỉ cần khai báo biến đó để trình biên dịch có thể hiểu được biến được sử dụng trong mã. Vì vậy, hãy luôn nhớ khai báo biến mà bạn muốn sử dụng trong chương trình Arduino. Hình dưới đã đăng mã chính xác sau khi loại bỏ lỗi này:

Lỗi tkd2 was not declared in this scope năm 2024

Chúng ta đã biên dịch thành công mã và nó có thể được nhìn thấy từ hình ảnh của menu đầu ra của Arduino IDE.

Và đầu ra của mã được hiển thị trong serial monitor.

Kết luận

Trong lập trình Arduino trong khi biên dịch mã, chúng ta có thể gặp phải cả đống mã lỗi nhưng những lỗi này có thể được sửa bằng cách tránh những sai lầm ngay từ đầu. Tuy nhiên, có một số lỗi là do cú pháp được sử dụng để lập trình không chính xác và một số là lỗi logic. Mặc dù khả năng xảy ra lỗi logic là tối thiểu. Các lỗi phổ biến nhất mà người dùng gặp phải liên quan đến lỗi cú pháp hoặc khai báo. Vì vậy, Điện Tử Tương Lai đã mô tả các lỗi khai báo là gì và chúng phát sinh như thế nào cũng như cách loại bỏ chúng với sự trợ giúp của mã ví dụ Arduino đơn giản.