

Arduino Ve MATLAB İle DC Motor Kontrolü
-
arkadaşlar biitirme projemde arduino kısmı istemeden de olsa bana kaldı pek anlamam ve aradığım şey spesifik olduğu için (MATLAB ile) sizden yardım istiyorum, yapmya çalıştığım şu, 2 tane DC motor sürücü devrem var bunun da 2 şer tane çıkışı var çıkışlardan 2 si sağ-sol diğer 2 si yukarı-aşağı yönü veriyor biz bunu arduino ile kontrol edicez ama konrtrol olayında komutları bilgisayar üzerinden MATLAB yardımı ile GUİ de küçük bi arayüz yapıp ordan vericez buraya kdr ki kısımda ben normalde direk komut verebiliyorum ama çalışma mantığı yanlış oluyo çünkü, atıyorum PC de ileri tuşuna bi kere basınca bu sürekli ileri gidiyo ben öyle gitmesini istemiyom, sadece ileri tuşuna bastığım sürece gitmesini istiyorum, sıkıntım bu, bunu nasıl çözebilirim, (bilmeyenler için sölim MATLAB da arduino kod yazımı, Arduino ile birebir aynıdır yani matlab için özel bi yazım şekl fln yoktur) umarım anlatabilmişimdir, tek istediğim MATLAB GUI de yaptığım ara yüzde ileri-geri-aşağı-yukarı tuşlarına basılı tuttuğum sürece arduino dan akım gitmesini sağlamak, bu konuda hiç tecrübem olmadığı için size soruyorum (olayı basit bi led yakma gibi düşünebilirsiniz, sadece ledler bi tuşa basılı olduğu sürece yanıcak gibi, o kdr).
-
up
-
hocam normal yazdığın zaman zaten basınca gidip, bırakınca durması gerekmiyor mu ? PIC kullanırken mesela sadece if input1==1 diyorsun hiç problem olmuyor, basınca gidiyor bırakınca duruyor. Motor sürücü olarak ne kullanıyorsun? bide kodu atarsan bakıp yorum yapabilirim böyle havada kaldı biraz
-
valla hocam şansa bak yaa bir sürü yazmıştım, geri tuşuna yanlışlıkla bastım sonra ileri basmama rağmen yazdıklarım gelmedi :S
-
tekrar yazmaya çalışayım ..
iki tane olay kullanacaksın. butonun mouse move ya da hover eventini. mouse butonun üstünde olduğu müddetçe bu eventler tetiklenecektir. bu event içinde bir kontrol yazacaksın, bu kontrol de mouse un sol tuşuna basılı olup olmadığıdır..
bu sayede sürekli basılı tutulmuş mu tutulmamış mı anlayabilirsin.
eğer mouse un sol tuşu basılı ise çıkışı 1 yapman gerek,değilse 0 yapman gerek. ama çıkış zaten 1 ise tekrar 1 yapmanın anlamı yok. o halde çıkışın ne olduğunu tutan bir de değişkenin olmalı. eğer o değişken 1 ise, çıkış değiştirme, eğer 0 ise, çıkışı 1 yap ve değişkeni de 1 yap..
eğer mouse un sol tuşu basılı değilse çıkışı 0 yap. ama çıkış zaten 0 ise yine üstteki mantığı kullanarak değişken 0 ise çıkışa bi şey yapma, değişken 1 ise, çıkışı 0 yap ve değişkeni de 0 yap..
bir de dikkat etmen gereken nokta mouse basılı tutularak formun üstüne giderse ne olur? o zaman da mouse un mouse leave eventine bir kod yazman gerek. mouse butonun üstünden ayrıldığında bi kere bu olay çalışacaktır. sen de değişken e bakacaksın eğer değişken 0 ise bi şey yapma, değişken 1 ise çıkışı 0 yap ve değişkeni de 0 yap.. örneklendireyim biraz
bool IsClicked=false; void button1_mouseHover(...) //mouse butonun üstünde olduğu müddetçe bu olay çalışır { ///burada mouse un sol tuşa basılıp basılmadığına bakacaksın if(MouseClickedButton.1==clicked) //sola basılmış ise { if(IsClicked==true) //zaten çıkış 1 o halde bi şey yapma return; else //değişken 0 o zaman çıkışı 1 ve değişkeni 1 yap { SetPin(1); IsClicked=true; } } else //mouse butonun üzerinde olduğu halde sol tuşa basılı değilse (sağ tuş,orta tuş olabilir ya da hiç bi tuşa basılı değil de olabilir) { if(IsClicked==false) //zaten çıkış 0 o halde bi şey yapma return; else //değişken 1 o zaman çıkışı 0 ve değişkeni 0 yap { SetPin(0); IsClicked=false; } } } void button1_MouseLeave(....) { //mouse butonun üzerinden ayrılıyor o halde biz çıkışı 0 yapmalıyız if(IsClicked==false) //zaten çıkış 0 o halde bi şey yapma return; else //değişken 1 o zaman çıkışı 0 ve değişkeni 0 yap { SetPin(0); IsClicked=false; } } }biraz açık yazmaya çalştım, mantığını anladıysan iki fonksiyon yazıp eventler içinde onları çağırarak daha az kodla bu işi yaptırabilirsin..
umarım anlatabilmşimdir..
bir de mouse enter, leave ve click eventlerini kullanarak yaptırabilirsin ama biraz daha kasar.. bu şekil daha mantıklı geldi bana