Arduino seri portta anlamsız karakterler en sık, koddaki Serial.begin değeri ile Serial Monitor'da seçili baud rate farklı olduğunda çıkar. Seri port, kartın bilgisayarla veriyi sırayla, bit bit gönderdiği iletişim yoludur. Serial Monitor ise bu yoldan gelen yazıları gösteren, Arduino geliştirme ortamının içindeki penceredir. İki taraf farklı hızda çalışırsa gelen sinyal yanlış yerlerden okunur ve ekranda sembol karmaşası görürsün. Bu durum çoğunlukla bir ayar eşleşmesi sorunudur; kart ya da kod bozuk olmayabilir.
Baud rate nedir ve uyuşmazlık neden bozuk karakter üretir?
Baud rate, seri hat üzerinde verinin saniyede kaç sinyal değişimiyle gönderildiğinin ölçüsüdür. Gönderen ve alan taraf bu hız üzerinde önceden anlaşmak zorundadır, çünkü seri iletişimde ayrı bir saat sinyali yoktur. Alıcı, gelen bitleri kendi hızına göre sayarak keser. Hızlar farklıysa bitlerin sınırı kayar ve harf yerine başka bir karakter oluşur.
Konuşma benzetmesi işe yarar: biri çok hızlı okuyor, diğeri aynı metni yavaş tempoda yazıya döküyor. Kelimeler eksik ve yanlış yazılır. Alıcı hatalı bir cihaz değildir; yalnızca farklı tempoda dinlemektedir.
Önce doğru çalışan küçük bir örneğe bakalım:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello");
delay(1000);
}
Serial.begin(9600): Kartın seri portunu 9600 baud hızında başlatır. Parantez içindeki sayı baud rate değeridir.Serial.println("Hello"): "Hello" yazısını gönderir ve satırı bitirir.delay(1000): Bir saniye bekler, böylece ekran hızla dolmaz.
Beklenen çıktı: Serial Monitor'da her satırda, saniyede bir okunabilir Hello yazısı belirir.
Monitördeki baud seçeneği 9600'den farklıysa aynı kod okunmayan semboller, kutucuklar ya da soru işaretine benzeyen karakterler gösterebilir. Çıktının tam hâli karta, bilgisayara ve seçilen değere göre değiştiği için belirli bir karakter dizisi beklememelisin. Önemli olan Hello yerine okunamayan bir şey görmendir.
Seçim kuralı: Kod ne yazıyorsa Serial Monitor'daki baud seçeneği de aynı değer olmalıdır. Kodda Serial.begin(115200) varsa monitörde de 115200 seçilir. Bu seçenek arayüzde benzer bir ad altında, genellikle monitör penceresinin alt ya da üst kısmında bulunur. Ayrıntılar için Arduino'nun resmî Serial.begin dokümantasyonuna bakabilirsin.
Anlamsız karakterleri en ucuz kontrolden başlayarak eleme akışı

Sorunu çözmek için ayarları rastgele değiştirmek yerine en kolay kontrolden en zahmetliye doğru ilerle. Aynı anda birkaç şeyi değiştirirsen hangisinin işe yaradığını anlayamazsın. Her adımda yalnız bir şeyi kontrol et ve sorun sürüyorsa bir sonraki adıma geç.
- Baud değerlerini karşılaştır. Koddaki
Serial.begindeğerini Serial Monitor'daki baud seçimiyle yan yana koy. Farklıysa monitördeki değeri koda göre değiştir; bunun için kodu yeniden yüklemen gerekmez. Bu adım sorunu çözmediyse devam et. - Doğru kart ve doğru port seçili mi bak. Arayüzde kart ve port için benzer adlı seçenekler bulunur. Yanlış kart ya da yanlış port seçimi veri akışını bozabilir. Doğruysa sıradaki adıma geç.
- Doğru seri nesneyi kullandığından emin ol. Kodda yazdığın seri nesne, Serial Monitor'a giden nesne olmalıdır. Ayrıntısı bir sonraki bölümde.
- 0 ve 1 numaralı pinleri kontrol et. Bu pinlere bağlı bir modül ya da kablo varsa çıkarıp tekrar dene. Ayrıntısı bir sonraki bölümde.
- USB kablosunu ve bağlantıyı değiştir. Başka bir kablo ve başka bir USB girişi dene. Ayrıntısı bir sonraki bölümde.
- Satır sonu ayarını sebep olarak arama. Bu ayar yalnızca yazıların satırlara nasıl bölündüğünü etkiler, karakterleri bozmaz. Bu yüzden son sırada, yalnızca hatırlatma olarak yer alır.
Çoğu durumda ilk adım yeterli olur. Olmadığında listeyi sırayla uygulamak, nedeni parça parça elemene yardım eder.
Belirti, olası neden ve kontrol adımı tablosu

Ekranda gördüğün belirtiye bakarak hangi kontrolden başlayacağını bu tabloyla seçebilirsin. Nedenler kesin teşhis değil, olası açıklamalardır; sırayla elenmeleri gerekir.
| Belirti | Olası neden | Kontrol adımı |
|---|---|---|
| Tüm satırlar okunmaz semboller | Kodun hızı ile monitördeki baud rate ayarı uyuşmuyor olabilir | Serial.begin içindeki değeri Serial Monitor'daki hız seçimiyle karşılaştır |
| Hiç çıktı gelmiyor ya da port listede görünmüyor | Yanlış port ya da yanlış kart seçilmiş olabilir | Port ve kart seçimini yeniden yap; bu durum bu yazının konusu değil, yalnızca buraya yönlendiriyoruz |
| Ara sıra bozuk karakter ya da kopan çıktı | Zayıf kablo ya da gevşek bağlantı olabilir | Kabloyu ve USB girişini değiştirip dene |
| Kod yüklenirken hata ya da çıktı karışması | 0 ve 1 numaralı pinlere bağlı bir modül karışıyor olabilir | Modülü çıkar ve yeniden dene |
| Satırlar yan yana yapışık ya da araya fazladan boş satır giriyor | Satır sonu ayarı yalnızca görünümü etkiliyor olabilir; veri bozuk değildir | Monitördeki satır sonu seçeneğini değiştirip görünümü karşılaştır |
| Kodda başka bir seri nesne kullanılmış ve monitörde hiçbir şey çıkmıyor | Monitöre bağlı olmayan bir seri nesneye yazılıyor olabilir | Kullandığın kartın belgesine bak |
Aynı anda birkaç şeyi değiştirme; her seferinde tek bir adımı dene ki neyin işe yaradığını anlayabilesin.
Birden fazla seri nesne, 0 ve 1 numaralı pinler ve USB bağlantısı
Eleme akışının son üç adımı donanım tarafındadır. Üçünde de kart ve bağlantı bilgisi belirleyicidir.
Hangi seri nesne monitöre bağlı?
Bazı kartlarda birden fazla seri nesne bulunur. Serial Monitor'a hangisinin bağlı olduğu karta göre değişir, bu yüzden tek bir kurala güvenme; kullandığın kartın belgesine bak. Aşağıdaki örnek yalnızca ikinci bir nesnesi olan kartlarda derlenir:
void setup() {
Serial.begin(9600); // Hangi bağlantıya gittiğini kart belgesinden öğren
Serial1.begin(9600); // Yalnızca kartında varsa; o da belgeye göre başka bir bağlantıya gider
}
void loop() {
Serial.println("Merhaba");
delay(1000);
}
Kartında Serial Monitor'a bağlı olan nesne Serial ise "Merhaba" yazısı saniyede bir monitörde görünür. Belgede monitöre başka bir nesne bağlı görünüyorsa mesajı o nesneye yazmalısın; monitöre bağlı olmayan nesneye yazılan mesaj ekrana düşmez.
0 ve 1 numaralı pinlerde ne var?
Bazı kartlarda 0 ve 1 numaralı pinler, bilgisayarla seri iletişimde kullanılan hatla ilişkilidir. Bu pinlere Bluetooth gibi bir modül bağlıysa çıktı karışabilir ya da kod yüklenirken hata alabilirsin. Modülü çıkarıp denemek en ucuz yoldur. Kartında bu pinlerin nasıl kullanıldığını yine kart belgesinde kontrol et.
USB kablosu
Bazı kablolar yalnızca şarj için üretilmiştir, bazıları da veri iletiminde zayıf kalabilir. Yan yana başka bir kabloyu ve bilgisayarda farklı bir USB girişini dene. Sorun her zaman değil, ara sıra çıkıyorsa kabloyu ve bağlantıyı şüpheli listenin başına al.
Satır sonu ayarı bozuk karakter üretmez, yalnız görünümü değiştirir
Serial Monitor'un arayüzünde, gönderdiğin metnin sonuna ne ekleneceğini seçtiğin bir satır sonu seçeneği bulunur. Menü adları ve konumu sürüme göre değişebileceği için arayüzde benzer bir seçenek aramak yeterli. Bu ayar yalnızca metnin satırlara nasıl bölündüğünü etkiler. Karakterleri anlamsızlaştıran şey baud rate uyuşmazlığıdır, satır sonu değil.
Karttan gelen satırların ayrılması kodda seçtiğin komuta bağlıdır. Serial.println() yazdığı değerin sonuna satır sonu ekler, Serial.print() eklemez. Küçük bir örnekle farkı görebilirsin:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("Sicaklik: ");
Serial.print(25); // satır sonu yok
delay(1000);
}
Beklenen çıktı, okunaklı ama tek satıra yapışık bir metindir: Sicaklik: 25Sicaklik: 25Sicaklik: 25. İkinci print yerine println yazarsan her ölçüm kendi satırında görünür.
Kısa bir kontrol listesi:
- Karakterler okunuyor ama satırlar yapışık ya da araya fazladan boşluk giriyorsa, bu bir görünüm sorunudur, baud sorunu değildir.
- Yapışık satırlarda önce kodda
printileprintlnseçimine bak. - Karta metin gönderiyorsan satır sonu seçeneğinin, kodunun beklediği biçimle uyuştuğunu kontrol et.
- Karakterlerin kendisi bozuksa bu bölümü bırak ve baud rate kontrolüne dön.
Sorun yine de çözülmezse kodu ve bağlantıyı en küçük çalışır örneğe indirip baştan dene.
Sık Sorulan Sorular
Serial.begin içine hangi baud rate değerini yazmalıyım?
Belirleyici olan sayının büyüklüğü değil, iki tarafın aynı olmasıdır. Serial.begin() içindeki değerle Serial Monitor'da seçtiğin hız eşleşmelidir. Başlangıç örneklerinde sık görülen değerler 9600 ve 115200'dür. Kullandığın kartın belgesi ya da örnek kodu başka bir değer öneriyorsa onu esas al.
Baud rate'i artırınca da bozuk karakter çıkar mı?
Artırmak uyuşmazlığı çözmez, çünkü sorun hızın yüksekliğinde değil iki tarafın farklı hızda olmasındadır. İki taraf da aynı yüksek hıza ayarlıysa iletişim çalışabilir. Yine de kart, kablo ve bağlantı her hızı aynı güvenilirlikte taşımayabilir. Hızı değiştirdiğinde kodu güncelleyip karta yeniden yükle ve monitördeki seçimi de aynı değere getir.
Serial Monitor'da karakterler okunuyor ama satırlar yan yana yapışıyorsa sebep nedir?
Karakterler okunuyorsa baud rate büyük olasılıkla doğrudur. Satırların yapışması genellikle kodda Serial.print() kullanılıp satır sonu eklenmemesinden kaynaklanır. Son değeri Serial.println() ile yazdırmak satırları ayırır.
Seri port çıktısı bozulduğunda ayarları rastgele değiştirmek yerine en ucuz kontrolden başlayıp tek tek eleme yapmak hem zamanı hem sakinliği korur. Karakterlerin bozuk mu yoksa yalnızca düzensiz mi göründüğünü ayırt etmek, doğru adımı seçmenin ilk koşuludur.