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 üyeler

Forum istatistikleri

Konular
7,169
Mesajlar
121,750
Üyeler
2,899
Son üye
Abdullahuguz

Son kaynaklar

Son profil mesajları

Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Back
Top