Arama butonu
Bu konudaki kullanıcılar: 1 misafir
13
Cevap
414
Tıklama
0
Öne Çıkarma
Arduino bir buton ile iki farklı işlem yapma
B
geçen yıl
Çavuş
Konu Sahibi

Şu şekildeki ben ilk butona bastığım zaman aynı anda 2 farklı elemanı kontrol edicem. Bu elemanlardan biri ilk butona bastıktan sonra diğer butona basılana kadar çalışacak diğerkisi ise belirli ,kısa bir süre çalışıcak ve ben ilk butona basana kadar çalışmayacak
Arduinonun multitasking özelliği yok dersenizde eğer Attiny13a gibi ufak bir mikrodenetleyici almayı düşünüyorum ama bu butonu ikisine birden nasıl bağdaştırıcam





< Bu mesaj bu kişi tarafından değiştirildi Buraktı -- 12 Mart 2023; 15:31:54 >


Bu mesajda bahsedilenler: @rafet32 , @ipli jeton
İ
geçen yıl
Yarbay

Pic ile yapabilirim ama Arduino'ya henüz yabancı sayılırım.



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 2 cevap geldi.
B
geçen yıl
Çavuş
Konu Sahibi

Anladım sağolun



< Bu ileti Android uygulamasından atıldı >


Bu mesajda bahsedilenler: @ipli jeton
B
geçen yıl
Çavuş
Konu Sahibi

Hocalarım sizin bir fikriniz var mı.





< Bu mesaj bu kişi tarafından değiştirildi Buraktı -- 12 Mart 2023; 17:39:57 >

< Bu ileti Android uygulamasından atıldı >


Bu mesajda bahsedilenler: @rafet32 , @limbesh
R
geçen yıl
Binbaşı

Arduinoyu aktif olarak kullanmıyorum, arm (stm,gigadevice, texas) ve microchip mcu lar hakkında yol gösterebilirim.

Yazılım alt yapınız varsa algoritma oluşturma veya c dilinde Pseudocode örnekleri üzerinden devam edebiliriz.

Hiç yazılım tecrübeniz yoksa bu işi bilen birisinden destek almanız işinizi hızlandırır.

Uğraşayım kendim öğreneyim derseniz ne kadar zaman ayırdığınıza ilgi seviyenize göre uzun bir süreç sizi bekliyor.

Tarif ettiğiniz işin üstünden arduino veya eşdeğer mcular hayli hayli üstesinden gelir.

Yapmak istediklerinizi detaylı şekilde madde madde yazmanız kodlama konusunda size yardımcı olmak isteyenlerin işlerini kolaylaştıracaktır / ihtimalini artıracaktır.


Bu mesaja 1 cevap geldi.
B
geçen yıl
Çavuş
Konu Sahibi

Yazılım altyapım var zaten c# ta kendimi ileri seviyede geliştirdim ama arduinoda işler istediğim gibi yürümedi. Arduinoda 2 tane bu işlem için bir fonksiyon oluşturup ardından iki fonksiyonu aynı anda çalıştırsam olur mu diye düşünüyorum



< Bu ileti Android uygulamasından atıldı >


Bu mesajda bahsedilenler: @rafet32
R
geçen yıl
Binbaşı

"Aynı anda" ifadesi sizi yanıltmasın. Elinizdeki mcu tek core (işlem birimi olan) işlemci. Aynı anda sadece bir iş yapabilir. Fakat yapılacak işleri belirli kurallar dahilinde (zaman ve öncelik) sıraya koyduğumuzda "sanki aynı anda" çalışıyormuş gibi etkisi görülür.

Kullandığımız bilgisayarlar ve windows/linux işletim sistemide benzer mantıkla çalışıyor. Tek fark pc işlemcilerinde daha fazla core ve kaynak bulunması.

Yazılım alt yapınız olduğuna göre fikir vermesi açısından, düşük kapasiteli/kaynaklı embedded sistemlerde çalışabilen ücretli veya ücretsiz çeşitli RTOS (real time operating system) işletim sistemleri var. Ücretsiz olanlardan en popüleri FreeRTOS. Araştırmanızı tavsiye ederim.

Bunu şöyle düşünebilirsiniz: C# da yazdığınız bir uygulamada Therad (iş parçacığı) kullanımına veya windows altında aynı anda birden fazla program çalıştırmaya benzetebiliriz.

Kullanacağınız mcu ya göre RTOS seçimi ve konfigürasyonunu yaparsınız, daha sonra yapmak istediğiniz işleme göre task lar oluşturursunuz. RTOS da bu taskları sizin belirlediğiniz peryot ve öncelik sırasına arka planda otomatik olarak yürütür. Sanırım aklınızdan geçen yöntem bu şekilde bir kurgu.

C# bildiğiniz için c veya c++ a çok kolay adapte olabilirsiniz. Fakat zorlanacağınızı düşündüğüm kısım; yazılım bilmenin yanında biraz/ileri elektronik altyapısı birazda (aslında çokça) kullanılan mcu platformunun yetenekleri/kabiliyetleri konusunda bilgi sahibi olmak gerekiyor.

İlla rtos kullanmak zorunda değilsiniz. Yapacağınız şeyi klasik "süper loop (*)" içerisinde kurgulanacak bir algoritma ilede yapılabilir.




(*)
While(True)
{
// birinci işlem

//ikinci işlem
.....

}


Bu mesaja 2 cevap geldi.
B
geçen yıl
Çavuş
Konu Sahibi

Şimdi arduinoda timerları yeni öğrendim ona bir komut verip bu işlemleri yaptırabilir miyim diye düşündüm çünkü yapıcağım projede gecikme pek istediğim bir durum değil aslında ana devreye gecikme yapmıycaksa bir sorun yok ama işimi sağlama almak istiyorum o yüzden ayriyetten küçük MCU alarak seri haberleşme yapıcam attiny13a var kafamda araştırıyorum şu anda ama bir türlü Rx ve Tx pinlerini nasıl bağlıycağımı bulamadım.
Temel olarak şunu yapıcam ana devrede kullandığım butona basınca seri olarak aynı bilgiyi attiny13a ya da ileticem o da ona uyguladığım programı kendi devresi üzerinde aynı anda çalıştırıcak. Zaten tek bir mosfeti açmak ve kapamak olucak görevi.
Bu mantığı çözene kadar idarelikmen lm555 ile bir timer devresi yaparım ama işte 12 volt voltaj regülatörü potansiyometre kapasitör onun ucundan çıkan gücü mosfete bağlama mosfetten akıcak olan 24volt falan derken biraz dağınık bir çalışma olur çünkü işte bir önceki konuda konuştuğumuz H bridge devresi ile senkronize çalışması lazım bu devrenin.





< Bu mesaj bu kişi tarafından değiştirildi Buraktı -- 12 Mart 2023; 20:3:21 >

< Bu ileti Android uygulamasından atıldı >


Bu mesajda bahsedilenler: @rafet32
B
geçen yıl
Çavuş
Konu Sahibi

Hocam aklıma birşey geldi şimdi bir butonu 2 mikrokontrolcüye nasıl bağlayabilirim. Buton arduinoda yine aynı komut aynı işlevinde çalışıcak.Aynı şekilde attiny13a nın bir bacağını buton algılaması için atayıp kodumu geliştirsem olabilir mi? Zaten gndlerini bir yapıcam arduinodan gelen 5 voltu butona bağlıycam butonun diğer bacağını iki ayrı çıkış yapıp birini attinye birini arduinoya bağlasam olur mu



< Bu ileti Android uygulamasından atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @rafet32
B
geçen yıl
Çavuş
Konu Sahibi

Peki hemen hemen mantık aynı mikroişlemcilerde birkaç fark hariç bu butona iki if atarsam olur mu
Örnek
if(digitalRead(buton1) ==HIGH) //Butonun basılmış olduğunu belirtmek için
{
digitalWrite(cihaz1, high) ; //cihazı çalıştırmak için
}
if(digitalRead(buton1) ==HIGH) //Butonun basılmış olduğunu belirtmek için
{
digitalWrite(cihaz2, high) ; //cihazı çalıştırmak için
delay(250) ; //Ne kadar süre çalışmasını belirmek için
}
if(digitalRead(buton2) ==HIGH) //Butonun basılmış olduğunu belirtmek için
{
digitalWrite(cihaz1, LOW) ; //cihazı kapatmak için
delay(250) ; //Ne kadar süre çalışmasını belirmek için
}

Arduinoyla ilginiz olmadığından yanlarına ne işlem gördüklerini yazdım iki tane if kullandım aynı buton için bu şekilde aynı anda yapar mı bu işlemi. Pic ile tabi teknik ve yazılım konusundan biraz daha farklılar ama yani hemen hemen aynı amaç doğrultusunda çalışıyorlar, olabilir mi böyle?



< Bu ileti Android uygulamasından atıldı >
Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @ipli jeton
R
geçen yıl
Binbaşı

Evet olur. Ama bence gereksiz bir yöntem olur tek işlemci ile yapılabilir.




Bu mesajda bahsedilenler: @Buraktı
İ
geçen yıl
Yarbay

If komutu ilk durumun tersinde ne olacağı için kullanılır.

if
butona basıldıysa
pin 1 i yüksek yap
değilse //butona basılmadıysa
pin 1 i düşük yap

gibi

İlk durumun tersi olmayan farklı bir durum olacaksa case kullanmanız lazım.

void loop
switch(range)
case1
buton1'e basılıysa
pin1'i yüksek yap
pin2'yi yüksek yap
delay(süre)
pin1'i, düşük yap
case2
buton2'ye basılıysa
pin2'yi düşük yap

Bunu ardunino dilinde yaz.





< Bu mesaj bu kişi tarafından değiştirildi ipli jeton -- 13 Mart 2023; 8:41:41 >


Bu mesajda bahsedilenler: @Buraktı
R
geçen yıl
Binbaşı

RTOS kullanılmayan (bazı durumlarda rtosda bile geçerli, onun için osDelay(t) şeklinde rtosa özgü gecikme fonksiyonları bulunur) programlamada delay(t); şeklinde bir kullanımda cpu "t" süre bloke edilir başka bir işlem yapamaz (interrupt ve dma işlemleri hariç).

Yerinizde olsam şöyle bir yöntem izlerdim.

- Bekleme yapılacak işlemler için (ör: butona basıldı bir çıkış 400ms H olsun süre sonunda L a dönsün) mcu nun timerlerinden birisini bana lazım olan en küçük zaman biriminde kesme oluşturacak şekilde (1ms veya 100ms) kurardım.
Not: Eğer gerekli değilse çok düşük sürede kesme üretmek için kurmayın. Performans ve cpunun diğer işlemleri yapmak içinde zamana ihtiyacı var.

- Timer kesmesinde bana lazım olan diğer zamanlarıda (saniye, dakika..vb) kullanabilirim.
- Her süre dolduğunda ona ait çıkışı kesme içerisinde LOW a çekerdim.

- High işlemlerini ana döngü içerisinde yapardım ve bu esnada bunun süre sayacını ne kadar HIGH da kalmasını istiyorsam ona göre set ederdim.

-Aşağıda tek görev ve 100ms lik adımlarla görev süresini ayarlayabileceğiniz mantığı gösteren pseudecode bulunmaktadır.
Görevi H yaparsınız süreyi kurarsınız gerisini unutursunuz. Süre dolunda kendiliğinden L olur

Pseudocode:

.....
// Global değişkenler. Bize lazım olan zaman adım sayaçları
int _100ms_sayac = 0;

int gorev1_sure_100ms = 0; // görev 1 in çalışma süresi x100ms lik adımlar şeklinde

void Tim1INT()
{
reset_timer1_counter(); //bir sonraki kesme için ilgili sayaç sıfırlanır
//---
her 10ms de bir çalışacak kodlar
//--
if (++ _100ms_sayac > 10) //10 adet 10ms kesme oluşursa 100ms eder
{
_100ms_sayac = 0; //sonraki 100ms için sayaç yeniden sıfırlanıyor
//---------
Her 100ms de bir çalışacak kodlar
if (gorev1_sure_100ms>0)
gorev1_sure_100ms--;
else
OutputLOW(Gorev1_pin); // süre doldu çıkışı LOW yap
//--------
}

}
...........
Setup()
{
SetTimer1Interval(10ms); //10ms de bir kesme üretecek şekilde
EnableTimerInt(); // Timer kesmesini aktif et
EnebleGlobalINT(); // Global kesmeyi aktif et
...
}
.......
void main()
{
while(True)
{
if (input(button1))
{
gorev1_sure_100ms = 6; // 6x100ms = 600ms H olacak
OutputHIGH(Gorev1_pin); // Çıkışı H yap.
// Bu örnekte while döngüsü çok hızlı şekilde çalışacaktır. Geri sayma işlemi buton bırakıldıktan sonra başlayacaktır.
// buton basılı olduğu sürece kronometre hep 600ms ye set edilecek şekilde düşünebilirsiniz.
....
// button1 e bağlı diğer işlemlerde burada yapılabilir.
OutputHIGH(Gorev2_pin); // Çıkışı H yap.
}
..... diğer işlemler

}
}





< Bu mesaj bu kişi tarafından değiştirildi rafet32 -- 13 Mart 2023; 10:32:20 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Buraktı
B
geçen yıl
Çavuş
Konu Sahibi

Sınavlarım vardı onlara yoğunlaştım bir iki gündür girmedim foruma. Vallahi Rafet Hocam şu kadar az bir sürede ne kadar çok bana yardım ettiniz her konuda tarif edemem çok teşekkür ederim. Son bir konum kaldı onun içinde ayrı bir konu açıcam 6 çıkışlı step motor hakkında ona da yardım ederseniz canı gönülden size minnet duyarım.



< Bu ileti Android uygulamasından atıldı >


Bu mesajda bahsedilenler: @rafet32
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.