Arduino exit status 1 Hatası: Derleme Hataları ve Çözümleri
Arduino exit status 1 hatası ne demek? was not declared in this scope, expected ';', No such file, does not name a type ve Sketch too big hatalarını çöz.
Arduino exit status 1 hatası, kodunun derlenemediğini, yani derleyicinin yazdığın programı işlemcinin anlayacağı makine koduna çeviremediğini söyleyen genel bir mesajdır; asıl sebep hiçbir zaman bu satırda yazmaz. Sebep, çıktı panelinde onun birkaç satır yukarısında duran ve error: kelimesini içeren ilk satırdadır: bir ismi yanlış yazmışsındır, bir noktalı virgülü unutmuşsundur, bir kütüphane kurulu değildir ya da kod başka bir kart için yazılmıştır. Arduino IDE 2'de sağ altta beliren Compilation error: exit status 1 (Türkçe arayüzde Derleme hatası: exit status 1) bildirimi de, eski 1.8 sürümündeki Arduino Uno kartı için derleme hatası satırı da aynı anlama gelir.
Bu rehberde önce derlemenin arka planda nasıl çalıştığını ve bir hata mesajını dosya, satır ve sütun bilgisine ayırarak okumayı göreceksin. Ardından en sık karşılaşılan derleme hatalarını tek tek ele alacağız: was not declared in this scope, expected ';' before, No such file or directory, does not name a type, redefinition of ve Sketch too big. Her biri için hatayı doğuran durumu, derleyicinin verdiği gerçek mesajı ve düzeltilmiş, hatasız derlenen bir örnek kodu bulacaksın. Yanlış kart seçiminden doğan hataları, ESP32 ve Raspberry Pi Pico'ya özgü durumları ve yazının sonunda hepsini bir arada gösteren bir hata-çözüm tablosunu da ekledik. Kodun hatasız derleniyor ama karta yüklenmiyorsa sorun başka bir aşamadadır; o durum için Arduino Kod Yüklenmiyor rehberine bak.

Arduino exit status 1 nedir? Derleme ile yükleme arasındaki fark
Doğrula (onay işareti) ya da Yükle düğmesine bastığında Arduino IDE arka planda birkaç program çalıştırır. Önce taslak klasöründeki .ino dosyalarını birleştirir, başına Arduino.h başlık dosyasını ve fonksiyonların prototiplerini ekleyerek onu sıradan bir C++ dosyasına çevirir. Sonra Uno için avr-g++, ESP32 için xtensa-esp32-elf-g++ gibi bir derleyici bu dosyayı ve kullandığın kütüphaneleri derler, bağlayıcı (linker) bütün parçaları tek bir programda birleştirir ve en son programın karta sığıp sığmadığı kontrol edilir. Her program işini bitirince bir çıkış kodu döndürür: 0 başarı, 1 ise hata demektir. "exit status 1" tam olarak bunu söyler: zincirdeki programlardan biri başarısız oldu. Bu yüzden aynı ifade, yükleme sırasında avrdude başarısız olduğunda da görünür; hangisi olduğunu önündeki mesajdan anlarsın.
| Çıktıda gördüğün | Aşama | Ne anlama gelir? |
|---|---|---|
| error: ... ve en sonda exit status 1 | Derleme | Kodunda ya da bir kütüphanede C++ hatası var; asıl sebep error: satırında |
| fatal error: DHT.h: No such file or directory | Derleme (ön işleme) | #include ile istenen dosya bulunamadı; kütüphane eksik ya da adı yanlış |
| undefined reference to ... ve collect2: error: ld returned 1 exit status | Bağlama (linker) | Bir fonksiyon bildirilmiş ama gövdesi hiçbir yerde yok |
| multiple definition of ... | Bağlama (linker) | Aynı değişken ya da fonksiyon iki ayrı dosyada tanımlanmış |
| Sketch too big ve text section exceeds available space in board | Boyut kontrolü | Program kartın flaş belleğine sığmıyor |
| Not enough memory ve data section exceeds available space in board | Boyut kontrolü | Global değişkenler RAM'e sığmıyor |
| Failed uploading: uploading error: exit status 1 | Yükleme | Kod derlendi ama karta yazılamadı; avrdude ya da esptool satırlarına bak |
Arduino hata mesajı nasıl okunur?
Derleyicinin her hata satırı aynı kalıbı izler: önce dosyanın adı, sonra iki nokta üst üsteyle ayrılmış satır ve sütun numarası, ardından hatanın türü ve açıklaması gelir. Hemen üstünde çoğu zaman In function 'void loop()': gibi bir satır, hatanın hangi fonksiyonun içinde olduğunu söyler; altında ise hatalı satırın bir kopyası ve sorunlu yeri gösteren küçük bir ^ işareti bulunur. error derlemeyi durduran gerçek bir hatadır, warning yalnızca uyarıdır ve kod yine de derlenir, note ise bir önceki mesaja ek bilgi verir. Derleyici çoğu zaman bir de öneri ekler: aşağıdaki örnekte suggested alternative: 'digitalWrite' diyerek doğru yazımı kendisi gösterir.
| Parça | Örnekteki değer | Anlamı |
|---|---|---|
| Dosya | Blink.ino | Hatanın bulunduğu dosya; birden çok sekmen varsa hangisi olduğunu buradan anlarsın |
| Satır | 6 | Derleyicinin hatayı fark ettiği satır; asıl hata bazen bir üst satırdadır |
| Sütun | 3 | Satırın kaçıncı karakteri olduğu; ^ işaretinin gösterdiği yer |
| Tür | error | error derlemeyi durdurur, warning uyarır, note ek bilgi verir |
| Mesaj | 'digitalwrite' was not declared in this scope | Sorunu anlatan kısım; internette aratacağın metin budur |
| Öneri | note: suggested alternative: 'digitalWrite' | Derleyicinin tahmini; çoğu zaman doğru yazımı gösterir |
- Dosya > Tercihler penceresinde Ayrıntılı çıktıyı görüntüle satırındaki derle kutusunu işaretle. Böylece derleyicinin hangi dosyaları ve hangi kütüphane klasörlerini kullandığını da görürsün.
- Kartın takılı olmasına gerek yok: Doğrula (onay işareti) düğmesine bas. Doğrula yalnızca derler; hata derleme aşamasındaysa Yükle'ye basmak sadece zaman kaybettirir.
- Çıktı panelini en üste kaydır ve error: geçen ilk satırı bul. Ondan sonraki hataların çoğu bu ilk hatanın zincirleme sonucudur.
- Mesajdaki satır numarasına git. IDE 2 hatanın olduğu karakterin altını kırmızıyla çizer, 1.8 sürümü bütün satırı kırmızıya boyar. O satırda bir sorun göremiyorsan bir üst satıra bak.
- Yalnızca o ilk hatayı düzelt ve yeniden Doğrula'ya bas. Hata sayısı bir anda azalıyorsa doğru yoldasın.
- İnternette arayacaksan mesajı kendi değişken adlarından ve dosya yollarından arındır: 'sayac' was not declared in this scope yerine was not declared in this scope aratmak çok daha fazla sonuç getirir. Bir forumda yardım isterken ise çıktının tamamını kopyala.
'was not declared in this scope' hatası ve çözümü
Bu mesaj, derleyicinin kullandığın bir ismi o noktada tanımadığını söyler; Türkçesiyle "bu kapsamda tanımlanmamış". En sık sebep yazım hatasıdır: Arduino büyük-küçük harfe duyarlıdır ve digitalwrite, Digitalwrite ve digitalWrite üç farklı isimdir. İkinci büyük sebep kapsamdır (scope): bir değişkeni setup() içinde tanımlarsan o değişken yalnızca setup() çalışırken yaşar ve loop() onu göremez. Bir değişkeni birden çok fonksiyonda kullanacaksan bütün fonksiyonların dışında, dosyanın en üstünde tanımla. Değişkeni kullandığın satırdan sonra tanımlamak da aynı hatayı verir, çünkü derleyici dosyayı yukarıdan aşağıya okur. Son olarak bu hata, kütüphanesini eklemediğin bir nesneyi (Wire, Servo) ya da seçili kartta bulunmayan bir özelliği (Uno'da Serial1) kullandığında da çıkar.
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}| Sebep | Hatalı yazım | Doğrusu |
|---|---|---|
| Büyük-küçük harf | digitalwrite(13, HIGH); | digitalWrite(13, HIGH); |
| Sabitin adı yanlış | pinMode(13, OUPUT); | pinMode(13, OUTPUT); |
| Değişken başka fonksiyonda tanımlı | setup() içinde int led = 13; tanımlayıp loop() içinde led kullanmak | int led = 13; satırını bütün fonksiyonların dışına, en üste taşı |
| Değişken kullanıldıktan sonra tanımlanmış | sayac++; satırından sonra gelen int sayac = 0; | Tanımı kullanıldığı yerden önceye al |
| Kütüphane eklenmemiş | #include satırı olmadan Wire.begin(); | Dosyanın başına #include <Wire.h> ekle |
| Kartta olmayan özellik | Uno seçiliyken Serial1.begin(9600); | Mega gibi birden çok seri portu olan kartı seç ya da SoftwareSerial kullan |
| Ek .cpp dosyasında sıralama | Bir .cpp sekmesinde, tanımından önce çağrılan fonksiyon | .cpp dosyalarında prototipi (void yak();) en üste yaz; bunu .ino'da IDE kendisi yapar |
'expected ';' before' ve diğer söz dizimi hataları
C++'ta her ifade noktalı virgülle biter. Bir satırın sonunda noktalı virgülü unuttuğunda derleyici bunu ancak bir sonraki kelimeyi okuduğunda fark eder. Bu yüzden Uno'nun derleyicisinde expected ';' before 'delay' mesajındaki satır numarası hatanın bir alt satırını gösterir: eksik noktalı virgül, delay'den önceki satırın sonundadır. ESP32 ve Pico paketlerindeki daha yeni derleyiciler ise doğrudan noktalı virgülün eksik olduğu satırın sonunu gösterir. Fonksiyonun son satırında unutursan mesaj expected ';' before '}' token olur. Parantez hataları da benzer davranır. Bir if bloğunun ya da fonksiyonun süslü parantezini kapatmayı unutursan derleyici kodu dosyanın sonuna kadar okur ve ancak orada expected '}' at end of input der. Kapanmamış parantez setup() içindeyse bir de a function-definition is not allowed here before '{' token mesajı gelir, çünkü derleyiciye göre loop() artık setup()'ın içinde tanımlanmaya çalışılan bir fonksiyondur. for döngüsünün parantezinde noktalı virgül yerine virgül kullanmak da bu ailenin klasik hatasıdır.
| Mesaj | En olası sebep | Nereye bakmalı? |
|---|---|---|
| expected ';' before 'delay' | Bir önceki satırın sonunda noktalı virgül yok | Uno'da mesajdaki satırın bir üstü, ESP32'de mesajdaki satırın sonu |
| expected ';' before '}' token | Bloğun son satırında noktalı virgül yok | Kapanış parantezinden hemen önceki satır |
| expected ';' before '<' token | for parantezinde noktalı virgül yerine virgül var | for (int i = 0; i < 10; i++) biçiminde yaz |
| expected '}' at end of input | Bir süslü parantez kapatılmamış | Otomatik Biçimlendir ile girintilere bak; her { için bir } olmalı |
| a function-definition is not allowed here before '{' token | Önceki fonksiyonun kapanış parantezi eksik | Mesajdaki fonksiyondan önceki fonksiyonun sonu |
| expected ')' before ';' token | Açılan normal parantez kapanmamış | if koşullarındaki ve fonksiyon çağrılarındaki parantez sayısı |
| expected primary-expression before ')' token | Parantez içinde bir değer eksik | digitalWrite(13, ) gibi boş bırakılmış bir argüman |
| expected constructor, destructor, or type conversion before '(' token | Bir komut fonksiyonların dışına yazılmış | pinMode() gibi komutları setup() içine taşı |
| expected unqualified-id before '{' token | Fonksiyon başlığından sonra noktalı virgül konmuş | void loop(); { yerine void loop() { yaz |
'No such file or directory': kütüphane bulunamadı
fatal error: DHT.h: No such file or directory ve hemen ardından gelen compilation terminated. satırları, kodundaki bir #include satırının istediği dosyanın bilgisayarda bulunamadığını söyler. "fatal" kelimesi derlemenin o noktada tamamen durduğunu anlatır; bu yüzden bu hatayı çözmeden kodun geri kalanındaki hataları göremezsin. Sebep neredeyse her zaman kütüphanenin kurulmamış olmasıdır. İnternetten aldığın bir projeyi açtığında kodun başındaki #include satırlarını tek tek oku ve her birinin kütüphanesini Araçlar > Kütüphaneleri Yönet ekranından kur. Bağımlılıkları soran pencerede Tümünü kur seçeneğini seçmezsen ana kütüphane kurulur ama onun ihtiyaç duyduğu ikinci kütüphane eksik kalır; bu durumda mesajdaki dosya adı senin yazdığın değil, kütüphanenin içinden çağrılan bir dosya olur (örneğin Adafruit_Sensor.h). Dosya adındaki büyük-küçük harfler de önemlidir: Linux'ta dht.h ile DHT.h farklı dosyalardır. Kütüphane kurmanın üç yolu ve ZIP sorunları için Arduino Kütüphane Ekleme rehberine bakabilirsin.
| Mesajdaki dosya | Kütüphane Yöneticisi'nde ara | Not |
|---|---|---|
| DHT.h | DHT sensor library (Adafruit) | Kurarken Tümünü kur seç; Adafruit Unified Sensor da gelir |
| Adafruit_Sensor.h | Adafruit Unified Sensor | Başka bir Adafruit kütüphanesinin eksik kalan bağımlılığı |
| LiquidCrystal_I2C.h | LiquidCrystal I2C (Frank de Brabander) | Aynı adlı birden çok kütüphane kurma; aşağıdaki uyarıya bak |
| Adafruit_SSD1306.h | Adafruit SSD1306 | Adafruit GFX ve Adafruit BusIO ile birlikte kurulur |
| MFRC522.h | MFRC522 (GithubCommunity) | RC522 RFID modülü için |
| IRremote.h | IRremote | Yeni sürümler IrReceiver.begin() kullanır; eski örnekler uyarı ya da hata verebilir |
| SoftwareSerial.h (ESP32 seçiliyken) | Kurma; ESP32 paketinde yok | ESP32'nin donanım seri portu Serial2'yi kullan ya da EspSoftwareSerial kütüphanesini kur |
'does not name a type' hatası
does not name a type, derleyicinin bir satırın başında bir veri türü (int, float, Servo, LiquidCrystal_I2C gibi) beklediğini ama yazdığın kelimeyi tanıyamadığını söyler. Üç yaygın sebebi vardır. Birincisi, kütüphanenin #include satırını unutmaktır: Servo kapak; satırı Servo.h eklenmeden derlenirse 'Servo' does not name a type hatası çıkar. İkincisi, türün adını yanlış yazmaktır: string yerine String, Int yerine int doğrudur ve derleyici çoğu zaman did you mean 'String'? diye yardım eder. Üçüncüsü ve en şaşırtıcı olanı, fonksiyonların dışına bir komut yazmaktır. Fonksiyon dışında yalnızca tanım yapılabilir: int aci = 0; geçerlidir, ama sonraki bir satırda tek başına aci = 90; yazarsan derleyici aci kelimesini bir tür sanır ve 'aci' does not name a type der. Arduino'ya özgü bir tuzak daha var: IDE, fonksiyonlarının prototiplerini otomatik olarak ilk fonksiyonun hemen önüne ekler. Kendi tanımladığın bir struct türünü döndüren bir fonksiyon yazdıysan ve struct'ı setup()'ın altında tanımladıysan prototip struct'tan önce kalır ve aynı hata çıkar. Çözüm, struct tanımlarını dosyanın en üstüne, ilk fonksiyondan önceye taşımaktır.
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}'redefinition of' hatası: aynı şeyi iki kez tanımlamak
redefinition of 'void setup()' hatası, aynı isimde iki tanım olduğunu söyler; hemen altındaki note: 'void setup()' previously defined here satırı da ilk tanımın yerini gösterir. Yeni başlayanlarda bunun en sık sebebi iki örnek kodu tek dosyaya art arda yapıştırmaktır: ortaya iki setup() ve iki loop() çıkar. İkinci sebep sekmelerdir. Arduino IDE, taslak klasöründeki bütün .ino dosyalarını derlemeden önce tek bir dosyada birleştirir. Klasöre kopyaladığın eski bir yedek (örneğin proje_eski.ino) ya da kendi setup() ve loop() fonksiyonlarını içeren ikinci bir sekme, sen o sekmeyi hiç açmasan bile bu hatayı verir; çözüm o dosyayı klasörden çıkarmaktır. Aynı değişkeni iki kez tanımlamak da benzer bir mesaj üretir: redefinition of 'int led'. Bu hatanın bağlayıcıdaki kardeşi multiple definition of mesajıdır; bir başlık (.h) dosyasında değer atanmış bir değişken iki ayrı .cpp dosyasına eklendiğinde çıkar. Tersi olan undefined reference to ise prototipini yazdığın ama gövdesini hiç yazmadığın ya da adını farklı yazdığın bir fonksiyonu işaret eder.
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}Birleştirirken şu sırayı izle: önce iki koddaki #include satırlarını tekrarsız olarak en üste topla, sonra global değişkenleri ve sabitleri ekle; aynı isim iki kodda da varsa birini yeniden adlandır. Ardından iki setup() fonksiyonunun içini tek bir setup()'a, iki loop()'un içini de tek bir loop()'a yerleştir. Kodlardan biri uzun delay() kullanıyorsa diğerini bekletir; bunu delay() yerine millis() ile zamanlama yöntemiyle çözebilirsin. Son olarak iki kodun aynı pini kullanıp kullanmadığını kontrol et: derleyici bunu fark etmez ama devren beklediğin gibi çalışmaz.
'Sketch too big' ve bellek yetersiz hataları
Her başarılı derlemenin sonunda iki satır görürsün. Yukarıdaki kapsam örneğini Uno için derlediğinde Sketch uses 2212 bytes (6%) of program storage space. Maximum is 32256 bytes. satırı programın flaş bellekte ne kadar yer kapladığını, Global variables use 190 bytes (9%) of dynamic memory satırı da global değişkenlerin RAM'in ne kadarını kullandığını söyler. Program flaşa sığmazsa yüzde 100'ü geçer, ardından Sketch too big uyarısı ve text section exceeds available space in board hatası gelir. Global değişkenler RAM'e sığmazsa bu kez Not enough memory ve data section exceeds available space in board görürsün. RAM kullanımı yüzde 75'i geçtiğinde IDE Low memory available, stability problems may occur. uyarısını verebilir: kod derlenir ama çalışırken yerel değişkenlere yer kalmadığı için kart rastgele donabilir ya da kendi kendine yeniden başlayabilir. Uno'da 32 KB flaşın 0,5 KB'ını bootloader kullandığı için üst sınır 32256 bayttır.
| Kart | Program belleği üst sınırı | RAM (dinamik bellek) | Not |
|---|---|---|---|
| Arduino Uno R3 | 32256 bayt | 2048 bayt | 0,5 KB bootloader'a ayrılır |
| Arduino Nano (ATmega328P) | 30720 bayt | 2048 bayt | IDE iki bootloader seçeneğinde de 2 KB ayırır |
| Arduino Leonardo | 28672 bayt | 2560 bayt | 4 KB bootloader; USB kodu da yer kaplar |
| Arduino Mega 2560 | 253952 bayt | 8192 bayt | Uno'ya sığmayan projeler için kolay geçiş |
| ESP32 (varsayılan bölümleme) | 1310720 bayt | 327680 bayt | Huge APP seçilirse 3145728 bayta çıkar |
| Raspberry Pi Pico (arduino-pico, 2MB no FS) | 2093056 bayt | 262144 bayt | Dosya sistemine yer ayırırsan program alanı küçülür |
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(¬alar[i])); // flaştan bir bayt oku / read one byte from flash
13 Serial.print(' ');
14 }
15 Serial.println();
16}
17
18void loop() {
19}- Sabit metinleri F() içine al: Serial.println(F("Sistem hazir")); metni RAM'e kopyalamadan doğrudan flaştan okur. LCD ve OLED ekranlara yazdırılan sabit metinler için de aynısı geçerlidir.
- Büyük dizileri PROGMEM'e taşı: Nota tabloları, ekran bitmap'leri ve uzun metinler değişmiyorsa RAM'de durmalarına gerek yoktur. Ayrıntılı teknikler için Arduino bellek yetersiz yazısına bak.
- Doğru veri türünü seç: 0 ile 255 arasındaki bir değer için byte (1 bayt) yeterlidir; int Uno'da 2, long ve float 4 bayt yer kaplar.
- String sınıfını azalt: Sürekli birleştirilen String nesneleri RAM'i parçalar; sabit uzunlukta char dizileri daha öngörülebilirdir.
- Ekran kütüphanelerinin gizli ihtiyacını bil: Adafruit SSD1306, 128×64 OLED ekran için 1 KB'lık tamponu çalışma anında ayırır. Bu bellek derleme raporunda görünmez; rapor yüzde 70 dese bile ekran açılmayabilir.
- Daha büyük bir karta geç: Uno'ya sığdıramadığın bir proje Mega'da ya da ESP32'de rahatça çalışır. ESP32'de Araçlar > Partition Scheme menüsünden Huge APP (3MB No OTA/1MB SPIFFS) seçerek program alanını 1,25 MB'tan 3 MB'a çıkarabilirsin; bu seçenekte kablosuz güncelleme (OTA) kullanılamaz.
Yanlış kart seçimiyle gelen hatalar
Derleyici kodunu her zaman Araçlar > Kart menüsünde (IDE 2'de üstteki kart seçicide) seçili kartın işlemcisi için derler. Aynı kod Mega için hatasız derlenirken Uno seçiliyken hata verebilir, çünkü her kartın donanımı, pin adları ve kart paketiyle gelen kütüphaneleri farklıdır. İnternetten bulduğun bir projeyi açtığında önce hangi kart için yazıldığına bak: ESP32 için yazılmış bir kod Uno seçiliyken, Uno için yazılmış ve işlemcinin yazmaçlarına doğrudan erişen bir kod da ESP32 seçiliyken derlenmez. Kartını listede hiç göremiyorsan kart paketi kurulu değildir; ESP32 ve Raspberry Pi Pico paketlerini Kart Yöneticisi'nden kurman gerekir. Adımlar için Arduino IDE kurulumu rehberine bakabilirsin.
| Hata mesajı | Ne oldu? | Çözüm |
|---|---|---|
| 'Serial1' was not declared in this scope | Kod Mega ya da Leonardo için yazılmış, Uno seçili; Uno'nun tek donanım seri portu var | Doğru kartı seç ya da Uno'da SoftwareSerial kullan |
| SoftwareSerial.h: No such file or directory | ESP32 seçili; ESP32 paketinde bu kütüphane yok | ESP32'nin donanım seri portlarını (Serial2) kullan |
| 'LED_BUILTIN' was not declared in this scope | ESP32 Dev Module gibi bazı kart tanımlarında dahili LED sabiti yok | Pin numarasını doğrudan yaz (birçok DevKit kartında GPIO 2) |
| 'D5' was not declared in this scope | D0–D8 gibi adlar NodeMCU ve Wemos gibi ESP8266 kartlarında ve bazı başka kartlarda tanımlı; Uno'da ve ESP32 Dev Module'de yok | Uno ve ESP32'de GPIO numarasını yaz ya da doğru kartı seç |
| 'TCCR1A' was not declared in this scope | AVR zamanlayıcı yazmaçlarına doğrudan erişen kod ESP32 için derleniyor | ESP32'nin LEDC ve zamanlayıcı fonksiyonlarını kullan |
| WiFi.h: No such file or directory ya da 'WIFI_STA' was not declared in this scope | ESP32 kodu Uno için derleniyor; Uno'da Wi-Fi yok | Araçlar > Kart menüsünden ESP32 Dev Module seç |
| 'ledcSetup' was not declared in this scope | ESP32 paketi 3.x sürümünde, kod 2.x için yazılmış | ledcAttach() ve pin numarasıyla ledcWrite() kullan |
ESP32'de derleme hataları

ESP32 de Arduino diliyle programlanır, ama derleyicisi ve kart paketi farklı olduğu için Uno'da hatasız derlenen bir kod ESP32'de takılabilir. En sık karşılaşılan sebep paket sürümüdür: ESP32 Arduino paketinin 3.x sürümünde PWM fonksiyonları değişti; ledcSetup() ve ledcAttachPin() kaldırıldı, yerlerine kanal numarası yerine pin numarasıyla çalışan ledcAttach() ve ledcWrite() geldi. İnternetteki eski örnekler bu yüzden 'ledcSetup' was not declared in this scope hatası verir; ya kodu yeni fonksiyonlara çevirirsin ya da Kart Yöneticisi'nden 2.0.17 sürümünü kurarsın. İkinci fark derleyici ayarlarıdır. Uno'nun paketi kodu -fpermissive seçeneğiyle derler ve bazı hataları yalnızca uyarıya çevirir; ESP32'de bu seçenek yoktur. Örneğin switch içinde süslü parantez kullanmadan değişken tanımlamak Uno'da derlenirken ESP32'de jump to case label hatası verir. Güncel ESP32 paketleri ayrıca -Werror=return-type ile derler: değer döndürmesi gereken bir fonksiyonda return unutulursa, Derleyici uyarıları ayarı Hiçbiri dışında bir seviyedeyken no return statement in function returning non-void hatası alırsın. 2.x sürümünde ise Derleyici uyarıları Daha fazla ya da Tümü yapıldığında uyarıların çoğu hataya dönüşür. Kartın temel ayarları için ESP32 nedir yazısına göz atabilirsin.
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: Arduino IDE ve MicroPython hataları
Pico'yu Arduino IDE ile, yani Earle Philhower'ın arduino-pico paketiyle programlıyorsan derleyici yine GCC'dir ve bu yazıdaki bütün mesajlar aynen geçerlidir. MicroPython'da ise durum farklıdır: kodun önceden bir derleme adımı yoktur; Pico dosyayı açılışta bayt koduna çevirir ve satır satır çalıştırır. Bu yüzden hatalar Thonny'nin alt kısmındaki Shell (Kabuk) penceresinde, Traceback (most recent call last): ile başlayan bir mesajla ortaya çıkar. Bu mesajı sondan başa doğru oku: en alttaki satır hatanın türünü ve açıklamasını, onun üstündeki line 7 gibi ifade de hatanın satırını söyler. Söz dizimi hataları (SyntaxError, IndentationError) program hiç başlamadan bildirilir; diğer hatalar ise program o satıra geldiği anda ortaya çıkar, yani kodun bir süre sorunsuz çalışıp sonra durması mümkündür. MicroPython kurulumu ve ilk adımlar için Raspberry Pi Pico nedir yazısına bakabilirsin.
| MicroPython hatası | Ne anlama gelir? | Çözüm |
|---|---|---|
| SyntaxError: invalid syntax | Söz dizimi bozuk: if, while ya da def satırının sonunda iki nokta yok veya parantez kapanmamış | Satırın sonuna : ekle, parantezleri say |
| IndentationError: unexpected indent | Girinti tutarsız; boşluk ve sekme karışmış | Her blokta 4 boşluk kullan |
| NameError: name 'led' isn't defined | İsim yanlış yazılmış ya da tanımlanmadan kullanılmış | Büyük-küçük harfi ve tanımın yerini kontrol et |
| ImportError: no module named 'ssd1306' | Sürücü dosyası Pico'da yok | ssd1306.py dosyasını Thonny ile Pico'ya kaydet |
| AttributeError: 'Pin' object has no attribute 'toggel' | Nesnede böyle bir fonksiyon yok | Fonksiyon adını düzelt: toggle() |
| TypeError: can't convert 'int' object to str implicitly | Metin ile sayı + işaretiyle birleştirilmiş | str(sayi) kullan ya da değerleri print'e virgülle ver |
| OSError: [Errno 5] EIO | I2C cihazı cevap vermiyor | Bağlantıyı, adresi ve SDA ile SCL pinlerini kontrol et |
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)Arduino derleme hataları ve çözümleri tablosu
| Hata mesajı | Sebep | Çözüm |
|---|---|---|
| exit status 1 / Compilation error: exit status 1 | Derleme ya da yükleme zincirindeki bir program başarısız oldu | Yukarı kaydır, error: geçen ilk satırı oku |
| 'x' was not declared in this scope | Yazım hatası, büyük-küçük harf, kapsam ya da eksik #include | İsmi düzelt, değişkeni global yap, kütüphaneyi ekle |
| expected ';' before ... | Bir önceki satırda noktalı virgül eksik | Uno'da mesajdaki satırın bir üstüne, ESP32'de o satırın sonuna bak |
| expected '}' at end of input | Kapanmamış süslü parantez | Otomatik Biçimlendir (Ctrl+T) ile parantezleri eşleştir |
| X.h: No such file or directory | Kütüphane kurulu değil ya da dosya adı yanlış | Kütüphane Yöneticisi'nden bağımlılıklarıyla birlikte kur |
| 'X' does not name a type | #include eksik, tür adı yanlış ya da fonksiyon dışında komut | Kütüphaneyi ekle, String ve int yazımına bak, komutu fonksiyona taşı |
| redefinition of 'void setup()' | İki setup() var ya da klasörde fazladan bir .ino dosyası duruyor | Kodları birleştir, eski dosyayı klasörden çıkar |
| stray '\342' in program | Kopyalanan kıvrık tırnak ya da tire, değişken adında Türkçe harf | Tırnakları yeniden yaz, adlarda İngilizce harf kullan |
| 'class X' has no member named 'y' | Fonksiyon adı yanlış ya da kütüphane sürümü farklı | Kütüphanenin kendi örneklerine bak, doğru sürümü kur |
| too few arguments to function / too many arguments to function | Fonksiyona eksik ya da fazla değer verilmiş | note: declared here satırındaki tanımla karşılaştır |
| lvalue required as left operand of assignment | Karşılaştırma yerine atama: if (digitalRead(2) = HIGH) | Karşılaştırmada == kullan |
| jump to case label | case içinde süslü parantezsiz değişken tanımı (ESP32'de hata) | case bloğunu { } içine al |
| undefined reference to `yak()' | Fonksiyonun yalnızca prototipi var, gövdesi yok | Fonksiyonu yaz ya da adını düzelt |
| Sketch too big / text section exceeds available space in board | Program flaşa sığmıyor | Kodu küçült, büyük kart seç, ESP32'de Partition Scheme |
| data section exceeds available space in board | Global değişkenler RAM'e sığmıyor | F() makrosu, küçük veri türleri, dizileri PROGMEM'e taşı |
| #error This library only supports boards with ... | Kütüphane seçili kartın mimarisini desteklemiyor | Kartına uygun kütüphaneyi kur ya da kartı değiştir |
Hatasız kod yazmak için sonraki adımlar
- Temelleri sağlamlaştır: Arduino programlama temelleri yazısı değişkenleri, kapsamı, fonksiyonları ve döngüleri anlatıyor; bu yazıdaki hataların çoğu bu konulardan doğar.
- Komutların doğru yazımını öğren: Arduino komutları listesi her komutun söz dizimini ve parametrelerini örneklerle gösteriyor.
- Kütüphaneleri doğru kur: Arduino kütüphane ekleme rehberi No such file or directory ve Multiple libraries were found mesajlarını ayrıntılı ele alıyor.
- Kodun çalışırken ne yaptığını gör: Derlenen ama beklediğin gibi çalışmayan kodlarda değişkenleri Seri Monitör ile ekrana yazdırmak en hızlı teşhis yoludur.
- Kartı bağlamadan dene: Wokwi ya da Tinkercad simülatörlerinde kodunu derleyip devreyle birlikte çalıştırabilirsin.
- Yapay zekâyla yazılan kodu kontrol et: Sohbet botlarının ürettiği kodlar sık sık eski kütüphane sürümlerine ya da başka bir karta göre yazılmış olur; yapay zekâ ile Arduino kodu yazısı bunları nasıl yakalayacağını anlatıyor.
Derleme hataları ilk bakışta korkutucu görünse de derleyici aslında sana sorunun yerini ve çoğu zaman çözümünü söyler: dosya, satır, sütun ve kısa bir açıklama. İlk hatayı oku, yalnızca onu düzelt, yeniden derle ve bu döngüyü tekrarla; birkaç projeden sonra hataları saniyeler içinde çözdüğünü göreceksin. Kodun derlenip karta yüklendiğinde BlueGrays uygulamasındaki LED, buton, sensör ve ekran projeleriyle devam edebilirsin: Arduino, ESP32 ve Raspberry Pi Pico için her projede devre şeması ve hatasız derlenen kod adım adım hazır.
Sıkça sorulan sorular
Arduino exit status 1 hatası nedir, nasıl düzeltilir?
exit status 1, derleme ya da yükleme sırasında çalışan programlardan birinin hatayla kapandığını söyleyen genel bir mesajdır ve sebebi kendisi söylemez. Çıktı panelini yukarı kaydır ve error: kelimesi geçen ilk satırı bul; dosya adı, satır numarası ve açıklama oradadır. O hatayı düzeltip yeniden derlediğinde exit status 1 de kaybolur.
Arduino 'was not declared in this scope' hatası ne demek?
Derleyicinin kullandığın bir değişkeni, fonksiyonu ya da sabiti o noktada tanımadığı anlamına gelir. En sık sebepler büyük-küçük harf hatası (digitalwrite), başka bir fonksiyonun içinde tanımlanmış bir değişken ve eklenmemiş bir kütüphanedir. Yazımı kontrol etmek ve ortak değişkenleri bütün fonksiyonların dışında tanımlamak çoğu zaman yeter.
Arduino "expected ';' before" hatası nasıl çözülür?
Bu hata bir noktalı virgülün eksik olduğunu söyler. Uno'nun derleyicisi bunu ancak sonraki kelimeyi okuyunca fark ettiği için mesajdaki satır genellikle bir alttadır; noktalı virgülü gösterilen satırın hemen üstündeki satırın sonuna ekle. ESP32 ve Pico'da ise mesaj doğrudan noktalı virgülün eksik olduğu satırı gösterir. for döngüsünün parantezinde noktalı virgül yerine virgül kullanmak da aynı mesajı verir.
'does not name a type' hatası neden çıkar?
Derleyici satırın başında bir veri türü bekler ama yazdığın kelimeyi tanımaz. Kütüphanenin #include satırını unutmak (örneğin Servo), String yerine string yazmak ve fonksiyonların dışına aci = 90; gibi tek başına bir atama yazmak en yaygın üç sebeptir. Arduino'da kendi struct türünü kullanıyorsan onu ilk fonksiyondan önce tanımla.
Arduino 'Sketch too big' hatası nasıl giderilir?
Bu mesaj programın kartın flaş belleğine sığmadığını söyler; Uno'da üst sınır 32256 bayttır. Kullanmadığın kütüphaneleri ve hata ayıklama satırlarını çıkar, büyük sabit dizileri PROGMEM'e taşı ya da Mega veya ESP32 gibi daha büyük belleği olan bir karta geç. ESP32'de Partition Scheme menüsünden Huge APP seçmek program alanını yaklaşık 3 MB'a çıkarır.
Kodum derleniyor ama karta yüklenmiyor, neden?
Derleme başarılıysa çıktıda programın kaç bayt kapladığını gösteren Sketch uses satırını görürsün; bundan sonra çıkan hatalar yükleme aşamasına aittir ve kodla değil kablo, sürücü, port ya da kart seçimiyle ilgilidir. avrdude ile başlayan satırlar Uno ve Nano'da, esptool satırları ESP32'de yükleme sorununa işaret eder. Bu durumda Arduino kod yüklenmiyor rehberindeki adımları sırayla uygula.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Led Yakma
Elektroniğin ilk merhabası: tek bir LED'i yakıp söndürmek. Arduino LED'i çok kısa aralıklarla yakıp söndürür, ışık hızlı hızlı göz kırpar. Kartın bir ışığı nasıl yönettiğini en sade haliyle görür, son

Buton İle Led Yakma (Push)
Kapı zili gibi: bastığın sürece ışık yanar, bırakınca söner. Arduino butonu sürekli dinler; butona basılıyken LED'i yakar, elini çektiğin an söndürür. Kartın dışarıdan gelen bir dokunuşu nasıl hissett

HC-SR04 Mesafe Ölçme (Serial Ekran)
Yarasalar karanlıkta yollarını nasıl buluyorsa HC-SR04 sensörü de öyle çalışır: duyamadığın bir ses gönderir, yankısını dinler ve önündeki cismin ne kadar uzakta olduğunu ölçer. Arduino bu mesafeyi sa

DHT11 İle Sıcaklık Ve Nem
Odan kaç derece, hava nemli mi, kuru mu? DHT11 sensörü sıcaklığı ve nemi ölçer, Arduino da bu değerleri iki satırlık LCD ekrana yazar ve birkaç saniyede bir yeniler. Sensöre bir şey olursa ekranda hat

ESP32 ile LED Yakma
ESP32 ile temel GPIO çıkışı kullanımını öğretir. Bir LED'i dijital pinden açıp kapatarak yanıp sönme efekti elde ederiz. Arduino UNO'daki klasik blink projesinin ESP32 versiyonu; Arduino ortamındaki temel blink komutları aynıdır, ancak ESP32'nin pin yerleşimi ve 3,3 V GPIO seviyeleri Arduino UNO'dan farklıdır.

Raspberry Pi Pico Dahili LED Yakma (GP25 Onboard LED)
Raspberry Pi Pico serisinin açılış projesi! Pico'nun üzerindeki dahili LED'i (GP25 pinine bağlı yeşil LED) yakıp söndürerek kartın çalıştığını doğruluyoruz — klasik "Hello World" tarzı ilk deney. Harici bileşene ihtiyaç YOK, sadece Pico ve USB kablosu yeterli. Kod **MicroPython** ile yazıldı (Raspberry Pi Vakfı'nın resmi olarak desteklediği dil). Thonny IDE ile Pico'yu programlarken `machine.Pin` sınıfı, `Pin.OUT` mode, `led.on()/off()` metodları ve `time.sleep()` fonksiyonlarını kavrarsın. Seri

I2C İle LCD Ekran Kullanımı
Arduino'ya kendi ekranını kazandır ve ilk mesajını yazdır. İki satırlık LCD ekran yalnızca birkaç kabloyla bağlanır; önce üst satıra bir selam, ardından alt satıra ikinci bir yazı gelir, ekran temizle

Servo Motor Kullanım
Küçük bir servo motorun kolu sırayla üç konuma döner: en başa, tam ortaya ve en sona, her durakta iki saniye bekleyerek. Arduino motora hangi açıda durması gerektiğini söyler, motor da oraya gidip ora
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 160'tan fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

