Arkadaşlar Grafik LCD de Sinüs eğrisi çizmeye çalışıyorum. Genliği Ve Periyodu bir türlü belirleyemedim. Normalde aşağıdaki gibi bir kod ile 360 derecelik bir sinüs çizilmesi gerekir.
For Xpos=0 To 360
AX=(Pi * Xpos)/180
Ypos=32+Sin AX
Plot Ypos,Xpos
DelayMS 10
Next
Aslında çiziliyor. Ama peryodu çok uzun olduğu için ekrana sığmıyor. Genliğide çok düşük.
Yukarıda Genliği ve peryodu etkileyen faktörler nelerdir.
Çalıştığın LCD'de {0,0} koordinatları sol üst köşe. (sizdeki sol alt köşede gibi) Buna dikkat ettikten sonra derleyisiciniz de şöyle bir deneme yapın ,
sin 30 satırımı 0.5 değerini veriyor yoksa
sin (30*PI/180) satırımı 0.5 değerini veriyor ?
sanırım ne demek istediğimi anladınız.
Hocam Protonda yazıyorum
Protonda sin ve cos fonksiyonları radyan cinsinden değer kabul ediyor. Yani 0.5 için açıyı radyana çevirmek gerekiyor.
sin (30*PI/180) fonksiyonunu yazdığımda 0.49998664 çıktı. Sebebi galiba Pi sayısına virgülden sonra sadece 4 hane yazmamdan kaynaklı olsa gerek. 0.5 sayılır
32+ 30*sin(a*pi*x/180)
şeklinde dene , a değerini uygun şekli elde edebilecek bir değer seç.
Mesela a=3 seçersen x = 120 'de sinüs bir alternans tamamlamış olur.
Teşekkür ederim. Verdiğiniz gibi yapınca çalıştı.
Şunu yapamadım yanlız.
Diyelimki ben sadece 360 derecelik bir sinüs oluşturmak istiyorum. Bunu nasıl yaparım. Döngü sayısını arttırmak sadece çıkan sinüs sayısını arttırıyor.
For Xpos=0 To 90
AX=(Pi*Xpos/180)
AY=32+10*Sin AX*20
Plot AY,Xpos
Next
En son bu şekilde düzgün bir sinüs aldım. Ama dediğim gibi yapmak istediğim benim belirlediğim başlangıç noktasından itibaren pozitif sinyaller alıp 60 dereceyi tamamlaması. Aynı zamanda ben 360 değilde 90 derece dediğim zaman sadece yarım bir saykıl çizmesini istiyorum. Bunu döngü sayısıyla nasıl ayarlarım
For Xpos=0 To 90
AX=(Pi*Xpos/180)
AY=32+10*Sin AX*20
Plot AY,Xpos
Next
bu haliyle ;
x=4.5 iken açı 90 derecede
x=9 iken açı 180 derece
x=18 iken 360 derece oluyor.
yani ACI=x/9*PI oluyor.
AY=32+10*Sin AX*20 -------- 20 çarpanı yüksek bence.
Sanırım birazdaha üzerinde çalışmam gerekiyor. Biraz karıştırdım işleri.
Dediğiniz gibi 20 değeri çok fazla. O değeri 10'a düşürdüm.
Sizde neden farklı anlamadım ama bende döngü sayısını 9 yapınca 90 dereceye çıkıyor
For Xpos=0 To 9
AX=(Pi*Xpos/180)
AY=32+10*Sin AX*10
Plot AY,Xpos
Next
Birde şunu belirteyim. Ks0108 lcd var. Ekranın 0,0 noktası solt üst köşe, 63,127 Noktası ise Sağ alt köşe
Her nedense yukarıdaki kodlar işletildiğinde ilk başta negatif değerler almaya başlıyor sinüs eğrisi.
Toparlarsak eğer Peryodu değiştirmek için Sin Ax değerinin başına 10* ifadesini eklemek gerekiyor. Genliği değiştirmek için ise AX değerini 10 ile çarpmam gerekiyor. Buralarda sıkıntı yok. Şuanda yapmaya çalıştıklarım şunlar. Buradaki 10 değerleri örnektir.
* Açı değerinin 0 ile 360 arasında olması sağlamak. Tam bir sinüs için 360 döngü olması gerekiyor
* Peryodu ve genliği arttırdıkça sinüs eğrisi seyrekleşiyor. Bunuda önlemem lazım.
* Sinüs ilk başta negatif değer almaya başlıyor. Bunu tam tersi hale getirmem lazım.
Bu yukarıdaki 3 problemi çözersem çok iyi olacak.
Önerebileceğin bir yöntem varmı?
[IMG]http://i1114.photobucket.com/albums/k538/lordex06/Glcd.jpg[/img]
Resimdeki ifadeyi bir dener misin. ifadeyi birde 32- .... şeklinde dene ...
Edit:32-10*sin(45/16*PI*x/180) Ekrana cup oturması lazım :)
Hocam tamam herhalde.
Pozitif alternans işi tamam. Onda bir sıkıntı yok.
Artık dediğiniz gibi 9 döngü 0-180 derece için, 18 döngü 360 derece için yeterli oluyor.
En son bu şekilde yaptım.
For Xpos=0 To 18
AZ=(45/16)
AX=(Pi*Xpos/180)
AX=AX*AZ
Ypos=32-10*Sin AX*10
Plot Ypos,Xpos
Next
Her nedense Yukarıda 3 adet ayrı işlemi tek bir işlemde toplayamıyorum. Proton buna müsade etmiyor. C de durum nasıl bilmiyorum.
Bu şekilde yaptım ama bu sefer genlik ve peryot olayı birbirine girdi. Anlamadım bir türlü. :S
For Xpos=0 To 127
AZ=(45/16)
AX=(Pi*Xpos/180)
AX=AX*AZ
Ypos=32-10*Sin AX
Plot Ypos,Xpos
Next
bu şekilde denedinizmi ? Aynen kopyalayın ...
https://www.picproje.org/index.php/topic,29557.0.html (https://www.picproje.org/index.php/topic,29557.0.html)
Tamamdır. Şimdi düzene bindi.