Bluetooth ile sıcaklık verisi gönderme

Başlatan yolcu27, 10 Ağustos 2016, 10:42:43

yolcu27

DS18B20 sensörünü pic16f628 ile ete hocamın programı ile okuyarak hserout komutu ile bluetooth üzerinden android programına göndermek istiyorum.

ISI1    VAR     BYTE       'BU PROGRAMDA VAR. 29-04-2005 DE
ISI2    VAR     BYTE 
BUSY    VAR     BIT
HAM     VAR     WORD
ISI     VAR     WORD        ' Hesaplanmış ISI değeri
     
SIGN_BITI   VAR HAM.11'Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret
ISARET      VAR BYTE
TEMP        VAR BYTE         

SENSOROKU:
'           ham=$FFBF:Gosub hesapla:RETURN  'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------         
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
'       temp=($ffff-ham+1)*625 'bu satır alttakinin yerine kullanıldı
       Temp=625*(~HAM+2)
       ISI  = DIV32 1000
       GOTO GEC   
    endif
    TEMP = 625*(HAM)        '
    ISI = DIV32 1000          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    ISI2 = (ISI //10)
    ISI1=ISI/10
    RETURN

HSEROUT[ISI1]




tam incelemedim denemeden kopyala yapıştır yaptım sıralama aşağı yukarı bu şekilde olacak.

normalde devrede bir butona basarak SELAM yazısını gönderip andorid programda görebiliyorum yazıyı. burada ISI1 değişkenini göndermek istiyorum

HSEROUT[ISI1]


şeklinde gönderirsem metin olarak mı gider yoksa  değişkenin değeri olarak mı gider?  daha önce buton ile kullandıgımda veri göndeririken



if porta.1=1 then
HSEROUT["SELAM"]
else goto basla
endif


şeklinde kullanınca direk text olarak gidiyordu takıldıgım nokta text degilde degiskenin içindeki degeri gönderme konusunda fikirlere açıgım deneme imkanım suan yok elimde pic kalmadı yarın deneyecegim.

yolcu27

#1
 ' --------------------GENEL DEĞİŞKENLER-------------
ISI1    VAR     BYTE       'BU PROGRAMDA VAR. 29-04-2005 DE
ISI2    VAR     BYTE 
BUSY    VAR     BIT
HAM     VAR     WORD
ISI     VAR     WORD        ' Hesaplanmış ISI değeri
     
SIGN_BITI   VAR HAM.11'Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret
ISARET      VAR BYTE
TEMP1        VAR BYTE         
SYMBOL Comm_Pin=PORTA.0   

SENSOROKU:
'           ham=$FFBF:Gosub hesapla:RETURN  'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
'----------------------ISI HESAP ALT PROGRAMI-----------------------------------         
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
'       temp1=($ffff-ham+1)*625 'bu satır alttakinin yerine kullanıldı
       Temp1=625*(~HAM+2)
       ISI  = DIV32 1000
       GOTO GEC   
    endif
    TEMP1 = 625*(HAM)        '
    ISI = DIV32 1000          ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    ISI2 = (ISI //10)
    ISI1=ISI/10
    RETURN
   
    HSEROUT [SIGN,ISI]     
   


sıcaklık ölçümü ve yollama kısmı şu şekilde olacak. bunu veri kontrolü yaptıgım döngü içerisine koyacağım. döngünün sonuna geldikçe bilgi gönderecek. @ete hocamın rf termometre alıcı verici kısmındaki verici kodları içerisinden aldım kodları. derlerken hata vermedi fakat elimde pic olmadıgı icin deneyemedim daha. bir türlüde isiste bu tarz devrelerin simulasyonunu yapamadım.

ete

Öğrenmen gereken husus şu,
Seri yoldan bilgi gönderirken tırnak içine aldığın ifade ASCII karşılığı olarak yollanır.
Ama direk değişken adı kullanırsan değişken değeri yollanır.
Örnek olarak karşıya ETE ifadesini yollamak istersen Heserout ["ETE"],
Isı değerini yollamak için de Heserout[Isı] şeklinde kullanım doğru olmaktadır.

Ete

yolcu27

Tamamdır hocam ince bir nüans ama gözümden kaçmış derslere okadar baktım ama
Örneklerden çıkardım bende durumu nasıl yazılması gerektiğini teyit ettirmek istedim. Yarin devre üzerinde deneyecegim

yolcu27

virutual terminal ile okudum sıcaklık değerini. kendi kodlarımın içersine ekledim. yarın devre üzerinde deneyeceğim

yolcu27

Çok enteresan bir sorunla karşı karşıyayım.

Byte verisi olarak gonderdigim veriyi 1 den 10 akadar sorunsuz bir şekilde kontrol edip ona gore işlem yapıyorum yani gelen veri 10 ise led yak şeklinde. Fakat 10 üzeri veri yolladigim da mesela 15 bu kontrolu yapmama rağmen işlemi yapmıyor.  . Bu bilgileri telefondan pic e yolluyorum Bluetooth üzerinden

ete

Veri paketi başında işaretçi kullan . Böylece veri adedi 10 olunca sistem yine çalışır.
Ancak benim bildiğim veri adedi ile değil veri değeri ile işlem yapılmalıdır.

Ete

yolcu27

#7
Hocam sorunum şu şekilde.

İf veri=7 then
Porta.7=1
Endif 

Bu şekilde 7 bilgisi gelince işlem yapıyor
Amaa

İf veri=15 then
Porta.6=1
Endif

15 verisi gelince işlem yapmıyor. App inventor ile aynı şekilde yolluyorum veriyi ama 10 dan sonra sorun oluyor. Tek bir veri alıyorum
HSERİN [veri]
Bu veri 1 den 10 a kadar değer aldığında sorun olmuyor ama 10 değerinden sonra sıkıntı başlıyor program çalışmıyor 10 üzeri değerlerde

ete

O zaman veri adedi değil veri değeri 10 u aşınca sorun oluyor demekki. Çok enteresan.
Programında bu amaca yönelik bir komut olmazsa böyle şeyler olmaz. İyici encele programı.
Sonuçta veri yollanacağı zaman 0-9 arası sayılar için sayının ascii karşılığı yollanır. 1 için 49 gönderilir. Ama 10 yollamak için 49+48 şeklinde bilgi yollanır. Bu durumda akla şu geliyor senin veri sistemin tek byte alıyor. 10-11.. Sayıları çift byte olarak yollanıyor.
Şunu deneyebilirsin heserin [#veri] bu durumda tek byte alınır ama gönderen modülde de buna benzer bir şey ayarlamak gerekir.
Yada yapacağın işleri 0-9 arasında sınıflandırman gerekir.
Ete

yolcu27

Alıntı yapılan: ete - 12 Ağustos 2016, 12:30:44
O zaman veri adedi değil veri değeri 10 u aşınca sorun oluyor demekki. Çok enteresan.
Programında bu amaca yönelik bir komut olmazsa böyle şeyler olmaz. İyici encele programı.
Sonuçta veri yollanacağı zaman 0-9 arası sayılar için sayının ascii karşılığı yollanır. 1 için 49 gönderilir. Ama 10 yollamak için 49+48 şeklinde bilgi yollanır. Bu durumda akla şu geliyor senin veri sistemin tek byte alıyor. 10-11.. Sayıları çift byte olarak yollanıyor.
Şunu deneyebilirsin heserin [#veri] bu durumda tek byte alınır ama gönderen modülde de buna benzer bir şey ayarlamak gerekir.
Yada yapacağın işleri 0-9 arasında sınıflandırman gerekir.
Ete

ascıı degilde evet byte olarak gönderiyor android programından. bahsettiginiz gibi tek sayılarda sorun yok ama çifte geçince sorun oluyor.  çift byte olarak almak için nasıl bir ekleme yapabilirim. bir register bir kod satırı vs.

ete

Pic to pic çalışmada bu sorun veriyi ascii değilde sayı olarak yollamak işi çözüyor.
Hserout [#veri] komutunda veri=14 ise karşıya direk tek byte halinde 14 gönderilir.
Hserin[#veri] komutu da aldığı 14 rakamını direk depişkene yerleştirir.
Android de bu özellik varmı bilmiyorum. Böyle bir şey yoksa, yollanan sayı şayet 9 dan büyük ise,
Sayı yı iki byte halinde , byte1=sayı-10 ve byte2=10 olarak yolla.
Alırken ise yine 2 byte olarak al. Veri1 ve Veri2 şeklinde. Sonra bunları topla. Şayet byte2 9 dan büyük ise sıfır kabul edersin.
Ete

yolcu27

Alıntı yapılan: ete - 12 Ağustos 2016, 18:38:40
Pic to pic çalışmada bu sorun veriyi ascii değilde sayı olarak yollamak işi çözüyor.
Hserout [#veri] komutunda veri=14 ise karşıya direk tek byte halinde 14 gönderilir.
Hserin[#veri] komutu da aldığı 14 rakamını direk depişkene yerleştirir.
Android de bu özellik varmı bilmiyorum. Böyle bir şey yoksa, yollanan sayı şayet 9 dan büyük ise,
Sayı yı iki byte halinde , byte1=sayı-10 ve byte2=10 olarak yolla.
Alırken ise yine 2 byte olarak al. Veri1 ve Veri2 şeklinde. Sonra bunları topla. Şayet byte2 9 dan büyük ise sıfır kabul edersin.
Ete

Ozaman ben pic tarafında HSERİN[#veri] kullanarak deneyeyim birde 

mesut25

#12

belki şu faydası olur
http://appinventor.pevest.com/?p=569

yolcu27

HSERİN [#veri] şeklinde denedim olmadı yine. Birde app inventor den gönderme şeklinde değişiklik yapayım bakalım.

Powered by EzPortal