Blok Kodlamadan Arduino Koduna Geçiş: C++ ve MicroPython Tablosu
Blok kodlamadan Arduino koduna geçiş tablosu: 34 satırda blok, C++ ve MicroPython karşılığı, sık hatalar, 4 aşamalı yöntem ve üç hâliyle bir örnek program.
Blok kodlamadan Arduino koduna geçiş için en hızlı yol, her bloğun gerçek kodda hangi satıra denk geldiğini gösteren tek sayfalık bir karşılık tablosunu yanında tutmaktır. Kısa cevap şu: bloklar yeni bir dil değil, Arduino C++ satırlarının görsel hâlidir. "13 numaralı pini ÇIKIŞ olarak ayarla" bloğu pinMode(13, OUTPUT); satırıdır, "1000 ms bekle" bloğu delay(1000); satırıdır, "eğer … yap" bloğu da if yapısıdır. Aşağıdaki tabloda BlueGrays uygulamasındaki blokların gerçek Türkçe etiketleri, Arduino C++ karşılıkları ve Raspberry Pi Pico'da MicroPython karşılıkları yan yana duruyor.
Bu sayfa bir ders değil, bir başvuru kâğıdı. Tabloyu yazdırıp masanın yanına koyabilir, bir projenin bloklarına bakarken hangi satırın neye denk geldiğini oradan kontrol edebilirsin. Tablonun ardından geçişte en sık yapılan hataları, blokları bırakıp koda geçmek için dört aşamalı bir yöntemi ve aynı programın blok, C++ ve MicroPython hâllerini bulacaksın. Örnek program Arduino IDE'de derlenir, Pico'da Thonny ile çalışır.

Tabloyu okumadan önce: üç dil arasındaki dört fark
Blok, C++ ve MicroPython aynı fikri anlatır ama yazım kuralları farklıdır. Tabloyu okurken en çok şu dört farka takılırsın. Birincisi yapı: Arduino C++'ta program setup() ve loop() adlı iki parçadan oluşur, bloklarda bunlar "kurulum (bir kez çalışır)" ve "sürekli tekrarla" diye görünür. MicroPython'da ayrı bir setup yoktur; dosya yukarıdan aşağı bir kez çalışır ve tekrar eden kısım while True: döngüsünün içine yazılır. İkincisi tipler: C++'ta her değişkenin tipi yazılır (int, float, bool), bloklarda bu "tanımla: tam sayı (int)" seçeneğidir, Python'da ise tip hiç yazılmaz.
Üçüncü fark sayı aralıklarıdır. Arduino Uno'da analog okuma 0–1023, PWM 0–255 arasındadır; ESP32'de analog okuma 0–4095'e çıkar; Pico'da MicroPython hem okumayı hem PWM doluluğunu 0–65535 aralığında verir. Bu yüzden bir eşik değerini karttan karta olduğu gibi taşıyamazsın. Dördüncü fark zaman birimidir: delay() milisaniye ister, time.sleep() saniye ister. Yarım saniye C++'ta delay(500), MicroPython'da time.sleep(0.5) olur. Bu dört kuralı aklında tutarsan tablodaki satırların çoğu kendiliğinden yerine oturur.
- Tablodaki sayılar örnektir: blokta 13 yazan yerde senin projende 7 de olabilir, kod satırında da aynı sayı değişir.
- MicroPython sütunundaki pinler Pico'nun GP numaralarıdır (GP14, GP15, GP26). Uno'daki pin numarasıyla aynı olmaları gerekmez; devre şemasına bak.
- "Pico'da blok yok" yazan satırlar, o bloğun Pico projelerinde kullanılmadığını gösterir; MicroPython'da aynı işi gören kod yine de verildi.
- ESP32 de Arduino C++ ile programlanır; C++ sütunu ESP32 için de geçerlidir, yalnız analog aralık ve bazı pin numaraları farklıdır.
Blok, Arduino C++ ve MicroPython karşılık tablosu
Tablo 12 gruba ayrıldı: program yapısı, pinler, zaman, koşul, döngü, değişkenler, matematik, seri port, analog ve PWM, ses, servo ve sensör. Blok sütunundaki metinler uygulamadaki blokların üzerinde yazan etiketlerdir, "…" ve "?" işaretleri başka bir bloğun takıldığı yuvayı gösterir. Bir satırda birden fazla blok varsa nokta ile ayrıldı.
| Grup | Blok (uygulamadaki etiket) | Arduino C++ | MicroPython (Pico) |
|---|---|---|---|
| Yapı | kurulum (bir kez çalışır) | void setup() { … } | while True: satırından önceki satırlar |
| Yapı | sürekli tekrarla | void loop() { … } | while True: (içi 4 boşluk girintili) |
| Yapı | genel değişkenler (en başta) | Dosyanın en üstü, setup() öncesi | import satırlarından sonraki ilk satırlar |
| Yapı | işlev blinkTwice | void blinkTwice() { … } · çağrı: blinkTwice(); | def blinkTwice(): · çağrı: blinkTwice() |
| Pinler | 13 numaralı pini ÇIKIŞ olarak ayarla | pinMode(13, OUTPUT); | led = Pin(15, Pin.OUT) |
| Pinler | 2 numaralı pini GİRİŞ (PULLUP) olarak ayarla | pinMode(2, INPUT_PULLUP); | btn = Pin(14, Pin.IN, Pin.PULL_UP) |
| Pinler | 13 numaralı pine YÜKSEK yaz · 13 numaralı pine DÜŞÜK yaz | digitalWrite(13, HIGH); · digitalWrite(13, LOW); | led.value(1) · led.value(0) |
| Pinler | 2 numaralı pini oku | digitalRead(2) → HIGH (1) ya da LOW (0) | btn.value() → 1 ya da 0 |
| Pinler (yalnız Pico) | led adlı pin: GP 14, ÇIKIŞ · led pinini aç (on) / kapat (off) | Karşılığı pinMode() + digitalWrite() | led = Pin(14, Pin.OUT) · led.on() / led.off() |
| Zaman | 1000 ms bekle · 0.5 saniye bekle (Pico) | delay(1000); · delay(500); | time.sleep_ms(1000) · time.sleep(0.5) |
| Zaman | 10 µs bekle | delayMicroseconds(10); | time.sleep_us(10) |
| Zaman | açılıştan beri geçen ms | millis() (unsigned long) | time.ticks_ms() |
| Koşul | eğer … yap … değilse eğer … değilse … | if (…) { … } else if (…) { … } else { … } | if …: · elif …: · else: |
| Koşul | ? = ? (≠, <, ≤, >, ≥) | == != < <= > >= | == != < <= > >= |
| Koşul | ? ve ? · ? veya ? · ? değil | && · || · !x | and · or · not x |
| Döngü | 3 kez tekrarla yap | for (int i = 0; i < 3; i++) { … } | for i in range(3): |
| Döngü | i değişkeniyle say: 0 ile 5 arası, adım 1 | for (i = 0; i <= 5; i++) (5 dahil, 6 tur) | for i in range(0, 6): (6 dahil değil) |
| Döngü | şu doğruyken tekrarla: | while (…) { … } | while …: |
| Döngü | döngüden çık | break; | break |
| Değişken | tanımla: tam sayı (int) delayTime = 60 | int delayTime = 60; | delayTime = 60 (tip yazılmaz) |
| Değişken | tanımla: ondalıklı (float) voltage = 0.0 | float voltage = 0.0; | voltage = 0.0 |
| Değişken | x değişkenine 0 ata · x değişkenine 1 ekle | x = 0; · x += 1; (ya da x++;) | x = 0 · x += 1 (x++ yoktur) |
| Değişken | dizi 2 3 4 · ledPins dizisinden öğe 0 | int ledPins[] = {2, 3, 4}; · ledPins[0] | ledPins = [2, 3, 4] · ledPins[0] |
| Matematik | 1 + 1 (ayrıca −, ×, ÷) | + - * / · iki int ile 7 / 2 = 3 | + - * / · 7 / 2 = 3.5, tam bölme 7 // 2 = 3 |
| Matematik | 10 ÷ 3 işleminden kalan | 10 % 3 | 10 % 3 |
| Matematik | x değerini eşle: 0 – 1023 → 0 – 255 | map(x, 0, 1023, 0, 255) | Hazırı yok; arduino_map() işlevi yazılır |
| Matematik | 50 değerini 0 ile 100 arasında sınırla | constrain(50, 0, 100) | min(max(50, 0), 100) |
| Seri port | seri portu 9600 baud ile başlat | Serial.begin(9600); | Gerekmez, print() USB üzerinden gider |
| Seri port | seri porta yaz … alt satıra geç · aynı satırda kal | Serial.println(x); · Serial.print(x); | print(x) · print(x, end="") |
| Analog ve PWM | analog oku A0 | analogRead(A0) → 0–1023 (ESP32'de 0–4095) | ADC(26).read_u16() → 0–65535 |
| Analog ve PWM | 9 numaralı pine PWM 128 yaz · led adlı PWM: GP 14, frekans 1000 Hz (Pico) | analogWrite(9, 128); (0–255) | led = PWM(Pin(14)) · led.freq(1000) · led.duty_u16(32768) (0–65535) |
| Ses | 8 numaralı pinde 440 Hz ses çal · 8 numaralı pinde sesi durdur | tone(8, 440); · noTone(8); | Pico'da blok yok: bz = PWM(Pin(16)) · bz.freq(440) · bz.duty_u16(32768) · durdur: bz.duty_u16(0) |
| Servo | myServo servosunu 9 numaralı pine bağla · myServo servosunu 90 dereceye döndür | #include <Servo.h> · Servo myServo; · myServo.attach(9); · myServo.write(90); | Pico'da blok yok: s = PWM(Pin(16)) · s.freq(50) · s.duty_ns(1500000) (yaklaşık 90°) |
| Sensör | 12 numaralı pinde YÜKSEK darbe süresi (µs) | pulseIn(12, HIGH) | machine.time_pulse_us(Pin(12, Pin.IN), 1) |
Tablonun bazı satırları ilk bakışta birebir görünse de dikkat ister. "i değişkeniyle say: 0 ile 5 arası" bloğunda 5 dahildir, döngü 6 kez döner; C++'ta bu yüzden < değil <= yazılır, Python'da range(0, 6) gerekir çünkü range bitiş sayısını dahil etmez. Bölme bloğu da tuzaklıdır: iki tam sayıyı böldüğünde C++ küsuratı atar ve 7 / 2 sonucu 3 olur, Python ise 3.5 verir. Python'da C++ gibi tam bölme istersen // kullanırsın. "x değerini eşle" bloğunun karşılığı olan map() MicroPython'da hazır gelmez; aşağıdaki örnekte iki satırlık bir arduino_map() işleviyle aynı hesabı yapıyoruz.
İç içe bloklar koda nasıl dönüşür?
Tek tek blokları bilmek yetmez; asıl beceri, iç içe geçmiş blokları tek bir satıra çevirebilmektir. Bunun için bloklarda iki şekli ayırt et. Alt alta dizilen, kenarında çıkıntı olan bloklar komuttur ve her biri kodda bir satır olur. Oval ya da köşeli, başka bir bloğun yuvasına takılan bloklar değerdir; bunlar kodda bir parantezin içine, bir eşittirin sağına ya da bir koşulun içine yerleşir. Aşağıdaki satırlar ücretsiz Buzzer İle Frekans Ayarı projesinden: dört buton frekansı açıp kapatır, artırıp azaltır, değer 50 ile 5000 Hz arasında tutulur.
| Blok (Buzzer İle Frekans Ayarı) | C++ satırı | Okuma kuralı |
|---|---|---|
| state değişkenine 1 ata | state = 1; | Alt alta dizilen her komut bloğu bir satırdır ve noktalı virgülle biter. |
| eğer (btnOn numaralı pini oku = YÜKSEK) yap … | if (digitalRead(btnOn) == HIGH) { … } | Oval değer bloğu parantezin içine girer; bloktaki = karşılaştırması kodda == olur. |
| frequency değişkenine (frequency + 50) ata | frequency = frequency + 50; | İçteki blok önce hesaplanır, sonuç dıştaki bloğa verilir. |
| frequency değişkenine (frequency değerini 50 ile 5000 arasında sınırla) ata | frequency = constrain(frequency, 50, 5000); | Bloğun boş yuvaları, kodda virgülle ayrılan argümanlardır. |
| buzzerPin numaralı pinde frequency Hz ses çal | tone(buzzerPin, frequency); | Kodda sıra sabittir: önce pin, sonra değer. Bloktaki sözcük sırası dile göre değişebilir. |
| eğer (state = 1) yap … değilse … | if (state == 1) { … } else { … } | "yap" ağzındaki bloklar ilk { } içine, "değilse" ağzındakiler else { } içine girer. |
Bu tabloyu okurken bir alışkanlık edin: önce en içteki bloğu çevir, sonra dışarı doğru ilerle. "frequency değişkenine (frequency değerini 50 ile 5000 arasında sınırla) ata" satırında en içte constrain(frequency, 50, 5000) vardır, dıştaki ata bloğu bunu frequency = … biçimine sokar. Değer bloğu tek başına satır olamaz; ona noktalı virgül koyup bırakırsan derleyici hata vermeyebilir ama sonuç hiçbir yere kaydedilmez.
Bloktan koda geçişte sık yapılan hatalar
Blok editörü bu hataların çoğunu yapmana izin vermez; parçaların şekli yanlış yere takılmayı engeller. Kodda bu koruma kalktığı için geçişin ilk haftalarında aşağıdaki hatalar neredeyse herkesin karşısına çıkar. Hata mesajı İngilizce gelir ama kalıpları azdır; birkaç kez gördükten sonra tanırsın.
| Hata | Belirti | Doğrusu |
|---|---|---|
| Satır sonunda noktalı virgül yok | "expected ';' before …" hatası; derleyici çoğu zaman bir alt satırı gösterir | Her komut satırını ; ile bitir. if, for ve while satırlarının sonuna ; koyma. |
| Süslü parantez eksik ya da fazla | "expected '}' at end of input" ya da kodun beklenmedik yerde çalışması | Her { için bir } olmalı. Arduino IDE'de Ctrl+T (otomatik biçimlendirme) girintiyi düzeltir, eksik parantez hemen göze çarpar. |
| Koşulda = yazmak | if (state = 1) her seferinde doğru sayılır, state de 1 olur; Python'da SyntaxError | Karşılaştırma ==, atama =. Bloktaki = karşılaştırması kodda her zaman == olur. |
| Ondalıklı değeri int'e koymak | int volt = 3.7; satırı 3 saklar; 5 / 2 sonucu 2 çıkar | Ondalıklı değerler için float kullan, bölmede sayılardan birini 5.0 diye yaz. |
| digitalRead değerini yanlış beklemek | if (digitalRead(2) == 5) hiç çalışmaz; pull-up'lı butonda mantık ters işler | digitalRead yalnız HIGH (1) ya da LOW (0) döndürür. INPUT_PULLUP'ta buton basılıyken LOW okunur. |
| Büyük-küçük harfi karıştırmak | 'digitalwrite' was not declared in this scope; Python'da NameError | digitalWrite, pinMode, Serial harfi harfine yazılır. Python'da True ve False büyük harfle başlar. |
| Sayma döngüsünü eksik çevirmek | Blokta 6 kez dönen döngü kodda 5 kez döner, son LED hiç yanmaz | "0 ile 5 arası" bitişi dahil eder: C++'ta i <= 5, Python'da range(0, 6). |
| Python girintisini kaydırmak | IndentationError ya da döngünün dışında kalan satır | while ve if altındaki satırları aynı 4 boşlukla başlat; sekmeyle boşluğu karıştırma. |
| Python'da süreyi ms sanmak | time.sleep(500) yaklaşık 8 dakika bekler | time.sleep(0.5) ya da time.sleep_ms(500) yaz. |
| C++ alışkanlığını Python'a taşımak | x++, && ya da satır sonundaki ; yüzünden SyntaxError | Python'da x += 1, and, or kullanılır; satır sonu işareti yoktur. |
Blokları bırakıp koda geçmek: 4 aşamalı yöntem
Geçişi tek seferde yapmaya çalışmak yorucudur. Aşağıdaki dört aşama, okumaktan yazmaya doğru küçük adımlarla ilerler. Her aşamaya bir iki proje ayırmak yeterli; bir sonrakine geçme ölçütü, o aşamadaki işi tabloya bakmadan yapabilmektir.
- Yan yana oku. Bir projenin bloklarını ve kodunu aynı anda aç, her bloğun kodda hangi satıra denk geldiğini parmağınla eşleştir. Bu aşamada tablo hep yanında dursun. Ölçüt: koddaki her satırı bir bloğa bağlayabilmek.
- Blokları kapat, tahmin et. Önce bloklara bak, sonra blok görünümünü kapat ve kodu görmeden o blokların C++ hâlini kâğıda yaz. Ardından gerçek kodla karşılaştır. Tersini de dene: kodu oku, blokları tahmin et.
- Değeri kodda değiştir. Kodu bilgisayarına al ve yalnız bir sayıyı değiştir: bekleme süresini 100'den 500'e, eşiği 400'den 600'e çıkar. Yükle, farkı gözünle gör. Derleme hatası alırsan yukarıdaki hata tablosuna dön.
- Yeni satır yaz. Bloklarda olmayan bir satırı kendin ekle: değeri Seri Monitör'e yazdıran bir Serial.println(), ikinci bir LED ya da butonla çalışan bir if. Artık bloktan çeviri yapmıyor, kodu doğrudan yazıyorsun.
Bu aşamaların derslerdeki karşılığı serinin yazılarında var. İlk aşama için bloklarla LED yakma yazısındaki blok-satır tablosu iyi bir başlangıçtır. İkinci ve üçüncü aşamada koşul ve döngülerle çalışmak için eğer bloğu ve döngü ve değişkenler yazılarına bak. Pico ile MicroPython'a geçeceksen bloklardan MicroPython'a geçiş yazısı Thonny kurulumunu da anlatır. Sınıfta bu geçişi haftalara yaymak istersen 8 haftalık robotik kodlama planı hazır bir sıra sunar.
BlueGrays uygulamasında blok ve kodu yan yana açmak
Bu tabloyu en çok, gerçek bir projenin blokları ile kodu arasında gidip gelirken kullanırsın. BlueGrays uygulamasında 100'ü aşkın projenin blok görünümü var; ücretsiz projelerin 30'u aşkınında bloklar da açık, Premium projelerde bloklar Premium ile açılır. Bloklar okumak içindir: uygulamada blok düzenlenmez ve bloklar karta yüklenmez. Karta giden her zaman gerçek koddur; onu Kopyala ya da bilgisayarda açmak için Linki Kopyala ile alıp Arduino IDE'ye ya da Pico için Thonny'ye yapıştırırsın.
- Bloklarla göster: Proje sayfasındaki kaynak kodun yanında bu anahtarı açınca aynı program, uygulamanın dilinde blok görseli olarak görünür. Görsele dokununca tam ekran açılır; anahtarı kapatıp açarak birinci ve ikinci aşamayı uygularsın.
- Blokları anla: Blok görünümü açıkken "Kodu anla" sekmesi bu adı alır. Program adım adım parçalara ayrılır; her adımda ilgili parça ve açıklaması yer alır. Sondaki "Kendin dene" görevi dördüncü aşama için hazır bir alıştırmadır.
- Kod rehberi: Öğren bölümündeki 36 kartın (18 Arduino C++, 18 MicroPython) her birinde örnek, Blok, Arduino ve MicroPython sekmeleriyle üç hâlde gösterilir. Tablodaki bir satırı daha ayrıntılı görmek istersen ilgili karta bak.
- Blok kodlu projeler: Keşfet > Projeler bölümünde Filtrele içindeki bu seçenek, yalnız blok görünümü olan projeleri listeler; geçiş için proje seçerken işini kolaylaştırır.
Kod rehberinin nasıl ilerlediğini kod rehberi yazısında, "Kodu anla" ve "Kendin dene" bölümlerini de kodu anla rehberinde ayrıntılı anlattık. Komutların tek tek açıklaması için Arduino komutları listesi de bu tabloyla birlikte iyi çalışır.
Örnek program üç hâliyle: ışığa göre kısılan gece lambası
Tabloyu bir arada görmek için küçük bir program kuralım. Bir LDR ışığı ölçer; oda aydınlıkken LED kapalı kalır, karanlık arttıkça LED yavaş yavaş parlar. Program değişken, analog okuma, koşul, eşleme, PWM, seri port ve bekleme bloklarını kullanır; yani tablonun yarısından fazlası tek örnekte geçer. Fikir ücretsiz Ldr İle Gece Lambası projesine dayanıyor; orada LED yalnız yanar ya da söner, burada PWM ile kısılır. LDR'nin bağlantısı için Ldr İle Işık Şiddeti Okuma projesinin devre şemasına da bakabilirsin.
| Bağlantı | Arduino Uno | Raspberry Pi Pico |
|---|---|---|
| LDR'nin 1. bacağı | 5V | 3V3(OUT), fiziksel pin 36 |
| LDR'nin 2. bacağı + 10 kΩ direncin bir ucu (orta nokta) | A0 | GP26 / ADC0, fiziksel pin 31 |
| 10 kΩ direncin diğer ucu | GND | GND, fiziksel pin 38 |
| LED'in uzun bacağı (220 Ω direnç üzerinden) | D9 (PWM pini) | GP15, fiziksel pin 20 |
| LED'in kısa bacağı | GND | GND, fiziksel pin 18 |
| Okunan ışık değeri / PWM aralığı | 0–1023 / 0–255 | 0–65535 / 0–65535 |
Önce blok hâli. Uygulamadaki etiketlerle program şu bloklardan oluşur; her madde, aşağıdaki C++ kodunda bir ya da birkaç satıra denk gelir:
- genel değişkenler (en başta): tanımla: tam sayı (int) lightValue = 0 ve tanımla: tam sayı (int) brightness = 0
- kurulum (bir kez çalışır): seri portu 9600 baud ile başlat, ardından 9 numaralı pini ÇIKIŞ olarak ayarla
- sürekli tekrarla: lightValue değişkenine (analog oku A0) ata
- eğer (lightValue < 400) yap: brightness değişkenine (lightValue değerini eşle: 0 – 400 → 255 – 0) ata; değilse: brightness değişkenine 0 ata
- 9 numaralı pine PWM brightness yaz
- seri porta yaz "Light: " aynı satırda kal, seri porta yaz lightValue aynı satırda kal, seri porta yaz " PWM: " aynı satırda kal, seri porta yaz brightness alt satıra geç
- 200 ms bekle
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Işığa göre kısılan gece lambası / Dimming night light
4// ─────────────────────────────────────────
5
6int lightValue = 0; // LDR okuması / LDR reading (0-1023)
7int brightness = 0; // LED parlaklığı / LED brightness (0-255)
8
9void setup() {
10 Serial.begin(9600); // Seri port 9600 baud / Serial at 9600 baud
11 pinMode(9, OUTPUT); // LED, PWM pini D9 / LED on PWM pin D9
12}
13
14void loop() {
15 lightValue = analogRead(A0); // Az ışık = küçük değer / Little light = small value
16
17 if (lightValue < 400) {
18 // Karanlık arttıkça LED parlar / The darker it gets, the brighter the LED
19 brightness = map(lightValue, 0, 400, 255, 0);
20 } else {
21 brightness = 0; // Oda aydınlık, LED kapalı / Room is bright, LED off
22 }
23
24 analogWrite(9, brightness); // PWM 0-255 / PWM 0-255
25
26 Serial.print("Light: ");
27 Serial.print(lightValue);
28 Serial.print(" PWM: ");
29 Serial.println(brightness);
30
31 delay(200); // 0,2 sn bekle / Wait 0.2 s
32}
331# ─────────────────────────────────────────
2# BlueGrays · bluegrays.com
3# Işığa göre kısılan gece lambası / Dimming night light
4# ─────────────────────────────────────────
5from machine import Pin, ADC, PWM
6import time
7
8ldr = ADC(26) # GP26 = ADC0 / GP26 = ADC0
9led = PWM(Pin(15)) # LED, GP15 / LED on GP15
10led.freq(1000) # PWM frekansı 1000 Hz / PWM frequency 1000 Hz
11
12THRESHOLD = 25600 # Uno'daki 400'ün karşılığı / Same as 400 on the Uno
13
14
15def arduino_map(x, in_min, in_max, out_min, out_max):
16 # Arduino map() ile aynı hesap / Same math as Arduino map()
17 return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
18
19
20while True:
21 light_value = ldr.read_u16() # 0-65535 / 0-65535
22
23 if light_value < THRESHOLD:
24 # Karanlık arttıkça LED parlar / The darker it gets, the brighter the LED
25 brightness = arduino_map(light_value, 0, THRESHOLD, 65535, 0)
26 else:
27 brightness = 0 # Oda aydınlık, LED kapalı / Room is bright, LED off
28
29 led.duty_u16(brightness) # PWM 0-65535 / PWM 0-65535
30
31 print("Light:", light_value, " PWM:", brightness)
32
33 time.sleep(0.2) # 0,2 sn bekle / Wait 0.2 s
34İki kodu satır satır karşılaştırınca tablodaki farkların hepsi görünür. C++'taki setup() Python'da while True'dan önceki satırlardır ve Serial.begin() hiç yoktur. analogRead(A0) yerine ADC(26).read_u16() gelir ve aralık 0–1023'ten 0–65535'e çıkar; bu yüzden eşik 400 yerine 25600'dür. analogWrite(9, …) yerine önce PWM nesnesi kurulur, parlaklık duty_u16() ile 0–65535 arasında verilir. map() hazır olmadığı için arduino_map() işlevi yazılır; içindeki // tam bölme, C++'taki tam sayı bölmesinin aynısıdır. Dört ayrı Serial.print() yerine tek bir print() yeter, delay(200) da time.sleep(0.2) olur.
Blok kodlamadan Arduino C++'a geçiş, yeni bir şey ezberlemekten çok zaten bildiğin blokların yazılı hâlini tanımaktır. Bu tabloyu yanında tut, her projede önce yan yana oku, sonra blokları kapatıp kendin yaz. Tablodaki satırları gerçek projelerde görmek istersen BlueGrays uygulamasında blok görünümü olan projeleri açıp Bloklarla göster anahtarıyla aynı programın iki hâli arasında geçiş yapabilirsin.
Sıkça sorulan sorular
Blok kodlamadan sonra hangi dili öğrenmeliyim: C++ mı, Python mu?
Elindeki karta göre seç. Arduino Uno ve ESP32 projelerinin çoğu Arduino C++ ile yazılır; Raspberry Pi Pico'da MicroPython yaygındır. Blokların mantığı ikisinde de aynıdır, bu yüzden birini öğrendikten sonra diğerine geçmek çok daha kısa sürer.
Blok kodlamadan Arduino koduna geçmek ne kadar sürer?
Kişiye göre değişir, ama haftada birkaç proje üzerinde düzenli çalışan biri birkaç hafta içinde kısa programları okuyup küçük değişiklikler yapabilir. Önce kodu blokların yanında okumak, sonra tek bir değeri değiştirmek, en sonda yeni satır eklemek geçişi kolaylaştırır.
Arduino Uno'yu Python ile programlayabilir miyim?
Arduino Uno MicroPython çalıştıramaz; Uno, Arduino IDE'de C++ ile programlanır. MicroPython için Raspberry Pi Pico gibi daha güçlü bir kart gerekir. Bilgisayarda çalışan bir Python programıyla Uno'ya seri porttan komut göndermek ise mümkündür.
BlueGrays'te blokları düzenleyip karta yükleyebilir miyim?
Hayır. BlueGrays'teki bloklar okumak ve kodu anlamak içindir; uygulamada blok düzenlenmez ve karta yüklenmez. Karta yüklenen her zaman projenin gerçek kodudur ve onu Arduino IDE ya da Thonny ile yüklersin.
Blok kodlama ile yazılan program gerçek kod mu?
Bloklar gerçek kodun görsel hâlidir; her blok bir ya da birkaç kod satırına karşılık gelir. BlueGrays'te blok görünümü olan projelerde bloklar ile karta yüklenen Arduino C++ ya da MicroPython kodu aynı programı anlatır.
digitalRead neden 1 ya da 0 döndürür, HIGH ile 1 aynı mı?
Evet, Arduino'da HIGH 1'e, LOW 0'a eşittir ve digitalRead yalnız bu iki değerden birini döndürür. INPUT_PULLUP ile bağlanan bir buton basılıyken LOW, bırakılmışken HIGH okunur. MicroPython'da pin.value() de aynı şekilde 1 ya da 0 verir.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Buzzer İle Frekans Ayarı
Dört butonla bir buzzer'dan çıkan sesi yönetirsin: biri sesi başlatır, biri susturur, diğer ikisi sesi inceltip kalınlaştırır. Artırma ya da azaltma butonunu basılı tuttukça ses adım adım değişir ve s

Ldr İle Gece Lambası
Hava karardığında kendiliğinden yanan, sabah olunca sönen küçük bir gece lambası. Işık sensörü odadaki aydınlığı ölçer; Arduino ortam yeterince karanlıksa LED'i yakar, aydınlanınca söndürür. Sokak lam

Ldr İle Işık Şiddeti Okuma
Odanın ne kadar aydınlık olduğunu sayıyla görmek ister misin? Işığa duyarlı küçük bir parça olan LDR ortam ışığını ölçer ve Arduino bu değeri yarım saniyede bir bilgisayar ekranına yazar. Elinle üstün

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

Buton İle Led Yakma (On Off)
Bir butona bir kez basınca ışık yanar, bir daha basınca söner; tıpkı odandaki lamba düğmesi gibi. Arduino her basışı fark edip LED'in durumunu tersine çevirir, düğme içindeki minik titreşimler ışığı k

Hız Ayarlı Yürüyen Led
Altı LED sırayla yanıp söner ve ışık sanki bir uçtan öbür uca koşar. Potansiyometrenin düğmesini çevirdikçe bu koşunun hızı anında değişir: bir yöne çevirince ışık uçar, öbür yöne çevirince her LED bi

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

Raspberry Pi Pico Harici LED Yakma (Breadboard)
Pico'nun dahili LED'inden sonraki adım: breadboard'a harici LED bağlayıp GP14 pini üzerinden kontrol etmek. Bu proje ile Pico'nun herhangi bir genel amaçlı GPIO pinini output olarak nasıl kullanacağını, LED'in polaritesini (uzun bacak = anot/+, kısa bacak = katot/–) ve neden akım sınırlama direnci (220Ω) şart olduğunu öğreniyorsun. Direnci koymazsan LED'e aşırı akım gider ve yanabilir. Devre çok basit: Pico GP14 → 220Ω direnç → LED (+) → LED (–) → Pico GND. Wokwi'de simüle edebilir, gerçek bread
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den 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ç

