Arduino program yazarken zorlanmak

@K.Makise hocam o ne öyle koca sistem kurmuşsunuz :)

Galiba küçük arduinos etleri ve komponentlerine düz hesap bir 1200TL vermişimdir.

Fakat bir proje yapıp çalışıtığını görünce tatmin oluyorsunuz.

Mesela geçtiğimiz günlerde "Arduino'yu zamanlayıcı olarak kullanmak" isimli konudaki bir üyemize kod konusunda yardımcı oldum sıfırdan kütüphane kullanmadan basit bir saat yazdım ve günün belirli saatleri çalışıp belirli süreleri motoru kapatacak bir kod ile birleştirdim.

Aslında şu an konu sahibi de bunları yapacak bilgiye ve temele sahip sadece IDE'yi açıp yazmalı.
 
Ben de bitince öyle hissettim devamı olmalı dedim eksik hissettim. Sonra başka yerlere baktım oralarda da aynı şeyleri anlatmışlardı, demek ki gerisi bolca araştırma ve pratik dedim.

Küçük şeyler yazmaya başladım butona basılınca LED yanmasından öte şeyler.

Mesela bir buton veya pot ile 7 segment displayde 0'dan 9'a kadar olan rakamları yazmak için Switch-case ve if-else yapılarını harmanladım.

Bir RFID okuyucu ve kart alıp lazerli bir güvenlik sistemi yaptım RGB LED, buzer ve LCD ekran kullanarak da zenginleştirdim.

Bir L298n motor sürücü alıp motorları sürdüm, hız ve yön kontrolü yaptım.

Ses sensör alıp alkışla LED yakıp söndürdüm.

İnternette Nokia 3310 sesi çalanları gördüm hemen kodlara ulaştım ve ben de çaldım sonra kodu inceleyip anlamaya çalıştım anlayamadığım yerleri ChatGPT'ye sorup öğrenmeye çalıştım.
Siz gerçekten kendinizi geliştirmişsiniz. Ben de bolca araştırma yapmaya başlayıp kendimi geliştirmeye çalışacağım.
 
Siz gerçekten kendinizi geliştirmişsiniz. Ben de bolca araştırma yapmaya başlayıp kendimi geliştirmeye çalışacağım.

Hocam, kod yazmaktan ya da hata yapmaktan korkmayın. Küçük şeyler ile başlayın mesela butona basınca LED yakın. Sonra butona bir kere basınca yanık kalacak tekrar basınca sönecek şekilde yazın.

Sonra bir buton daha ekleyin ona bir kere basınca 1sny aralıklarla yanıp sönsün, 2 kere daha basınca hızlı hızlı yanıp sönsün, 1 kere daha basınca ışığı azalıp artsın tabii bunun içinde PWM PIN'i kullanmalısınız.

Böyle böyle üstüne koya koya geliştirsiniz.

Mesela ben başta Switch-case neymiş kullanmam if-else varken diyordum ama işler öyle değil iş tek bir yerden gelen verilerle çalışırken Switch-case if-else hız konusunda fark atıyor tabii yerine göre Switch-case yerine göre if-else yerine göre de iksi de kullanılmalı.

Hocam, kod yazmaktan ya da hata yapmaktan korkmayın. Küçük şeyler ile başlayın mesela butona basınca LED yakın. Sonra butona bir kere basınca yanık kalacak tekrar basınca sönecek şekilde yazın.

Sonra bir buton daha ekleyin ona bir kere basınca 1sny aralıklarla yanıp sönsün, 2 kere daha basınca hızlı hızlı yanıp sönsün, 1 kere daha basınca ışığı azalıp artsın tabii bunun içinde PWM PIN'i kullanmalısınız.

Böyle böyle üstüne koya koya geliştirsiniz.

Mesela ben başta Switch-case neymiş kullanmam if-else varken diyordum ama işler öyle değil iş tek bir yerden gelen verilerle çalışırken Switch-case if-else hız konusunda fark atıyor tabii yerine göre Switch-case yerine göre if-else yerine göre de iksi de kullanılmalı.

Mesela bir butona basma sayısına göre LED'in yanma durumu değişecek değil mi? Bu kodu önce if-else ile sonra Switch-case ile yazın tabii butona basılıp butona basılma sayısını hep if-else ile yapacaksınız ama LED'in basılma sayısına göre değişmesini önce if-else sonra Switch-case ile yazın mesela hemen küçük bir örnek yazabilirim galiba mobilden zorlar ama size örnek olsun.

C++:
#define LED 9 // pwm pini diye hatırlıyorum :D
#define BUT 2
#define BUT_2 3
boolean but_state;
byte but_count;

void setup()
{
pinMode(LED, OUTPUT);
pinMode(BUT, INPUT); // PullDown direncini unutmayın.
pinMode(BUT_2,INPUT); // PullDown direnci!
}
void loop()
{
if(digitalRead(BUT) ==1)
{
but_state = !(but_state);
while(digitalRead(BUT) == 1)
delay(100);
}

while (but_state == 1)
{
if(digitalRead(BUT) ==1)
{
but_state = !(but_state);
while(digitalRead(BUT) == 1)
delay(100);
}
if(digitalRead(BUT_2) == 1)
{
but_count++;
while(digitalRead(BUT_2) == 1)
delay(100);
}
else if(but_count==1)
{
for(byte a=0; a<2;a++)
{
if(digitalRead(BUT_2) == 1)
{
but_count++;
while(digitalRead(BUT_2) == 1)
delay(100);
}
digitalWrite(LED,but_state);
delay(1000);
digitalWrite(LED,!(but_state));
delay(1000);
}
}

else if(but_count==2)
{
for(byte a=0; a<2;a++)
{
if(digitalRead(BUT_2) == 1)
{
but_count++;
while(digitalRead(BUT_2) == 1)
delay(100);
}
digitalWrite(LED,but_state);
delay(250);
digitalWrite(LED,!(but_state));
delay(250);
}
}
}
else if(but_count==3)
but_count=0;
}
}

Hocam şöyle bir kod yazdım hata olduğuna kesin eminim çünkü mobilde yazınca çok karıştı hem ekran küçük hem kodlara düzene sokamıyorum bayağı sıkıntı oldu ama hataları bulup çözebilirsiniz.

IDE'ye yapıştırırsanız bir CTRL+t yapıp biçimlendirin kodu bence.

Bu kodu çalışır hale getirip Switch-case ile tekrar yazmayı da deneyebilirsiniz.
 
Son düzenleme:
Hocam, kod yazmaktan ya da hata yapmaktan korkmayın. Küçük şeyler ile başlayın mesela butona basınca LED yakın. Sonra butona bir kere basınca yanık kalacak tekrar basınca sönecek şekilde yazın.

Sonra bir buton daha ekleyin ona bir kere basınca 1sny aralıklarla yanıp sönsün, 2 kere daha basınca hızlı hızlı yanıp sönsün, 1 kere daha basınca ışığı azalıp artsın tabii bunun içinde PWM PIN'i kullanmalısınız.

Böyle böyle üstüne koya koya geliştirsiniz.

Mesela ben başta Switch-case neymiş kullanmam if-else varken diyordum ama işler öyle değil iş tek bir yerden gelen verilerle çalışırken Switch-case if-else hız konusunda fark atıyor tabii yerine göre Switch-case yerine göre if-else yerine göre de iksi de kullanılmalı.



Mesela bir butona basma sayısına göre LED'in yanma durumu değişecek değil mi? Bu kodu önce if-else ile sonra Switch-case ile yazın tabii butona basılıp butona basılma sayısını hep if-else ile yapacaksınız ama LED'in basılma sayısına göre değişmesini önce if-else sonra Switch-case ile yazın mesela hemen küçük bir örnek yazabilirim galiba mobilden zorlar ama size örnek olsun.

C++:
#define LED 9 // pwm pini diye hatırlıyorum :D
#define BUT 2
#define BUT_2 3
boolean but_state;
byte but_count;

void setup()
{
pinMode(LED, OUTPUT);
pinMode(BUT, INPUT); // PullDown direncini unutmayın.
pinMode(BUT_2,INPUT); // PullDown direnci!
}
void loop()
{
if(digitalRead(BUT) ==1)
{
but_state = !(but_state);
while(digitalRead(BUT) == 1)
delay(100);
}

while (but_state == 1)
{
if(digitalRead(BUT) ==1)
{
but_state = !(but_state);
while(digitalRead(BUT) == 1)
delay(100);
}
if(digitalRead(BUT_2) == 1)
{
but_count++;
while(digitalRead(BUT_2) == 1)
delay(100);
}
else if(but_count==1)
{
for(byte a=0; a<2;a++)
{
if(digitalRead(BUT_2) == 1)
{
but_count++;
while(digitalRead(BUT_2) == 1)
delay(100);
}
digitalWrite(LED,but_state);
delay(1000);
digitalWrite(LED,!(but_state));
delay(1000);
}
}

else if(but_count==2)
{
for(byte a=0; a<2;a++)
{
if(digitalRead(BUT_2) == 1)
{
but_count++;
while(digitalRead(BUT_2) == 1)
delay(100);
}
digitalWrite(LED,but_state);
delay(250);
digitalWrite(LED,!(but_state));
delay(250);
}
}
}
else if(but_count==3)
but_count=0;
}
}

Hocam şöyle bir kod yazdım hata olduğuna kesin eminim çünkü mobilde yazınca çok karıştı hem ekran küçük hem kodlara düzene sokamıyorum bayağı sıkıntı oldu ama hataları bulup çözebilirsiniz.

IDE'ye yapıştırırsanız bir CTRL+t yapıp biçimlendirin kodu bence.

Bu kodu çalışır hale getirip Switch-case ile tekrar yazmayı da deneyebilirsiniz.
Tamam teşekkür ederim yardımınız için.
 
YouTube üzerinden bir Arduino kursu bitirdim. Kursta ödev gibi olan örnekleri falan kolayca yazmayı başarıyordum fakat şimdi kursun tüm videoları daha yüklenmemiş yani yarıda kesildi ve ben ne yapacağımı bilmiyorum. Modülleri ve fonksiyonları biliyorum fakat aklıma kendimi nasıl geliştirmem gerektiği gelmiyor. Arduino hakkında da genel olarak diğer şeylere göre bilgi az.

Gayet doğal önce alıştırma ve beceri kazanmanız gerek bu arada kurslara bağlı kalmayın internetten dokümantasyon ve projeleri inceleyin.
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Geri
Yukarı