Diğer diller ve Derleyiciler => Micro-C => Konuyu başlatan: Hattuşa - 02 Haziran 2018, 17:15:13
Başlık: ARDIUNO ve buton kullanımı sorunu
Gönderen: Hattuşa - 02 Haziran 2018, 17:15:13
slm arkadaşlar; ardiuno mini ile ilgili bir projemde buton kullanımında, butona 2 işlevsellik kazandırmak istiyorum ama beceremedim. amacım butona uzun basıldığında bir işlem yapmak, kısa basıldığında ise başka bir işlem yapmaktı ama olmadı. basic dilinde olsaydı.
sayac =0 if buton =0 then while buton =0 inc sayac wend if sayac >500 then 'birinci islem else '2 islem endif
yazar kurtulurdum. ama C de bunu yapamadım. while döngüsünü kullandım fayda etmedi.
bu işin doğrusu nasıl olmalı??
Say =0; while (digitalRead(SecPin)==LOW){ if (say>500) //birinci islem else { //ikinci islem } }
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: furkan41 - 02 Haziran 2018, 20:58:36
if(Say>=500) // burayı >= ifadesi ile yap.
birde sen say değişkenini arttırmıyorsunki ? nasıl koşulu sağlayacak ? hep şartın değilini sağlayacak program if şartından önce şöyle yapsan olabilir.
say++; // say değişkenini 1 arttır. delay_ms(1); 1 milisaniye bekle 500 den büyük olduğunda koşulu sağlayacak ise 500ms lik bekleme demektir buda. if(say>=500) // say değişkeni 500 den büyükse veya eşit ise { 1.koşul; //koşulu sağla } else 2.koşul; // değil ise 2. koşulu sağla.
[\code]
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: Hattuşa - 02 Haziran 2018, 21:40:36
usta;
if buton =0 then while buton =0 inc say wend
basicte while koşulu buton =0 olduğu sürece while-wend arasında sayar durur. yani buton =0 olduğu sürece wend ile tekrar while kısmına döner.C dilinde ben buton =0 olduğu sürece while -wend arasında kalmasını istiyorum. sizin yazdığınız şekli ile işlem ilerleyecek program tekrar başa dönüp bu noktaya geldiğinde sayacı 1 artıracak. ben o şekilde değilde
basicte olduğu gibi;
basla: //yapılacak işlemler if buton =0 then goto basla
olmasını istiyorum. malum C de goto yok, kafa basmadı
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: furkan41 - 02 Haziran 2018, 21:52:46
Değerli abim Basic'te nasıl bilmiyorum normalda while bir döngüdüri icinden cıkmadıkcada başka bir işlem yapmaz döner durur sen 1ms lik durdurma ile değişken arrtırıp koşuldaki zamanı sağlayabilirsin basic dilindede inc say diyorsun inc komut mu artık bilmiyorum sayma işlemini o komut yaptırıyor olabilir mikroC de böyle bir komut duymadım daha doğrusu C de de görmedim. dediğim şekilde yaparsan butondan elini cekmediğin sürece istediğin zamanlamada istediğin işi yaptırısın. ben böyle düşündüm bir dene istersen. belki denediğinde fikrin değişir.
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: Hattuşa - 02 Haziran 2018, 21:56:32
Furkan usta; basic te inc =1 artır demek, yani inc say dediğimde say =say +1 demektir. dediğini şimdi deniyorum. istediğim sizin anlattığınız şekilde olmalı, kusura bakma, sonradan görme C ci olduğumuz için eski alışkanlıkları bırakamıyoruz.
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: furkan41 - 02 Haziran 2018, 23:03:24
yukarıdaki linkteki lcd ve keypad kitten temin ettim.çinden getirttiğim AD9833 DDS entegresini ardiuno mini ile çalıştırmayı düşündüm. herşey normal, menuler vs vs yalnız yukarıdaki koda göre çıkarmak istediğim frekans değerini 0-255 arasından yukarıya çıkartamadım. şöyleki;
sağ butonuna atadığım katsayı değeri değişimi 1,10,100,1000,10000 şeklinde yani kullanıcı atıyorum 50khz sinyal çıkartmak istedi. bunun değeri 50 000 olmalı hızlı bir şekilde bu değere ulaşması için
freq =freq +katsayi //burada katsayi değeri 10000 dolayısı ile 5 kez basınca bu frekansı çıkarmş olacak.
gel gör ki yukarı ve aşağı butonları ile ben asla 0-255 üzerine çıkamıyorum. freq tanımlamam unsigned long tipi, katsayi tanımlamam unsigned long tipi ACABA nerde hata yapıyorum. fikri olan varmı?
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: furkan41 - 06 Haziran 2018, 16:39:47
Kod'u buraya aktarma gibi durumun var aktar öyle bakalım birde katsayı değerlerini bir ARRAY mı yapın orayı pek anlamadım acıkcası sorun burdan dolayı doğmuş olabilir. gibime geliyor ama yinede kod'u buraya yüklersen dikkatlice bir kontrol edebiliriz birde O LCD sheild üstündeki butonlar analog pin üzerinden oknuyordu yanlış hatırlamıyor isem . ondan da kaynaklanan bir sıkıntı olabilir.
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: mehmet - 06 Haziran 2018, 16:57:27
Hocam; milis() fonksiyonu var. Onu da rahatlıkla kullanabilirsiniz.
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: Hattuşa - 06 Haziran 2018, 17:52:35
Alıntı yapılan: furkan41 - 06 Haziran 2018, 16:39:47 Kod'u buraya aktarma gibi durumun var aktar öyle bakalım birde katsayı değerlerini bir ARRAY mı yapın orayı pek anlamadım acıkcası sorun burdan dolayı doğmuş olabilir. gibime geliyor ama yinede kod'u buraya yüklersen dikkatlice bir kontrol edebiliriz birde O LCD sheild üstündeki butonlar analog pin üzerinden oknuyordu yanlış hatırlamıyor isem . ondan da kaynaklanan bir sıkıntı olabilir.
ekte isis simülasyon şeması, ardiuno kodu vs hepsi var. yapmak istediğim frekans değerlerini long türünde değiştirebileyim. bu hali 0-255 arası değişiyor oysa ben 1-1000000 arası değiştirebilmeliyim
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: furkan41 - 06 Haziran 2018, 22:39:47
Şimdi algoritmayı inceledim Anlamakta biraz zorlandım fakat senin sorun cok bariz ortada sen değerleri epproma yazdırmışsın displayyaz fonksiyonunda eepromdan okuduğun değeri ekrana yazdırmışsın.
ve sen eppromun sadece bir bölümüne yazdırmışsın bunu bir hücreye yani bir hücrede 0-255 değer alabilir yani senin sorunun sadece ekrana mesaj verme sıkıntısı eğerki sen modüle göndereceğin frekans bilgisini direk gönderiyorsan (eeproma sokmadan) modülden istenen frekansı alırsın ama ekranda yanlış yazar. eğerki modüle gidecek frekans bilgisinide epproma yazdırdığın değerden okuyup gönderiyorsan oda sıkıntı oda 0-255 arası cıkacak.
Senin yeni bir fonksiyon kurman gerekiyor for döngüsü ile tek tek eeproma yazdırıp okurken de yine for döngüsü ile tek tek okuyup float gibi yüksek değer tutan bir değişkende bunları geri toplaman lazım.
tabi eepromada tek tek bunu kaydedemezsin onun icin for döngüsündede iyi bir algortima kurman lazım. eeprom cok gerekli değil ise eğer kaldır derim. cünkü sana baya sıkıntı cıkarır uğraştırır.
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: furkan41 - 06 Haziran 2018, 22:44:12
Ki eepromu kullanman da gerekiyor cünkü tüm sinyaller arasında geçiş yaparken diğerlerinin hafızada tutulmasını istiyorsun yani dediğim gibi eeproma yazma ve okuma kısmında bir fonksiyon kurman gerekiyor birde LCD ekranda SINUS.KARE.TESTERE yazıları tam cıkmıyor onuda SIGNAL yazısındaki sutun konumlandırma numarasını 1 yüksek tuttuğun icin galiba onuda 1 düşür.
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: Hattuşa - 06 Haziran 2018, 22:44:35
usta eprooma yazdırmam lazım. ileride belirlenen frekansı çıkarabilmem için, sizin için sakıncası yoksa ardiunoda long ve float değişkenlerinin eprooma yazdırılması ve okunması ile ilgili basit bir örnek verebilirmisiniz?
Başlık: Ynt: ARDIUNO ve buton kullanımı sorunu
Gönderen: furkan41 - 06 Haziran 2018, 23:34:11
@pro-TR tam da senin sıkıntın icin yazılmış bir yazı gibi görünüyor :))