RGB Modül

Başlatan canakcura, 21 Ekim 2016, 05:03:43

canakcura

Merhabalar, PIC16F777 kullanarak bluetooth ile haberleşen bir rgb led kontrol kartı yapmak istedim.
16F777 kullanmamın sebebi 3 adet hpwm çıkışının olması.

Modül olarak HC-06 kullanıyorum picle usart yoluyla sorunsuz haberleşiyor ama takıldığım bir nokta var.


App inventor ile yaptığım android programından beyaz oluşturmak için örneğin 255,255,255 şeklinde kod oluşturuluyor ve bu bluetooth üzerinden pice yollanıyor. Böyle bir veriyi nasıl r,g,b adlı üç değişkene eşitleyebilirim yardımlarınız için şimdiden teşekkürler

Elzemefe

Pic yazilimini paylasirmisin

ete

Soruyu anlamakta zorlanıyorum. Pic e sorunsuz yollanan 3 adet byte bilgisi alma işlemi neyle yapılıyor ise oraya R,G,B şeklinde önceden byte olarak tanımlanmış 3 adet değişkene veri gelme sırasına göre yetleştirilebilir. Bu kadar işi başarmış birisinin bunu nasıl değişkenlere yerleştiririm diye sorması garip kaçmış. Yada soruda başka bir anlam gizli.
Ete

canakcura

Sanırım ben kendimi yanlış ifade etmişim. 3 adet byte bilgisini alma işlemini yapamadığımdan bu konuyu açmıştım. Sorunsuz olarak aldığımdan bahsettiğim bilgi deneme olarak gönderdiğim 0 ile 255 arasındaki rakamlardı. Ama iş bu renk bilgilerini almaya gelince bocaladım. Androidten renk bilgisi gönderiliyor bunu bilgisayardan okuyabiliyorum yeşili seçtiğimde 0,255,0 değerini terminal programında okuyabilliyorum. Bunu pice gönderdiğimde ise gelen bilgileri görebilmek için 3 değişkenide lcdye yazdırıyorum kararsız bilgiler geliyor her seferinde. isis ve basic dosyalarıni yüklüyorum bakabilirseniz sevinirim ayrıca isiste 16f777 olmadığı için 877A kullandım deneme amaçlı

ete

#4
Programın tek eksiği bilgi alışverişinde ön işaretçi bilgisinin kullanılmamış olması.
Bu şekilde her türlü yanlış bilgi de USART'ı aktive edip bilgi alınıyormuş gibi işlem yaptıracaktır. Buda alakasız bilgi gelişine sebep olur.
Android den yollanan bilgi öncelikle başına bir işaretçi eklenerek yollanmalı mesela "ABC",R,G,B gibi. Burada "ABC" bilgisi ön işaretçidir. Bilgi paketinin başını gösterir. Pic tarafı bu bilgiyi alırken;
HSERIN[Wait("ABC"),R,G,B] şeklinde paketi almaya çalışır. Bu işlemde öncelikele gelen ABC bilgsine bakar. Bulursa peşinden gelen 3 adet Bte bilgsini alır. Gelemz ise o işlemi atlar.
Diğer bir faydalı metod da net bir bilgi alınmış ise onları ekranda göster demektir. Bunun çareside ;

Disable
KESME:
ALDIM=0
HESERIN 10,ATLA,[Wait("ABC"),R,G,B]
ALDIM=1
ATLA:     
     TEMP=RCREG
      Resume
      Enable
      End
şeklinde bir timeout değeri ve bilgisi ile bu bilgiyi almak şayet bilgi yakalanmış ise ALDIM bayrağı 1 yapılmalı değilse sıfır olarak geri dönülmelidir.
Ana program bölümünde ise,
BASLA:
                   WHILE ALDIM=0:WEND   
                   LCDOUT $FE,$80,"R:",R
                   LCDOUT $FE,$86,"G:",G
                   LCDOUT $FE,$C0,"B:",B

     
                   GoTo BASLA

şeklinde bir kod kullanılarak yalnızca doğru alınmış bilgilerin gösterilmesi sağlanabilir.
Tabbiki ek bir tedbir olarak ana bilgi yollanmadan önce uyandırma bilgisi yani;
5 byte $AA
5 byte $00
5 byte $FF
yollanmalıdır. Bu bilgi önden gelirken USART portunun uyandırılmasını ve programın Kesme etiketine atlamasını sağlar.
Peşinden asıl bilgi dizisi gelerek sistemin asıl bilgileri eksiksiz almasını sağlar. Değilse asıl bilgin portu uyandırır ve program oraya gidinceye kadar ilk bilgi kaçırılabilir. bu durumda beklenen ABC dizisi yerine BC dizisi alınır ve buda doğru bilgi gelmedi olarak değerlendirilir. Bu nedenle önden uyandırma sinyalinin bu işi epeyce kolaylaştıracağını düşünebilirsiniz.
Toparlarsak Android , önce 5 byte $AA, 5 byte $00 , 5 byte $FF ve ardından ("ABC") ve ardından R,G,B bilgilerini yollamalıdır. Pic tarafı ise sadece ABC ve ardından R,G,B bilgilerini almalıdır.


Ete


canakcura

Hocam uyandırma ve ön işaretçi bilgisini gönderecek şekilde ayarlayamadım programı android işinde yeniyim biraz fakat bişey fark ettim programda birden fazla veri gönderme seçeneği var



resimdeki seçenekler mevcut ben 0 ile 255 arasındaki veriyi deneme amaçlı gönderdiğimde bunu send1byte number ile göndermiştim fakat şimdi sendtext komutu ile göndermeme izin veriyor program çünkü program içinde renklerin hepsi bir değişkendeler 1,2 yada 4 byte ile göndermeye çalıştığımda hata veriyor. Text komutuyla sanırım ASCII olarak gönderiliyor bütün bilgiler ben bu yüzden doğru alamıyor olabilir miyim ?

ete

Belliki Android tarafında sorunun var pic tarafında değil. Yada henüz Android tarafını doğru şekilde halledememişsin.
Önce orasını halledip sonra pic tarafı ile uğraşman gerekecek. Evet belliki bilgiler ASCII formatında yollanıyor.
Sen list gönderme seçeneği ile her bir karektere ait ASCII karşılığını yollaman gerek.
Örnek vereyim, $AA desimal karşılığı 170 dir. Bunu 1 in karşılığı 49, 7 nin karşılığı 57 ve sıfırın karşılığı olarak 48 yollayarak tamamlayacaksın.
255 bilgisi ise 50-53-53 şeklinde yollanmalı. Gerisini sen bul artık. 48, sıfır rakamının ASCII karşılığıdır.
Ete

canakcura

Hocam teşekkür ederim. Sorun android programındaymış renklerin hepsini ayrı ayrı değişkenlere yerleştirerek bu değişkenleri tek tek 1byte number olarak gönderdim sorunum halloldu şuanda bilgiler sırasıyla ve doğru geliyor tekrar teşekkürler

yolcu27

Alıntı yapılan: canakcura - 25 Ekim 2016, 15:22:12
Hocam teşekkür ederim. Sorun android programındaymış renklerin hepsini ayrı ayrı değişkenlere yerleştirerek bu değişkenleri tek tek 1byte number olarak gönderdim sorunum halloldu şuanda bilgiler sırasıyla ve doğru geliyor tekrar teşekkürler

ozaman şuan siz android ile de 0-255 arası deger gönderip bunları r g b adlı byte degiskenlere yerleştiriyorsunuz. benzer bir uygulamada ben yapmıştım da. ben degerleri 10 dan fazla gönderince sorun oluyordu .max olarak android ile 10 degerini gönderebiliyordum. sizin gibi bir ara deneyeyim bakalım zaman bulursam:D

canakcura

Ayni sorunu bende yasamistim sendtext ile değilde send1byte number ile gonderirseniz sorun çözülecektir.

Powered by EzPortal