Panduan · 15 mnt baca

Error Arduino exit status 1: Cara Mengatasi Error Kompilasi

Apa arti exit status 1 di Arduino? Atasi error was not declared in this scope, expected ';', No such file, does not name a type, dan Sketch too big dengan cepat.

Error Arduino exit status 1 adalah pesan umum yang memberitahumu bahwa kodemu tidak bisa dikompilasi, artinya compiler tidak berhasil mengubah programmu menjadi kode mesin yang dipahami prosesor; penyebab sebenarnya tidak pernah ada di baris ini. Penyebabnya ada di baris pertama yang berisi kata error:, beberapa baris di atasnya pada panel output: kamu salah mengetik sebuah nama, lupa titik koma, sebuah library belum terinstal, atau kodenya ditulis untuk board lain. Notifikasi Compilation error: exit status 1 di kanan bawah Arduino IDE 2 dan baris Error compiling for board Arduino Uno. di versi lama 1.8 artinya persis sama.

Di panduan ini kamu akan melihat dulu bagaimana proses kompilasi bekerja di balik layar dan cara membaca pesan error dengan memecahnya menjadi file, baris, dan kolom. Setelah itu kita bahas error kompilasi yang paling sering muncul satu per satu: was not declared in this scope, expected ';' before, No such file or directory, does not name a type, redefinition of, dan Sketch too big. Untuk masing-masing kamu akan menemukan situasi yang memicunya, pesan asli yang dicetak compiler, dan contoh perbaikan yang terkompilasi tanpa error. Kami juga menambahkan error akibat salah memilih board, masalah khusus ESP32 dan Raspberry Pi Pico, serta tabel error dan solusi di bagian akhir yang merangkum semuanya. Kalau kodemu berhasil dikompilasi tapi tidak mau masuk ke board, masalahnya ada di tahap lain; untuk itu, lihat panduan Arduino Gagal Upload.

Board Arduino Uno R3
Arduino Uno: kode dikompilasi untuk prosesor board yang dipilih di Tools > Board (di sini ATmega328P); salah memilih board bisa memicu error kompilasi walaupun kodenya benar.

Apa itu exit status 1 di Arduino? Kompilasi vs upload

Ketika kamu menekan Verify (tanda centang) atau Upload, Arduino IDE menjalankan beberapa program di latar belakang. Pertama, IDE menggabungkan file .ino di folder sketch dan mengubahnya menjadi file C++ biasa dengan menambahkan header Arduino.h dan prototipe fungsi-fungsimu di bagian atas. Lalu compiler seperti avr-g++ untuk Uno atau xtensa-esp32-elf-g++ untuk ESP32 mengompilasi file itu beserta library yang kamu pakai, linker menyatukan semua bagian menjadi satu program, dan terakhir IDE mengecek apakah program itu muat di board. Setiap program mengembalikan kode keluar (exit code) begitu selesai: 0 berarti berhasil dan 1 berarti gagal. “exit status 1” mengatakan persis hal itu: salah satu program di rantai tersebut gagal. Karena itu frasa yang sama juga muncul ketika avrdude gagal selama upload; pesan di depannya yang memberitahumu mana yang terjadi.

Yang terlihat di outputTahapArtinya
error: ... dan exit status 1 di akhirKompilasiAda error C++ di kodemu atau di sebuah library; penyebab sebenarnya ada di baris error:
“fatal error: DHT.h: No such file or directory”Kompilasi (preprocessing)File yang diminta dengan #include tidak ditemukan; library-nya tidak ada atau namanya salah
undefined reference to ... dan collect2: error: ld returned 1 exit statusLinkingSebuah fungsi sudah dideklarasikan tapi isinya tidak ada di mana pun
“multiple definition of ...”LinkingVariabel atau fungsi yang sama didefinisikan di dua file berbeda
Sketch too big dan text section exceeds available space in boardPengecekan ukuranProgram tidak muat di memori flash board
Not enough memory dan data section exceeds available space in boardPengecekan ukuranVariabel global tidak muat di RAM
“Failed uploading: uploading error: exit status 1”UploadKode berhasil dikompilasi tapi tidak bisa ditulis ke board; lihat baris avrdude atau esptool

Cara membaca pesan error Arduino

Setiap baris error dari compiler mengikuti pola yang sama: pertama nama file, lalu nomor baris dan kolom yang dipisahkan titik dua, diikuti jenis error dan penjelasannya. Tepat di atasnya sering ada baris seperti In function 'void loop()': yang memberitahumu di fungsi mana error itu berada; di bawahnya ada salinan baris yang bermasalah dan penanda kecil ^ yang menunjuk ke masalahnya. error adalah error sungguhan yang menghentikan kompilasi, warning hanya peringatan dan kodenya tetap terkompilasi, sedangkan note menambahkan informasi ke pesan sebelumnya. Compiler juga sering menambahkan saran: di contoh berikut ia sendiri menunjukkan ejaan yang benar lewat suggested alternative: 'digitalWrite'.

BagianNilai di contohArti
FileBlink.inoFile yang berisi error; kalau kamu punya beberapa tab, bagian ini memberitahumu tab yang mana
Baris6Baris tempat compiler menyadari error-nya; kadang kesalahan sebenarnya ada di baris di atasnya
Kolom3Karakter keberapa di baris itu; tempat yang ditunjuk penanda ^
Jeniserrorerror menghentikan kompilasi, warning memperingatkan, note menambah informasi
Pesan“'digitalwrite' was not declared in this scope”Bagian yang menjelaskan masalahnya; teks inilah yang dicari di internet
Saran“note: suggested alternative: 'digitalWrite'”Tebakan compiler; sering menunjukkan ejaan yang benar
  1. Di File > Preferences, centang compile di sebelah Show verbose output during. Dengan begitu kamu juga bisa melihat file dan folder library mana yang dipakai compiler.
  2. Board tidak perlu dicolokkan: tekan tombol Verify (tanda centang). Verify hanya mengompilasi; kalau error-nya ada di tahap kompilasi, menekan Upload cuma membuang waktu.
  3. Gulir panel output ke paling atas dan cari baris pertama yang berisi error:. Kebanyakan error sesudahnya hanyalah efek berantai dari error pertama itu.
  4. Buka nomor baris yang ada di pesan. IDE 2 menggarisbawahi karakter yang error dengan warna merah, sedangkan versi 1.8 mewarnai seluruh baris dengan merah. Kalau kamu tidak melihat masalah di baris itu, lihat baris di atasnya.
  5. Perbaiki hanya error pertama itu lalu tekan Verify lagi. Kalau jumlah error tiba-tiba turun, berarti kamu sudah di jalur yang benar.
  6. Kalau mencari di internet, buang nama variabel dan path file milikmu sendiri dari pesannya: mencari was not declared in this scope alih-alih 'counter' was not declared in this scope memberi hasil jauh lebih banyak. Sebaliknya, ketika minta bantuan di forum, salin seluruh output-nya.
Satu kesalahan saja bisa menghasilkan puluhan baris merah. Misalnya, satu baris Serial.println yang ditulis dengan tanda kutip melengkung hasil salinan dari halaman web memberi enam error stray terpisah dan satu error was not declared di Uno. Jadi jangan panik melihat jumlah error; perbaiki yang paling atas lalu kompilasi lagi. Untuk mengecek apakah kurung kurawalmu sudah berpasangan, pakai Tools > Auto Format (Ctrl+T): kalau indentasinya bergeser tak terduga, berarti ada kurung kurawal yang hilang di suatu tempat.

Error 'was not declared in this scope' dan cara mengatasinya

Pesan ini berarti compiler tidak mengenali nama yang kamu pakai di titik itu. Penyebab paling umum adalah salah ketik: Arduino membedakan huruf besar dan kecil, jadi digitalwrite, Digitalwrite, dan digitalWrite adalah tiga nama yang berbeda. Penyebab besar kedua adalah scope (cakupan): kalau kamu mendeklarasikan variabel di dalam setup(), variabel itu hanya hidup selama setup() berjalan dan loop() tidak bisa melihatnya. Kalau sebuah variabel akan dipakai di lebih dari satu fungsi, deklarasikan di luar semua fungsi di bagian atas file. Mendeklarasikan variabel setelah baris tempat ia dipakai juga memberi error yang sama, karena compiler membaca file dari atas ke bawah. Terakhir, error ini juga muncul ketika kamu memakai objek yang library-nya belum di-include (Wire, Servo) atau fitur yang tidak dimiliki board yang dipilih (Serial1 di Uno).

C++ (Arduino IDE)
1// Kapsam (scope) örneği / Scope example
2const int LED_PIN = 13;   // global: her fonksiyon görür / global: every function can see it
3int yanmaSayisi = 0;      // setup() içine taşırsan loop() göremez / move it into setup() and loop() can't see it
4
5void setup() {
6  pinMode(LED_PIN, OUTPUT);
7  Serial.begin(9600);
8}
9
10void loop() {
11  int sure = 500;                // yerel: yalnız loop() içinde / local: only inside loop()
12  digitalWrite(LED_PIN, HIGH);   // digitalwrite yazarsan: was not declared / typing digitalwrite: was not declared
13  delay(sure);
14  digitalWrite(LED_PIN, LOW);
15  delay(sure);
16  yanmaSayisi++;
17  Serial.println(yanmaSayisi);   // kaç kez yandı / how many times it blinked
18}
PenyebabSalahBenar
Huruf besar dan kecildigitalwrite(13, HIGH);digitalWrite(13, HIGH);
Salah ketik konstantapinMode(13, OUPUT);pinMode(13, OUTPUT);
Variabel dideklarasikan di fungsi lainMendeklarasikan int led = 13; di dalam setup() lalu memakai led di dalam loop()Pindahkan baris int led = 13; ke luar semua fungsi, di bagian atas
Variabel dideklarasikan setelah dipakaiint counter = 0; muncul setelah baris counter++;Pindahkan deklarasinya ke atas tempat ia dipakai
Library tidak di-includeWire.begin(); tanpa baris #includeTambahkan #include <Wire.h> di bagian atas file
Fitur yang tidak dimiliki boardSerial1.begin(9600); dengan Uno terpilihPilih board dengan beberapa port serial seperti Mega, atau pakai SoftwareSerial
Urutan di file .cpp tambahanFungsi dipanggil sebelum definisinya di tab .cppTulis prototipenya (void blink();) di bagian atas file .cpp; di file .ino IDE melakukannya untukmu

'expected ';' before' dan error sintaks lainnya

Di C++ setiap pernyataan diakhiri titik koma. Ketika kamu lupa titik koma di akhir baris, compiler baru menyadarinya begitu membaca kata berikutnya. Karena itu, dengan compiler Uno, nomor baris di expected ';' before 'delay' menunjuk ke baris di bawah kesalahannya: titik koma yang hilang ada di akhir baris sebelum delay. Compiler yang lebih baru di core ESP32 dan Pico langsung menunjuk ke akhir baris yang kehilangan titik koma. Kalau kamu melupakannya di baris terakhir sebuah fungsi, pesannya menjadi expected ';' before '}' token. Error kurung berperilaku mirip. Kalau kamu lupa menutup kurung kurawal sebuah blok if atau fungsi, compiler terus membaca sampai akhir file dan baru kemudian berkata expected '}' at end of input. Kalau kurung yang tidak tertutup ada di dalam setup(), kamu juga mendapat a function-definition is not allowed here before '{' token, karena bagi compiler loop() sekarang adalah fungsi yang sedang kamu coba definisikan di dalam setup(). Memakai koma alih-alih titik koma di dalam kurung loop for adalah kesalahan klasik lain dalam keluarga ini.

PesanPenyebab paling mungkinTempat mencari
“expected ';' before 'delay'”Tidak ada titik koma di akhir baris sebelumnyaDi Uno baris di atas baris yang disebut pesan, di ESP32 akhir baris yang dilaporkan
“expected ';' before '}' token”Tidak ada titik koma di baris terakhir blokBaris tepat sebelum kurung kurawal penutup
“expected ';' before '<' token”Koma alih-alih titik koma di pernyataan forTulis sebagai for (int i = 0; i < 10; i++)
“expected '}' at end of input”Ada kurung kurawal yang tidak pernah ditutupCek indentasi dengan Auto Format; setiap { butuh }
“a function-definition is not allowed here before '{' token”Kurung kurawal penutup fungsi sebelumnya hilangAkhir fungsi sebelum fungsi yang disebut pesan
“expected ')' before ';' token”Kurung buka biasa tidak pernah ditutupHitung kurung di kondisi if dan pemanggilan fungsi
“expected primary-expression before ')' token”Ada nilai yang hilang di dalam kurungArgumen kosong seperti digitalWrite(13, )
“expected constructor, destructor, or type conversion before '(' token”Sebuah perintah ditulis di luar fungsi mana punPindahkan perintah seperti pinMode() ke dalam setup()
“expected unqualified-id before '{' token”Titik koma setelah header fungsiTulis void loop() { alih-alih void loop(); {
Error stray '\342' in program menyatakan ada karakter di kodemu yang tidak dikenali compiler; angkanya adalah nilai oktal dari byte UTF-8 karakter tersebut. Kode yang disalin dari halaman web, file Word atau PDF, dan aplikasi chat bisa berisi tanda kutip melengkung (“ ”) alih-alih tanda kutip lurus ("), tanda pisah alih-alih tanda minus, atau spasi tak terputus (non-breaking space) yang tidak terlihat: tanda kutip melengkung dan tanda pisah muncul sebagai \342, spasi tak terputus sebagai \302. Compiler Uno juga menolak huruf beraksen di nama variabel: menulis int größe atau int año memberi stray '\303' in program. Solusinya, ketik ulang tanda kutip dan tanda pisah di baris yang disebut pesan langsung dari keyboard-mu dan pakai hanya huruf Inggris biasa di nama variabel. Sebaliknya, karakter beraksen di dalam teks bertanda kutip ganda tidak merusak kompilasi.

'No such file or directory': library tidak ditemukan

Baris fatal error: DHT.h: No such file or directory dan compilation terminated. yang mengikutinya menyatakan bahwa file yang diminta oleh baris #include di kodemu tidak ditemukan di komputermu. Kata “fatal” berarti kompilasi berhenti total di titik itu, jadi kamu tidak akan melihat error di sisa kodemu sampai yang satu ini diperbaiki. Penyebabnya hampir selalu library yang belum terinstal. Ketika membuka proyek dari internet, baca baris #include di bagian atas satu per satu dan instal library untuk masing-masing dari Tools > Manage Libraries. Kalau kamu tidak memilih Install All di jendela yang menanyakan dependensi, library utamanya terinstal tapi library kedua yang dibutuhkannya tetap tidak ada; dalam kasus itu nama file di pesan bukan yang kamu tulis, melainkan file yang dipanggil dari dalam library (misalnya Adafruit_Sensor.h). Huruf besar dan kecil di nama file juga berpengaruh: di Linux dht.h dan DHT.h adalah file yang berbeda. Untuk tiga cara menginstal library dan masalah ZIP, lihat panduan Cara Instal Library Arduino.

File di pesanCari di Library ManagerCatatan
DHT.hDHT sensor library (Adafruit)Pilih Install All; Adafruit Unified Sensor ikut terinstal
Adafruit_Sensor.hAdafruit Unified SensorDependensi yang hilang dari library Adafruit lain
LiquidCrystal_I2C.hLiquidCrystal I2C (Frank de Brabander)Jangan instal beberapa library dengan nama yang sama; lihat peringatan di bawah
Adafruit_SSD1306.hAdafruit SSD1306Terinstal bersama Adafruit GFX dan Adafruit BusIO
MFRC522.hMFRC522 (GithubCommunity)Untuk modul RFID RC522
IRremote.hIRremoteVersi baru memakai IrReceiver.begin(); contoh lama bisa memberi warning atau error
SoftwareSerial.h (dengan ESP32 terpilih)Jangan diinstal; core ESP32 tidak menyertakannyaPakai port serial hardware ESP32, Serial2, atau instal library EspSoftwareSerial

Error 'does not name a type'

does not name a type berarti compiler mengharapkan tipe data (seperti int, float, Servo, atau LiquidCrystal_I2C) di awal baris tapi tidak mengenali kata yang kamu tulis. Ada tiga penyebab umum. Pertama, lupa baris #include library-nya: kalau Servo lid; dikompilasi tanpa Servo.h, kamu mendapat 'Servo' does not name a type. Kedua, salah mengeja tipenya: yang benar String, bukan string, dan int, bukan Int, dan compiler sering membantu dengan did you mean 'String'?. Ketiga, dan paling mengejutkan, menulis perintah di luar fungsi. Di luar fungsi kamu hanya boleh mendeklarasikan sesuatu: int angle = 0; sah, tapi kalau kamu menulis angle = 90; sendirian di baris berikutnya, compiler menganggap angle sebagai nama tipe dan melaporkan 'angle' does not name a type. Ada satu jebakan lagi yang khas Arduino: IDE otomatis menambahkan prototipe fungsi-fungsimu tepat sebelum fungsi pertama. Kalau kamu menulis fungsi yang mengembalikan tipe struct buatanmu sendiri dan mendeklarasikan struct itu di bawah setup(), prototipenya berakhir sebelum struct dan kamu mendapat error yang sama. Solusinya, pindahkan definisi struct ke bagian atas file, sebelum fungsi pertama.

C++ (Arduino IDE)
1#include <Servo.h>   // bu satır yoksa: 'Servo' does not name a type / without it: 'Servo' does not name a type
2
3struct Olcum {       // struct'ı ilk fonksiyondan önce tanımla / define structs before the first function
4  int ham;
5  float volt;
6};
7
8Servo kapak;         // tür adı büyük harfle başlar / the type name starts with a capital letter
9int aci = 0;         // dışarıda tanım ve ilk değer serbest / declaring with a value outside is fine
10// aci = 90;         // dışarıda tek başına atama: 'aci' does not name a type / bare assignment outside: error
11
12Olcum potOku() {
13  Olcum o;
14  o.ham = analogRead(A0);           // potansiyometre A0'da / potentiometer on A0
15  o.volt = o.ham * 5.0 / 1023.0;    // 0-1023 değerini volta çevir / convert 0-1023 to volts
16  return o;
17}
18
19void setup() {
20  Serial.begin(9600);
21  kapak.attach(9);   // servo sinyali D9 / servo signal on D9
22}
23
24void loop() {
25  Olcum o = potOku();
26  aci = map(o.ham, 0, 1023, 0, 180);   // atama fonksiyonun içinde / assignment inside a function
27  kapak.write(aci);
28  Serial.println(o.volt);
29  delay(20);
30}

Error 'redefinition of': mendefinisikan hal yang sama dua kali

Error redefinition of 'void setup()' menyatakan ada dua definisi dengan nama yang sama; baris note: 'void setup()' previously defined here tepat di bawahnya menunjukkan letak yang pertama. Bagi pemula, penyebab paling umum adalah menempelkan dua contoh sketch berurutan ke dalam satu file: hasilnya ada dua fungsi setup() dan dua loop(). Penyebab kedua adalah tab. Sebelum mengompilasi, Arduino IDE menggabungkan semua file .ino di folder sketch menjadi satu. Cadangan lama yang kamu salin ke folder itu (misalnya project_old.ino) atau tab kedua dengan setup() dan loop() sendiri memicu error ini walaupun kamu tidak pernah membuka tab tersebut; solusinya, pindahkan file itu keluar dari folder. Mendeklarasikan variabel yang sama dua kali menghasilkan pesan serupa: redefinition of 'int led'. Saudara error ini di linker adalah multiple definition of; muncul ketika variabel yang diberi nilai di file header (.h) di-include di dua file .cpp terpisah. Kebalikannya, undefined reference to, menunjuk ke fungsi yang prototipenya kamu tulis tapi isinya tidak pernah kamu tulis, atau namanya kamu eja berbeda.

C++ (Arduino IDE)
1// İki örneği birleştirmek: tek setup(), tek loop() / Merging two sketches: one setup(), one loop()
2const int LED_PIN = 13;          // 1. örnek: Blink / sketch 1: Blink
3const int POT_PIN = A0;          // 2. örnek: potansiyometre / sketch 2: potentiometer
4unsigned long oncekiZaman = 0;   // millis() zamanlayıcısı / millis() timer
5bool ledDurum = false;
6
7void setup() {
8  pinMode(LED_PIN, OUTPUT);      // 1. örneğin setup içeriği / setup body of sketch 1
9  Serial.begin(9600);            // 2. örneğin setup içeriği / setup body of sketch 2
10}
11
12void loop() {
13  // 1. örnek: delay yerine millis ile yanıp sönme / sketch 1: blink with millis instead of delay
14  if (millis() - oncekiZaman >= 500) {
15    oncekiZaman = millis();
16    ledDurum = !ledDurum;
17    digitalWrite(LED_PIN, ledDurum);
18  }
19  // 2. örnek: potansiyometreyi oku ve yaz / sketch 2: read and print the potentiometer
20  int deger = analogRead(POT_PIN);   // 0-1023 arası / between 0 and 1023
21  Serial.println(deger);
22  delay(50);
23}

Ikuti urutan ini ketika menggabungkan: pertama kumpulkan baris #include dari kedua sketch di bagian atas tanpa duplikat, lalu tambahkan variabel global dan konstanta; kalau nama yang sama ada di keduanya, ganti nama salah satunya. Berikutnya, masukkan isi kedua fungsi setup() ke dalam satu setup() dan isi kedua fungsi loop() ke dalam satu loop(). Kalau salah satu sketch memakai delay() yang panjang, ia akan menahan yang lain; kamu bisa mengatasinya dengan teknik pengaturan waktu millis() alih-alih delay(). Terakhir, cek apakah kedua sketch memakai pin yang sama: compiler tidak akan menyadarinya, tapi rangkaianmu tidak akan bekerja seperti yang diharapkan.

Error 'Sketch too big' dan memori tidak cukup

Di akhir setiap kompilasi yang berhasil kamu akan melihat dua baris. Ketika kamu mengompilasi contoh scope di atas untuk Uno, baris Sketch uses 2212 bytes (6%) of program storage space. Maximum is 32256 bytes. memberitahumu berapa banyak memori flash yang dipakai program, dan Global variables use 190 bytes (9%) of dynamic memory memberitahumu berapa banyak RAM yang dipakai variabel global. Kalau program tidak muat di flash, angkanya melewati 100 persen, diikuti peringatan Sketch too big dan error text section exceeds available space in board. Kalau variabel global tidak muat di RAM, yang muncul adalah Not enough memory dan data section exceeds available space in board. Ketika pemakaian RAM melewati 75 persen, IDE bisa mencetak peringatan Low memory available, stability problems may occur.: kodenya terkompilasi, tapi karena tidak ada ruang tersisa untuk variabel lokal selama berjalan, board bisa macet secara acak atau restart sendiri. Di Uno, bootloader memakai 0,5 KB dari 32 KB flash, karena itulah batasnya 32256 byte.

BoardBatas memori programRAM (memori dinamis)Catatan
Arduino Uno R332256 byte2048 byte0,5 KB dicadangkan untuk bootloader
Arduino Nano (ATmega328P)30720 byte2048 byteIDE mencadangkan 2 KB untuk kedua opsi bootloader
Arduino Leonardo28672 byte2560 byteBootloader 4 KB; kode USB juga memakan tempat
Arduino Mega 2560253952 byte8192 byteLangkah naik yang mudah untuk proyek yang tidak muat di Uno
ESP32 (partition scheme default)1310720 byte327680 byteNaik menjadi 3145728 byte dengan Huge APP
Raspberry Pi Pico (arduino-pico, 2MB no FS)2093056 byte262144 byteMencadangkan ruang untuk sistem file mengecilkan area program
C++ (Arduino IDE)
1// RAM tasarrufu: F() ve PROGMEM / Saving RAM: F() and PROGMEM
2const char mesaj[] PROGMEM = "Bu uzun metin RAM yerine flasta durur";   // flaşta saklanır / stored in flash
3const byte notalar[] PROGMEM = {60, 62, 64, 65, 67, 69, 71, 72};      // byte: int'in yarısı / byte: half of an int
4
5void setup() {
6  Serial.begin(9600);
7  Serial.println(F("Merhaba! Bu metin de flastan okunur"));   // F(): RAM harcamaz / F(): uses no RAM
8  char tampon[48];                                            // geçici RAM tamponu / temporary RAM buffer
9  strcpy_P(tampon, mesaj);                                    // flaştan RAM'e kopyala / copy from flash to RAM
10  Serial.println(tampon);
11  for (byte i = 0; i < sizeof(notalar); i++) {
12    Serial.print(pgm_read_byte(&notalar[i]));                 // flaştan bir bayt oku / read one byte from flash
13    Serial.print(' ');
14  }
15  Serial.println();
16}
17
18void loop() {
19}
  • Bungkus teks tetap dengan F(): Serial.println(F("System ready")); membaca teks langsung dari flash tanpa menyalinnya ke RAM. Hal yang sama berlaku untuk teks tetap yang kamu tampilkan di layar LCD dan OLED.
  • Pindahkan array besar ke PROGMEM: Kalau tabel nada, bitmap layar, dan teks panjang tidak pernah berubah, semuanya tidak perlu ada di RAM. Untuk teknik yang lebih rinci, lihat artikel memori Arduino tidak cukup.
  • Pilih tipe data yang tepat: Untuk nilai antara 0 dan 255, byte (1 byte) sudah cukup; di Uno sebuah int memakan 2 byte, sedangkan long dan float memakan 4.
  • Kurangi pemakaian class String: Objek String yang terus-menerus digabungkan memecah-mecah RAM; array char dengan panjang tetap lebih mudah diprediksi.
  • Kenali kebutuhan tersembunyi library layar: Adafruit SSD1306 mengalokasikan buffer 1 KB ketika program berjalan untuk layar OLED 128×64. Memori ini tidak muncul di laporan kompilasi, jadi layarnya bisa gagal menyala walaupun laporannya menunjukkan 70 persen.
  • Pindah ke board yang lebih besar: Proyek yang tidak bisa kamu jejalkan ke Uno berjalan lega di Mega atau ESP32. Di ESP32 kamu bisa memperbesar area program dari 1,25 MB menjadi 3 MB dengan memilih Huge APP (3MB No OTA/1MB SPIFFS) di Tools > Partition Scheme; dengan opsi ini pembaruan nirkabel (OTA) tidak tersedia.

Error akibat salah memilih board

Compiler selalu mengompilasi kodemu untuk prosesor board yang dipilih di Tools > Board (di IDE 2, di pemilih board di bagian atas). Kode yang sama bisa terkompilasi bersih untuk Mega dan gagal dengan Uno terpilih, karena setiap board punya hardware, nama pin, dan library bawaan paket board-nya yang berbeda. Ketika membuka proyek yang kamu temukan di internet, cek dulu untuk board apa kode itu ditulis: kode yang ditulis untuk ESP32 tidak akan terkompilasi dengan Uno terpilih, dan kode Uno yang mengakses register prosesor secara langsung tidak akan terkompilasi dengan ESP32 terpilih. Kalau board-mu sama sekali tidak terlihat di daftar, paket board-nya belum terinstal; kamu perlu menginstal paket ESP32 dan Raspberry Pi Pico dari Boards Manager. Untuk langkah-langkahnya, lihat panduan Cara Instal Arduino IDE.

Pesan errorApa yang terjadi?Solusi
“'Serial1' was not declared in this scope”Kodenya ditulis untuk Mega atau Leonardo tapi yang terpilih Uno; Uno hanya punya satu port serial hardwarePilih board yang benar atau pakai SoftwareSerial di Uno
“SoftwareSerial.h: No such file or directory”ESP32 terpilih; library ini bukan bagian dari core ESP32Pakai port serial hardware ESP32 (Serial2)
“'LED_BUILTIN' was not declared in this scope”Beberapa definisi board seperti ESP32 Dev Module tidak mendefinisikan konstanta LED bawaanTulis nomor pin langsung (GPIO 2 di banyak board DevKit)
“'D5' was not declared in this scope”Nama seperti D0–D8 ada di board ESP8266 seperti NodeMCU dan Wemos serta beberapa board lain, tapi tidak ada di Uno atau ESP32 Dev ModulePakai nomor GPIO di Uno dan ESP32, atau pilih board yang benar
“'TCCR1A' was not declared in this scope”Kode yang mengakses register timer AVR secara langsung sedang dikompilasi untuk ESP32Pakai fungsi LEDC dan timer milik ESP32
WiFi.h: No such file or directory atau 'WIFI_STA' was not declared in this scopeKode ESP32 sedang dikompilasi untuk Uno; Uno tidak punya Wi-FiPilih ESP32 Dev Module di Tools > Board
“'ledcSetup' was not declared in this scope”Core ESP32 versi 3.x tapi kodenya ditulis untuk 2.xPakai ledcAttach() dan ledcWrite() dengan nomor pin
Di awal kompilasi kamu mungkin melihat baris seperti WARNING: library LiquidCrystal_I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on esp32 architecture(s). Ini bukan error; artinya pembuat library tidak menambahkan ESP32 ke daftar board yang didukung, dan library-nya sering tetap bekerja. Pesan yang benar-benar perlu kamu waspadai adalah Multiple libraries were found for "LiquidCrystal_I2C.h": kalau dua library dengan nama yang sama terinstal, IDE memilih salah satunya, dan kalau pilihan itu tidak cocok dengan kodemu, kamu mendapat error seperti 'class LiquidCrystal_I2C' has no member named 'init'. Baris Used dan Not used di bawah pesan itu menunjukkan folder mana yang dipakai; hapus salinan yang tidak kamu pakai dari folder libraries.

Error kompilasi di ESP32

Board pengembangan ESP32
ESP32: diprogram dengan bahasa yang sama di Arduino IDE, tapi karena dikompilasi dengan compiler dan paket board yang berbeda, sebagian kode yang jalan di Uno gagal di sini.

ESP32 juga diprogram dengan bahasa Arduino, tapi karena compiler dan paket board-nya berbeda, kode yang terkompilasi bersih di Uno bisa tersangkut di ESP32. Alasan paling umum adalah versi core: di versi 3.x core Arduino ESP32, fungsi PWM berubah; ledcSetup() dan ledcAttachPin() dihapus dan diganti ledcAttach() dan ledcWrite(), yang bekerja dengan nomor pin alih-alih nomor channel. Karena itu contoh lama di internet memberi 'ledcSetup' was not declared in this scope; ubah kodenya ke fungsi baru atau instal versi 2.0.17 dari Boards Manager. Perbedaan kedua adalah pengaturan compiler. Core Uno mengompilasi kode dengan opsi -fpermissive, yang mengubah sebagian error menjadi sekadar warning; ESP32 tidak memakainya. Misalnya, mendeklarasikan variabel di dalam switch tanpa kurung kurawal terkompilasi di Uno tapi memberi error jump to case label di ESP32. Core ESP32 terbaru juga mengompilasi dengan -Werror=return-type: kalau kamu lupa return di fungsi yang harus mengembalikan nilai, kamu mendapat no return statement in function returning non-void setiap kali Compiler warnings diatur ke selain None. Di versi 2.x, mengatur Compiler warnings ke More atau All mengubah sebagian besar warning menjadi error. Untuk pengaturan dasar board-nya, lihat artikel Apa Itu ESP32.

C++ (Arduino IDE)
1// ESP32 Arduino paketi 3.x / ESP32 Arduino core 3.x
2const int LED_PIN = 2;        // birçok DevKit kartında dahili LED / onboard LED on many DevKit boards
3const int FREKANS = 5000;     // PWM frekansı 5 kHz / PWM frequency 5 kHz
4const int COZUNURLUK = 8;     // 8 bit: 0-255 arası / 8 bits: range 0-255
5
6int parlaklik(int adim) {
7  return (adim % 32) * 8;     // return unutulursa 3.x'te derleme hatası olabilir / a missing return can fail to compile on 3.x
8}
9
10void setup() {
11  Serial.begin(115200);
12  // eski 2.x kodu / old 2.x code: ledcSetup(0, FREKANS, COZUNURLUK); ledcAttachPin(LED_PIN, 0);
13  ledcAttach(LED_PIN, FREKANS, COZUNURLUK);   // 3.x: kanal otomatik seçilir / channel is picked automatically
14}
15
16void loop() {
17  for (int adim = 0; adim < 32; adim++) {
18    ledcWrite(LED_PIN, parlaklik(adim));      // 3.x: pin numarasıyla yaz / write using the pin number
19    delay(30);
20  }
21  if (Serial.available()) {
22    switch (Serial.read()) {
23      case 'h': {                             // case içinde değişken varsa süslü parantez şart / braces needed if a case declares a variable
24        int deger = ledcRead(LED_PIN);
25        Serial.println(deger);
26        break;
27      }
28      default:
29        break;
30    }
31  }
32}

Raspberry Pi Pico: error Arduino IDE dan MicroPython

Kalau kamu memprogram Pico dengan Arduino IDE, yaitu dengan core arduino-pico buatan Earle Philhower, compiler-nya tetap GCC dan semua pesan di artikel ini berlaku apa adanya. MicroPython berbeda: tidak ada tahap kompilasi terpisah sebelumnya; Pico mengubah file menjadi bytecode ketika mulai dan menjalankannya baris demi baris. Karena itu error muncul di panel Shell di bagian bawah Thonny, dalam pesan yang diawali Traceback (most recent call last):. Baca pesan ini dari bawah ke atas: baris terakhir memberitahumu jenis error dan penjelasannya, dan bagian line 7 di atasnya memberitahumu di baris mana error itu berada. Error sintaks (SyntaxError, IndentationError) dilaporkan bahkan sebelum program mulai; error lain baru muncul ketika program mencapai baris itu, jadi kodemu bisa berjalan normal beberapa lama lalu berhenti. Untuk menginstal MicroPython dan langkah pertamanya, lihat artikel Apa Itu Raspberry Pi Pico.

Error MicroPythonArtinyaSolusi
“SyntaxError: invalid syntax”Sintaks rusak: titik dua yang hilang di akhir baris if, while, atau def, atau kurung yang tidak ditutupTambahkan : di akhir baris dan hitung kurungnya
“IndentationError: unexpected indent”Indentasi tidak konsisten; spasi dan tab tercampurPakai 4 spasi di setiap blok
“NameError: name 'led' isn't defined”Namanya salah eja atau dipakai sebelum didefinisikanCek huruf besar-kecil dan tempat ia didefinisikan
“ImportError: no module named 'ssd1306'”File driver-nya tidak ada di PicoSimpan ssd1306.py ke Pico dengan Thonny
“AttributeError: 'Pin' object has no attribute 'toggel'”Objek itu tidak punya fungsi tersebutPerbaiki nama fungsinya: toggle()
“TypeError: can't convert 'int' object to str implicitly”Teks dan angka digabung dengan +Pakai str(angka) atau berikan nilainya ke print dipisahkan koma
“OSError: [Errno 5] EIO”Perangkat I2C tidak menjawabCek pengkabelan, alamat, serta pin SDA dan SCL
MicroPython
1from machine import Pin
2import time
3
4led = Pin("LED", Pin.OUT)     # Pico ve Pico W dahili LED / onboard LED on Pico and Pico W
5sayac = 0
6
7while True:                   # iki nokta unutulursa SyntaxError / a missing colon gives SyntaxError
8    led.toggle()              # blok içinde 4 boşluk girinti / 4-space indent inside the block
9    sayac += 1
10    print("Sayac:", sayac)    # "Sayac: " + sayac yazmak TypeError verir / "Sayac: " + sayac raises TypeError
11    time.sleep(0.5)

Tabel error kompilasi Arduino dan solusinya

Pesan errorPenyebabSolusi
exit status 1 / Compilation error: exit status 1 (pesan umum)Salah satu program di rantai kompilasi atau upload gagalGulir ke atas dan baca baris pertama yang berisi error:
“'x' was not declared in this scope”Salah ketik, huruf besar-kecil, scope, atau #include yang hilangPerbaiki namanya, jadikan variabel global, include library-nya
“expected ';' before ...”Titik koma hilang di baris sebelumnyaCek baris di atas baris yang dilaporkan (Uno) atau akhir baris yang dilaporkan (ESP32)
“expected '}' at end of input”Ada kurung kurawal yang tidak pernah ditutupCocokkan kurungnya dengan Auto Format (Ctrl+T)
“X.h: No such file or directory”Library belum terinstal atau nama filenya salahInstal dari Library Manager beserta dependensinya
“'X' does not name a type”#include hilang, nama tipe salah, atau perintah di luar fungsiInclude library-nya, cek ejaan String dan int, pindahkan perintah ke dalam fungsi
“redefinition of 'void setup()'”Dua fungsi setup() atau file .ino tambahan di folderGabungkan sketch-nya, pindahkan file lama keluar dari folder
“stray '\342' in program”Tanda kutip melengkung atau tanda pisah hasil salinan, atau huruf beraksen di nama variabelKetik ulang tanda kutipnya, pakai huruf Inggris biasa di nama
“'class X' has no member named 'y'”Nama fungsi salah atau versi library berbedaLihat contoh bawaan library-nya, instal versi yang benar
“too few arguments to function / too many arguments to function”Nilai yang diberikan ke fungsi terlalu sedikit atau terlalu banyakBandingkan dengan definisi di baris note: declared here
“lvalue required as left operand of assignment”Penugasan alih-alih perbandingan: if (digitalRead(2) = HIGH)Pakai == untuk perbandingan
“jump to case label”Variabel dideklarasikan di case tanpa kurung kurawal (error di ESP32)Bungkus blok case dengan { }
“undefined reference to `blink()'”Fungsinya hanya punya prototipe, tanpa isiTulis fungsinya atau perbaiki namanya
“Sketch too big / text section exceeds available space in board”Program tidak muat di flashPerkecil kodenya, pilih board yang lebih besar, Partition Scheme di ESP32
“data section exceeds available space in board”Variabel global tidak muat di RAMMakro F(), tipe data yang lebih kecil, pindahkan array ke PROGMEM
“#error This library only supports boards with ...”Library tidak mendukung arsitektur board yang dipilihInstal library yang dibuat untuk board-mu atau ganti board-nya
Cara menekan error kompilasi seminimal mungkin adalah menumbuhkan kodemu sedikit demi sedikit: mulai dari contoh yang berjalan, tekan Verify setiap kali menambahkan bagian baru, dan ketika muncul error, lihat hanya beberapa baris terakhir yang kamu tambahkan. Waspadai juga kesalahan yang tidak bisa ditangkap compiler: if (state = HIGH) yang ditulis dengan variabel terkompilasi tanpa error, tapi karena isinya penugasan, bukan perbandingan, kondisinya selalu benar; titik koma di akhir if (distance < 10); juga membuat kondisinya tidak berguna. Kalau kamu mengatur Compiler warnings ke All, sebagian besar kesalahan logika seperti ini akan terlihat sebagai warning.

Langkah berikutnya untuk menulis kode tanpa error

  • Perkuat dasarnya: Artikel dasar pemrograman Arduino menjelaskan variabel, scope, fungsi, dan loop; sebagian besar error di artikel ini berasal dari topik-topik tersebut.
  • Pelajari ejaan perintah yang benar: Daftar Perintah Arduino menunjukkan sintaks dan parameter setiap perintah beserta contohnya.
  • Instal library dengan benar: Panduan Cara Instal Library Arduino membahas pesan No such file or directory dan Multiple libraries were found secara rinci.
  • Lihat apa yang dilakukan kodemu selama berjalan: Untuk kode yang terkompilasi tapi tidak berperilaku seperti harapanmu, mencetak variabel dengan Serial Monitor adalah cara tercepat untuk mendiagnosisnya.
  • Coba tanpa board: Di simulator Wokwi atau Tinkercad kamu bisa mengompilasi kodemu dan menjalankannya bersama rangkaiannya.
  • Cek kode buatan AI: Kode yang dihasilkan chatbot sering ditulis untuk versi library lama atau untuk board lain; artikel kode Arduino dengan AI menjelaskan cara menangkap masalah-masalah ini.

Error kompilasi mungkin terlihat menakutkan pada awalnya, tapi sebenarnya compiler memberitahumu di mana masalahnya dan sering juga cara memperbaikinya: file, baris, kolom, dan penjelasan singkat. Baca error pertama, perbaiki yang itu saja, kompilasi lagi, dan ulangi siklusnya; setelah beberapa proyek kamu akan mendapati dirimu menyelesaikan error dalam hitungan detik. Begitu kodemu terkompilasi dan ter-upload, kamu bisa lanjut ke proyek LED, tombol, sensor, dan layar di aplikasi BlueGrays: setiap proyek untuk Arduino, ESP32, dan Raspberry Pi Pico dilengkapi skema rangkaian dan kode yang terkompilasi bersih, langkah demi langkah.

Pertanyaan umum

Apa arti exit status 1 di Arduino?

exit status 1 adalah pesan umum yang menyatakan bahwa salah satu program yang dijalankan selama kompilasi atau upload berakhir dengan error, dan pesan itu sendiri tidak memberitahumu penyebabnya. Gulir ke atas di panel output dan cari baris pertama yang berisi error:; nama file, nomor baris, dan penjelasannya ada di sana. Begitu error itu diperbaiki dan kamu mengompilasi lagi, exit status 1 juga hilang.

Bagaimana cara mengatasi 'was not declared in this scope' di Arduino?

Artinya compiler tidak mengenali variabel, fungsi, atau konstanta yang kamu pakai di titik itu. Penyebab paling umum adalah kesalahan huruf besar-kecil (digitalwrite), variabel yang dideklarasikan di dalam fungsi lain, dan library yang belum di-include. Mengecek ejaan dan mendeklarasikan variabel bersama di luar semua fungsi biasanya sudah cukup.

Apa arti “expected ';' before” di Arduino?

Error ini menyatakan ada titik koma yang hilang. Karena compiler Uno baru menyadarinya ketika membaca kata berikutnya, baris di pesannya biasanya satu baris terlalu bawah, jadi tambahkan titik koma di akhir baris tepat di atasnya. Di ESP32 dan Pico pesannya langsung menunjuk ke baris yang kehilangan titik koma. Memakai koma alih-alih titik koma di dalam kurung loop for memberi pesan yang sama.

Kenapa muncul 'does not name a type' di Arduino?

Compiler mengharapkan tipe data di awal baris tapi tidak mengenali kata yang kamu tulis. Lupa baris #include library-nya (misalnya Servo), menulis string alih-alih String, dan menaruh penugasan polos seperti angle = 90; di luar fungsi adalah tiga penyebab paling umum. Kalau kamu memakai tipe struct buatanmu sendiri di Arduino, definisikan sebelum fungsi pertama.

Bagaimana cara mengatasi 'Sketch too big' di Arduino?

Pesan ini berarti program tidak muat di memori flash board; di Uno batasnya 32256 byte. Hapus library dan baris debug yang tidak dipakai, pindahkan array konstanta besar ke PROGMEM, atau pindah ke board dengan memori lebih besar seperti Mega atau ESP32. Di ESP32, memilih Huge APP dari menu Partition Scheme memperbesar area program menjadi sekitar 3 MB.

Kenapa kodeku terkompilasi tapi tidak mau di-upload ke Arduino?

Kalau kompilasi berhasil, kamu akan melihat baris Sketch uses yang menunjukkan berapa byte yang dipakai program; error setelah itu termasuk tahap upload dan berhubungan dengan kabel, driver, port, atau pilihan board, bukan dengan kode. Baris yang diawali avrdude menunjuk ke masalah upload di Uno dan Nano, dan baris esptool di ESP32. Dalam kasus itu, ikuti langkah-langkah di panduan Arduino gagal upload secara berurutan.

Lihat semua proyek
LED Berkedip
#1Pemula

LED Berkedip

"Halo" pertama di dunia elektronika: menyalakan dan mematikan satu LED. Arduino menyalakan dan mematikan LED dengan jeda singkat, sehingga cahayanya berkedip cepat. Kamu melihat dengan cara paling sed

4.6(188)
1125
Kendali LED dengan Tombol Tekan (Tekan)
#9Pemula

Kendali LED dengan Tombol Tekan (Tekan)

Persis seperti bel pintu: lampu tetap menyala selama kamu menekan, dan mati ketika kamu melepasnya. Arduino terus mendengarkan tombol; selama ditekan LED menyala, dan begitu jarimu terangkat LED mati.

4.8(113)
229
Pengukuran Jarak HC-SR04 (Tampilan Serial)
#27Pemula

Pengukuran Jarak HC-SR04 (Tampilan Serial)

Sensor HC-SR04 bekerja persis seperti kelelawar yang mencari jalan dalam gelap: ia mengirim suara yang tidak bisa kamu dengar, mendengarkan pantulannya, dan mengukur seberapa jauh benda di depannya. A

4.6(46)
71
Suhu dan Kelembapan dengan DHT11
#55Menengah

Suhu dan Kelembapan dengan DHT11

Seberapa hangat kamarmu, dan apakah udaranya lembap atau kering? Sensor DHT11 mengukur suhu dan kelembapan, dan Arduino menulis nilainya di layar LCD dua baris, diperbarui setiap beberapa detik. Jika

4.7(47)
73
LED Berkedip dengan ESP32
#103Pemula

LED Berkedip dengan ESP32

Mengajarkan penggunaan output GPIO dasar dengan ESP32. Kita membuat efek berkedip dengan menyalakan dan mematikan LED dari pin digital. Versi ESP32 dari proyek blink klasik di Arduino UNO; perintah blink dasar di lingkungan Arduino sama, tetapi susunan pin ESP32 dan level GPIO 3,3 V-nya berbeda dengan Arduino UNO.

4.7(37)
99
Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)
#147Pemula

Kedip LED Bawaan Raspberry Pi Pico (Pico dan Pico W)

Proyek pembuka seri Raspberry Pi Pico! Kita mengedipkan LED hijau bawaan untuk memastikan board bekerja; percobaan "Hello World" klasik. TANPA komponen eksternal, hanya Pico dan kabel USB. Kodenya ditulis dalam MicroPython (bahasa resmi dari Raspberry Pi Foundation). Pelajari kelas machine.Pin, mode Pin.OUT, metode led.on()/off(), dan time.sleep() di Thonny IDE, dan ikuti setiap perubahan di output Serial (REPL). Juga pas untuk menguji firmware MicroPython.

5.0(1)
10
Menggunakan Layar LCD dengan I2C
#32Pemula
Premium

Menggunakan Layar LCD dengan I2C

Beri Arduino-mu layar sendiri dan buat ia menulis pesan pertamanya. Layar LCD dua baris tersambung hanya dengan beberapa kabel; sapaan muncul di baris atas, lalu pesan kedua di baris bawah, layar dibe

4.8(53)
70
Menggunakan Motor Servo
#35Pemula
Premium

Menggunakan Motor Servo

Lengan motor servo kecil berputar ke tiga posisi bergantian: penuh ke awal, tepat ke tengah, dan penuh ke akhir, menunggu dua detik di setiap perhentian. Arduino memberi tahu motor sudut mana yang har

4.7(48)
67