arduino kod yardımı

serhatkafka

Yeni Üye
Katılım
22 Aralık 2022
Mesajlar
4
merhaba, aşağıda belirtmiş olduğum servo motor for döngüsü kodunu 8 mil saniyede 18 derecelik acı hareketi yapıyor. yapılan bu hareketi toplam 20 saniye boyunca yapması ve ardından 350 milsaniye durması, sonrasında tekrardan 20 saniye açı hareketi yaparak devamı için yardımcı olabilir misiniz ?
C++:
#include <Servo.h>
Servo sg90;
int pos = 0;

void setup()
{
sg90.attach(1);
}
void loop()
{
{
delay (350);
for (pos = 0; pos <= 18; pos+=1){sg90.write(pos); delay(8);}
for (pos = 18; pos >= 0; pos-=1){sg90.write(pos); delay(8);}
}
}
 
Last edited by a moderator:
Şunu bir dene...

C++:
#include <Servo.h>
Servo sg90;
int pos = 0;

void setup()
{
sg90.attach(1);
}
void loop(){
delay (350);
for (pos = 0; pos <= 18; pos++1){
sg90.write(pos);
}
delay(8);
for (pos = 18; pos >= 0; pos--1){
sg90.write(pos);
}
delay(8);
}
 
denedim gökhan hocam ama hata algılıyor if olarak denedim oldu ama bu seferde iki if kodu arasında zamanlar ve kod sıralaması değişiyor.
bu şekilde yazdım. bu konuda yardımcı olabilirsin gökhan hocam.

#include <Servo.h>
Servo sg901;
Servo sg902;
Servo sg903;
Servo sg904;
Servo sg905;
Servo sg906;

int pos = 0;
unsigned long simdikizaman;
unsigned long oncekizaman1 = 0;
unsigned long oncekizaman2 = 0;
unsigned long oncekizaman3 = 0;
unsigned long oncekizaman4 = 0;
unsigned long oncekizaman5 = 0;
unsigned long oncekizaman6 = 0;

if(simdikizaman - oncekizaman4 == 20)
{
for (pos = 18; pos >= 0; pos-=1){sg904.write(pos); delay(10);}
for (pos = 0; pos <= 18; pos+=1){sg904.write(pos); delay(10);}
oncekizaman4 = simdikizaman;
}
if(simdikizaman - oncekizaman6 == 25000)
{
for (pos = 18; pos >= 0; pos-=1){sg906.write(pos); delay(5);}
for (pos = 0; pos <= 18; pos+=1){sg906.write(pos); delay(5);}
oncekizaman6 = simdikizaman;
}
if(simdikizaman - oncekizaman1 == 22000)
{
for (pos = 0; pos <= 18; pos+=1){sg901.write(pos); delay(5);}
for (pos = 18; pos >= 0; pos-=1){sg901.write(pos); delay(5);}
oncekizaman1 = simdikizaman;
}
if(simdikizaman - oncekizaman2 == 23000)
{
for (pos = 18; pos >= 0; pos-=1){sg902.write(pos); delay(5);}
for (pos = 0; pos <= 18; pos+=1){sg902.write(pos); delay(5);}
oncekizaman2 = simdikizaman;
}
if(simdikizaman - oncekizaman3 == 24000)
{
for (pos = 18; pos >= 0; pos-=1){sg903.write(pos); delay(5);}
for (pos = 0; pos <= 18; pos+=1){sg903.write(pos); delay(5);}
oncekizaman3 = simdikizaman;
}
 
millis ile kafayı yersin.
1 saniyelik periyotlar ile kesecek timer oluştur.
timer kesmesi içinde artacak değişkenler olsun.

her adım için 1 değişken ataması yap.
o değişken istediğin şarta ulaştıysa işlemini yaptır ve değişkeni sıfırla.

millis ile çok pratik yapmadıkça millis kullanmak kafayı yedirtiyor.



Bu videoyu başından sonuna kadar dikkatli izlersen birdaha delay/millis/micros/delayMicroseconds gibi ihtiyaçların kalmaz.
 
Yapılacak hareket sabitse 20 saniyede kaç defa yapılacağını hesaplarsın. 20 saniye 20.000 milisaniye yapar. Servonun ileri geri çalışması 16 milisaniye anladığım kadarıyla. 20.000/16=1250 yapar.

Ana fonksiyonun buna benzer olmalı.

kod::
void loop()
{

    for(int i=0; i<1250; i++)  // 16*1250=>20 saniye
   {

     servo(ileri);  // 8 milisaniye

     servo(geri); // 8 milisaniye

   }

   delay (350);

}

Yapılan hareketin süresi mi adedi mi asıl önemli olan kısım bu.

O zaman Ahmet'in dediği gibi kesme kullanıp daha gelişmiş kod yazmalısın.
 
Ahmet hocam bilgilendirme için teşekkür ederim. Dediğiniz gibi zaman kesme videolarına baya baktım. ama iş içinden çıkamadım. Belirtiğim kodda dediğim gibi ilk başlarken ifli kodlar arasında zaman farkı her tekrarda artmaktadır. timer kodda yardımcı olabilirseniz sevinirim.
 
slewrate hocam bilgilendirme için teşekkür ederim. Dediğiniz gibi zaman kesme işlemi yapmak gerekmektedir. Kod kısmında baya uğraştım ama iş içinden çıkamadım. kod kısmında yardımcı olabilirseniz sevirim.
 
Ahmet hocam bilgilendirme için teşekkür ederim. Dediğiniz gibi zaman kesme videolarına baya baktım. ama iş içinden çıkamadım. Belirtiğim kodda dediğim gibi ilk başlarken ifli kodlar arasında zaman farkı her tekrarda artmaktadır. timer kodda yardımcı olabilirseniz sevinirim.
geldiğiniz yere kadar atın zaman kesme kodunuzu
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,820
Mesajlar
99,330
Üyeler
2,476
Son üye
mrmandos

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top