arduino ile 6 adet butonla step motoru farklı mesafelere ilerletme
  • arkadaşlar merhaba fazla laf kalabalığı yapmadan soruma geçiyorum
    6 adet buton düşünün 1 adet step motor benim yapmak istediğim her butonun diyelimki 0,5,10,15,20,25 metre mesafeye gönderiyor ben aşağıda yapabildiğim kadarıyla butona bastığım kadar step motor ilerliyor elimi çeker çekmez duruyor nasıl bir işlem yapmalıyımkı diyelimki 5 metre butonuna bastım anda motor 5 metreye gidecek kadar ilerlesin ve dursun
    yazılım aşağıdadır;
    NOT; Aşağıdaki yazılımda 1. butonla motor sağa 2. butonla motor sola dönüyor ama elimi çektiğim anda duruyor


    // letsarduino.com
    // [Project 17] ? Stepper Motor Direction Control Using 2 Buttons with the Arduino

    int button_1 = 2;
    int button_2 = 3;
    int motorPin1 = 8;
    int motorPin2 = 9;
    int motorPin3 = 10;
    int motorPin4 = 11;
    int ledpin = 13;

    int motor_Speed = 78;
    int motor_Step = 50 ;
    int val1 = 0;
    int val2 = 0;


    void setup() {
    pinMode(button_1, INPUT);
    pinMode(button_2, INPUT);
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);
    pinMode(ledpin, OUTPUT);
    }

    void loop() {

    val1 = digitalRead(button_1);
    if (val1 == LOW)
    {
    digitalWrite(13, HIGH);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);

    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);

    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);

    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);

    delay(motor_Speed);
    }
    else {
    digitalWrite(13, LOW);


    }

    val2 = digitalRead(button_2);
    if (val2 == HIGH)


    {
    digitalWrite(13, HIGH);
    digitalWrite(motorPin4, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin1, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin4, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin1, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin4, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin1, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin4, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin1, HIGH);
    delay(motor_Speed);
    }

    else {
    digitalWrite(13, LOW);


    }
    }
  • 3 buton için yapmaya çalıştım. Örneğe bakarak istediğin kadar buton ekleyebilirsin. Umarım fikir verir ve işine yarar. While döngüsü yerine For döngüsü ile veya başka yöntemlerle de yapılabilir sanırım.
    Motorun 1 turda kaç cm gittiğini öğrenip, Kat etmesi gereken mesafeye göre kaç tur dönmesi gerektiğini hesaplaman gerekiyor.
    Örneğin motor 1 tur döndüğünde 1 cm hareket ediyorsa, 500 cm mesafeyi 500 turda gider.


    int Buton1=15; //15 nolu pin Buton1 olarak tanımlandı
    int Buton2=16; //16 nolu pin Buton2 olarak tanımlandı
    int Buton3=17; //17 nolu pin Buton3 olarak tanımlandı

    pinMode(Buton1, INPUT_PULLUP); //Buton1 giriş olarak ayarlandı ve pullup direnci aktif edildi
    pinMode(Buton2, INPUT_PULLUP); //Buton2 giriş olarak ayarlandı ve pullup direnci aktif edildi
    pinMode(Buton3, INPUT_PULLUP); //Buton3 giriş olarak ayarlandı ve pullup direnci aktif edildi

      if (digitalRead(Buton1) == LOW) {
       int sayac=0;
        while(sayac < 500)
    {

    //Buton1 e basıldığında 500 kere çalışmasını istediğin kodları buraya yaz

    sayac++; /*Bu noktaya geldiğinde, sayac++ komutu sayacın değerini 1 arttıracak. Ardından süslü parantezler arasındaki kod yeniden çalıştırılacak
    İlk çalıştığında sayacımızın değeri 0 dı. Bu noktada sayaç değerine 1 ilave edilecek.
    Bir sonraki seferinde sayaç değeri 1+1=2 olacak.
    Bir sonrakinde sayaç değeri 2+1 =3
    Ta ki sayaç değeri while(sayac < 500) satırında belirtilen 500 sayısına ulaştığında While döngüsü sonlanacak.
    Program void loop() bölümüne geri dönecek.

    */
    }}



    if (digitalRead(Buton2) == LOW) {
    int sayac=0;
    while(sayac < 300)
    {

    //Buton2 ye basıldığında 300 kere çalışmasını istediğin kodları buraya yaz

    sayac++;
    }}



    if (digitalRead(Buton3) == LOW) {
    int sayac=0;
    while(sayac < 100)
    {

    //Buton3 e basıldığında 100 kere çalışmasını istediğin kodları buraya yaz

    sayac++;
    }}

  • Öncelikle cevap verdiğiniz için çok teşekkürler

    sayac++; /*Bu noktaya geldiğinde, sayac++ komutu sayacın değerini 1 arttıracak. Ardından süslü parantezler arasındaki kod yeniden çalıştırılacak
    İlk çalıştığında sayacımızın değeri 0 dı. Bu noktada sayaç değerine 1 ilave edilecek.
    Bir sonraki seferinde sayaç değeri 1+1=2 olacak.
    Bir sonrakinde sayaç değeri 2+1 =3
    Ta ki sayaç değeri while(sayac < 500) satırında belirtilen 500 sayısına ulaştığında While döngüsü sonlanacak.
    Program void loop() bölümüne geri dönecek.

    */
    }}

    1.yukardaki kodda herhangi bir işlem yapıyormuyum acaba yoksa "sayac++;/ otomatik her döngüde 1 deger yükseliyormu

    2. if (digitalRead(Buton1) == LOW) {
    int sayac=0;
    while(sayac < 500)
    {
    bu kodda void loop altına yazıyorum ve hemen altına
    {
    digitalWrite(13, HIGH);
    digitalWrite(motorPin4, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin1, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin4, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin1, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin4, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin1, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin4, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin1, HIGH);
    delay(motor_Speed);
    }
    bu kodu yazıyorum lakin herseferinde if (digitalRead(Buton1) == LOW) { hata olduğunu söylüyor
  • int Buton1=2; //2 nolu pin Buton1 olarak tanımlandı
    int motorPin1 = 8;
    int motorPin2 = 9;
    int motorPin3 = 10;
    int motorPin4 = 11;


    int motor_Speed = 78;
    int motor_Step = 50 ;
    void setup() {
    pinMode(Buton1, INPUT_PULLUP); //Buton1 giriş olarak ayarlandı ve pullup direnci aktif edildi
    pinMode(Buton2, INPUT_PULLUP); //Buton2 giriş olarak ayarlandı ve pullup direnci aktif edildi
    pinMode(Buton3, INPUT_PULLUP); //Buton3 giriş olarak ayarlandı ve pullup direnci aktif edildi
    }
    void loop() {
    if (digitalRead(Buton1) == LOW);
    int sayac=0;
    while(sayac < 4)

    {//Buton1 e basıldığında 500 kere çalışmasını istediğin kodları buraya yaz
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    }
    sayac++; /*Bu noktaya geldiğinde, sayac++ komutu sayacın değerini 1 arttıracak. Ardından süslü parantezler arasındaki kod yeniden çalıştırılacak
    İlk çalıştığında sayacımızın değeri 0 dı. Bu noktada sayaç değerine 1 ilave edilecek.
    Bir sonraki seferinde sayaç değeri 1+1=2 olacak.
    Bir sonrakinde sayaç değeri 2+1 =3
    Ta ki sayaç değeri while(sayac < 500) satırında belirtilen 500 sayısına ulaştığında While döngüsü sonlanacak.
    Program void loop() bölümüne geri dönecek.

    */
    }


    YKARDAKİ GİBİ YAPTIM 4 TUR SAYIP DURMASI GEREKMİYORMU AMA ENERJİ VERİR VERMEZ DÖNMEYE BAŞLIYOR BUTONA BASMADIĞIM HALDE NEREDE YANLIŞ YAPIYORUM EMRE BEY
  • Neden sürekli çalıştığını tahmin edemiyorum. Ancak yazdıklarım üzerinde birtakım değişiklikler olmuş. Ve bazı tanımlamalar eksik sanırım.

    Motor pinlerini çıkış olarak ayarlamak gerekiyor.
    pinMode(motorPin1, OUTPUT); //motorPin1 çıkış olarak ayarlandı
    pinMode(motorPin2, OUTPUT); //motorPin2 çıkış olarak ayarlandı gibi

    Benim verdiğim kod üzerinde sadece // ile başlayan açıklama satırlarını, // işareti ve sonrasını silmelisin.

    Örneğin
    if (digitalRead(Buton2) == LOW) {
    int sayac=0;
    while(sayac < 300)
    {
    //Buton2 ye basıldığında 300 kere çalışmasını istediğin kodları buraya yaz
    sayac++;
    }}

    Aşağıdaki gibi olabilir.

    if (digitalRead(Buton2) == LOW) {
    int sayac=0;
    while(sayac < 300)
    {

    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    sayac++;
    }}

    Ayrıca yaptığın hatalar:

    Süslü parantezlerin yerlerini değiştirmişsin,
    Süslü parantez ilave etmişsin,
    Noktalı virgül ilave etmişsin.
    Ben de henüz Arduino'yu öğrenme aşamasındayım.
  • Birlikte destek olarak öğreneceğiz bu işleri bende senin gibiyim kademe kademe gidiyorum yani bir butonla bir led yakıp tamam ben yapıyorum diyenlerden değilim
    yazdığın örneğe göre denedim programı derledim yükleme yaptım butona basmadan direk dönmeye başlıyor ve durmuyor buton işlevsel değil yani peki ben burda serial printer dan sayacın ne saydığını görebilirmiyim
  • Kodları buraya yazarsan belki daha bilgili biri fikir verebilir.
    Butonu nasıl tetikliyorsun +5 voltla mı? yoksa -(Eksi) uçla mı? Eksi uçla olması gerekiyor.
    Veya if (digitalRead(Buton2) == LOW) yerine if (digitalRead(Buton2) == HIGH) olması gerekiyordu. Bu durumda pinMode(Buton1, INPUT_PULLUP) yerine pinMode(Buton1, INPUT) olması gerekecekti

    Sana göndermeden önce deneyip göndermiştim. Bende sorunsuz çalışmıştı. Yine denedim. Butona basmadan çalışmıyor. Bence buton bağlantında hata olabilir.

    Void setup bölümüne
    Serial.begin(9600);
    eklenecek

    sayac++ dan önceye
    Serial.println(sayac);
    eklenecek
  • Emre bey Günaydın
    +5v tetikliyorum eksiye nasıl çevirebilirim bendede aşağıdaki gibi butona basıyorum verdiğim değer kadar dönüyor motor duruyor burada sıkıntı yok ama 2 ci sever bastığımda birdaha işlem yapmıyor sanırım sayar değeri sıfırlanmadığı sürece 2.işlemi yapmıyor while döngüsünde sayac sıfırlamammı gerekiyor yoksa döngüdenmi çıkmıyor
  • Aşağıdaki Yazılım Çalışma Şekli Şöyledir (ilerleme kaydetttik emre hocam)
    1.Butona Bastığımda 5 adım sağ tarafa
    2.Butona Bastığımda 5 adım sol tarafa hareket ediyor
    sayac ve sayacB Eklemediğimizde işlemi 1 kere yapıyor ve öylece kalıyor işlem yapmıyor
    sayac ve sayacB eklersek her seferinde sayacları sıfırladığından sürekli işlem yapabiliyoruz yanı Şöyle( 1.Butona Her Bastığımızda 5 adım Sağ Trafa 2.Butona her Bastığımızda 5 Adım sol Tarafa) hareket ediyoruz
    Not: Yapmak istediğim Şey 1. Butona Bastığımda 5 adım Hareket etsin Aynı Butona Tekrar Basarsam işlem yapmasın Taki ikinci Butona bastığımda 2. buton işlemi yerine getirsin 1. buton işlem yapmaya hazır olsun


    int button_1 = 2;
    int button_2 = 3;
    int motorPin1 = 8;
    int motorPin2 = 9;
    int motorPin3 = 10;
    int motorPin4 = 11;
    int sayac=0;
    int sayacB=0;
    int motor_Speed = 78;
    int motor_Step = 50 ;



    void setup() {
    pinMode(button_1, INPUT);
    pinMode(button_2, INPUT);
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);
    Serial.begin(9600);

    }

    void loop(){
    int sayac=0;
    if (digitalRead(button_1) == HIGH)
    while(sayac < 5)



    {
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    Serial.println(sayac);

    sayac++;


    }



    int sayacB=0;
    if (digitalRead(button_2) == HIGH)
    while(sayacB < 5)


    {
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    Serial.println(sayacB);

    sayacB++;



    }}



  • Merhaba. Ayrıntılı bakıp deneme şansım olmadı. Ancak fikir verebilir.
    İlk başta bir değişken oluşturup bu değişkene bir değer vermek gerekiyor.
    int kontrol =1 veya boolean = true gibi.
    2. Olarak. 1. Butonun çalışabilmesi için, değişkenin değerinin ilk başta belirlediğimiz değerde olması şartını eklemek gerekiyor
    Örneğin
    if (digitalRead(button_1) == HIGH && kontrol == 1)
    Burada && simgesi VE anlamına geliyor yani aynı anda if ifadesi ile istenen tüm koşulların sağlanması sonucunda çalısacaktır.
    3. Olarak 1. Buton işleminin sonunda değişkenin değerini değiştirin örneğin int kontrol =2 gibi.
    Son olarak 2. Buton için yazılan kodların en sonunda değişkenin değerini tekrar baştaki haline dönüştürnek gerekli. Örneğin int kontrol =1 gibi.
    Not. Yazılanları kontrol etmedim.
  • Merhabalar;
    Yazmış olduğun Örneklemelerden Anladığım kadarı ile if (digitalRead(button_1) == HIGH && kontrol == 1) kontrol == 1 değişkenide aktif olucak lakin kontrol == 1 komutu burda hangi işlemi etkileyecek
    örneğin;
    void loop(){
    int sayac=0;
    if (digitalRead(button_1) == HIGH&&kontrol == 1)
    while(sayac < 5)
    {
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    Serial.println(sayac);

    sayac++;
    int kontrol =2;
    }
    Bu koda bu şekilde ekledim lakin kontrol==1 aktif olduğunda ne yapacak kontrol==2 ne yapacak?
  • if koşulu ile buton1 in çalışabilmesi için bazı kurallar koyuyoruz. Örneğin buton1 HIGH ise yani +5 volt ile tetiklendiyse, yani eksi uç ile tetiklenmediyse.
    Buton1 için 2. kural olarakta tanımladığımız kontrol adlı değişkenin değeri 1 sayısına eşitse buton1 için yapılması gereken işlemler başlayacak. Kontrol adlı değişkeninin değeri 1 rakamı haricinde herhangi bir rakam olursa, örneğin sıfır olursa veya 2,3,4,5,6,7,8,9,10,11,12,13 olursa if ile tanımladığımız koşul sağlanmadığı için işlem yapılmayacak.
    ------------------------------------------
    Aklıma başka bir şey geldi. Kontrol etmedim ama bir dene.

    En baştaki satırlarda sayaç değerini sıfır yapıyoruz. int sayac=0;
    while(sayac < 5) ifadesi ile sayac değeri 5 olana kadar, sayac++; ile sayac değeri her defasında 1 artıyor ve kodlar çalıştırılıyor. Böylece buton1 e basıldığında sayac değeri en son 5 değerini alıyor. Buton 1 e ikinci defa basılırsa sayac değeri while(sayac < 5 koşulunu sağlamadığı için sayac sıfırlanana kadar buton1 çalışmayacaktır.
    Aşağıdaki gibi.

    int button_1 = 2;
    int button_2 = 3;
    int motorPin1 = 8;
    int motorPin2 = 9;
    int motorPin3 = 10;
    int motorPin4 = 11;
    int sayac=0;
    int sayacB=0;
    int motor_Speed = 78;
    int motor_Step = 50 ;



    void setup() {
    pinMode(button_1, INPUT);
    pinMode(button_2, INPUT);
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);
    Serial.begin(9600);

    }

    void loop(){
    if (digitalRead(button_1) == HIGH)
    while(sayac < 5)



    {
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    Serial.println(sayac);

    sayac++;


    }



    int sayacB=0;
    if (digitalRead(button_2) == HIGH)
    while(sayacB < 5)


    {
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    Serial.println(sayacB);

    sayacB++;
    sayac=0;


    }}

  • Emre Hocam 2. Buton satırına koyduğumuz sayac=0; komutu malesef sıfırlama yapmadığı için 1.buton çalışmamaya devam ediyor
  • Kontrol etmedim. Ama bir dene.
    int button_1 = 2;
    int button_2 = 3;
    int motorPin1 = 8;
    int motorPin2 = 9;
    int motorPin3 = 10;
    int motorPin4 = 11;
    int sayac=0;
    int sayacB=0;
    int motor_Speed = 78;
    int motor_Step = 50 ;



    void setup() {
    pinMode(button_1, INPUT);
    pinMode(button_2, INPUT);
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);
    Serial.begin(9600);

    }

    void loop(){
    if (digitalRead(button_1) == HIGH)
    {while(sayac < 5){

    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    Serial.println(sayac);

    sayac++;

    }}


    if (digitalRead(button_2) == HIGH)


    {
    while(sayacB < 5){
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    Serial.println(sayacB);

    sayacB++;
    sayac=0;

    }
    }}
  • Emre Hocam sistemde denedim başarılı bir şekilde çalıştı eline sağlık
    düğmeler 2. kez bastıgımızda çalışmıyor buraya kadar gayet güzel mantık olarak oturdu bu kafamda peki burda şöyle bir işlem için mantık ne olmalıdır?
    ben şimdi 1 nolu butona bastım 5 adım sağa döndü 2. butona bastım10 adım sağa döndü 3. butona bastım 15 adım sağa döndü
    4.5.6 buton eklediğimde gene birbirleri arasında aynı şekilde sayaçlarını birbirine sıfırlatıcam onda sorun yok peki diyelim 5 .butona bastım 100 adım gitti 3 butona bastığımda 100 adım ile 3 buton değeri olan (15 adım) karşılaştırıp sola dönmesi gerektiğini bilecek yani küçükse sola büyükse sağa dön olayı nasıl olur diyelimki 5. buton konumunda durdu ben 3 butona bastım 5ile 3 ü karşılaştırıp ben geriye dogru gitmeliyim diyecek birbiri ile karşılaştırıp hangi yöne dönmesi gerektiğini bilecek
  • Aslında bilen biri için yapmak istediğin çok kolay. Ancak henüz ben o kadar bilmiyorum. Tahminimce bir değişkende o anki pozisyonunu tutabilirsin örneğin 3 nolu butona bastın motor 15 metreye gitti. Bunu int mevcutpozisyon =15; gibi bir değişkene yazıp daha sonra basılan butona göre kaç adım sağa veya sola gitmesi gerektiğini hesaplayabilirsin. Örneğin int istenenpozisyon = 100; daha sonra if ile mevcut pozisyon ve istenenpozisyon dan hangisinin büyük olduğunu karşılaştırıp sonuca göre sağa veya sola gitmek gerektiğine karar verebilirsin. Bir matematik işlemi ile mevcutpozisyon ve istenen pozisyonu birbirinden çıkarıp aradaki fark kadar sağa veya sola gidecek denilebilir.

    Bir arduino kitabı edinmek de faydalı olabilir.
  • Bir Örnekleme yapabilirmiyiz int mevcutpozisyon değişkenini vooid loop altınamı atıyacağız int mevcutpozisyon değişkeni diyelim işlemin sonucunda if komutuna ne işlem yaptıracak
    örneğin;
    int button_1 = 2;
    int button_2 = 3;
    int motorPin1 = 8;
    int motorPin2 = 9;
    int motorPin3 = 10;
    int motorPin4 = 11;
    int sayac=0;
    int sayacB=0;
    int mevcutpozisyon =15;
    int gidecekpozisyon = 0;
    int motor_Speed = 78;
    int motor_Step = 50 ;



    void setup() {
    pinMode(button_1, INPUT);
    pinMode(button_2, INPUT);
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);
    Serial.begin(9600);

    }

    void loop(){
    int mevcutpozisyon = 15;
    if (mevcutpozisyon>gidecekpozisyon)
    if (digitalRead(button_1) == HIGH)
    {while(sayac < 5){

    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    Serial.println(sayac);

    sayac++;

    }}
  • İnt değişkeni diğerlerinin yanına en üste yazılacak. (Yani global değişken tanımlamış oluyoruz) Bu değişkenler hiç bir işlem yapmazlar. Bir komut gerektiğinde o değişkeni okuyup değişkenin sakladığı bilgiyi alır ve bu bilgiye göre önceden tanımlı işlemi gerçekleştirir.
    Benim bilgim bu kadar. gerisini senin araştırman gerekiyor.
  • Herşey için çok teşekkürler emre hocam emeğine sağlık elinden gelen tüm yardımı yaptın bıraz daha araştırayım ben
  • Emre Bey kamera slider olayıda benim yapmak istediğime yakın sanırım
  • http://forum.arduinoturkiye.com/discussion/2100/ikili-ueclue-buton-kullanimi-hakkinda-yardim..
    Bu arkadaş bir şeyler yapmış. Belki ilerleme kaydetmiş olabilir. Onunla iletişim kurmaya çalışabilirsin

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.