AT Komutları

Başlatan zeus48, 30 Mayıs 2022, 13:12:07

zeus48

Arkadaşlar mrb. Değişik yerlerde kullandığım HC-12 433 mhz modülüm var. Bu modülü istediğm gibi programlaya biliyorum aşağıda verdiğim kodlarla.  Sorumu alta yazacağım. Şimdi kodları görün


AYAR:
LCDOUT $FE,$80,"AYARLANIYOR" ;EKRANDA YAZDI
KLED=1                       ;KIRMIZI LED YANDI

SET=0                        ;ROGRAMA GEÇMEK İÇİN 0 YAPILDI
PAUSE 1000
Hserout["AT+B9600"]    ;İLETİM HIZI
PAUSE 500   
Hserout["AT+FU3"]      ;İLETİM MODU
PAUSE 500
Hserout["AT+P8"]       ;İLETİM GÜCÜ 1-8 ARASI
PAUSE 500
Hserout["AT+C001"]     ;KANAL SEÇİMİ 1-127 ARASI



Sorum şu  modülün kanalını değiştirmek istesem her seferinde ayarlamak için yaptığım devrenin işlemcisini çıkarıp yeniden yüklemem gerekiyor.

Bende lcd ekranlı yeni bir devre yaptım , istediğim kanalı tuşlarla ayarlayıp mödülü göndermek için.
Fakat  Hserout["AT+C001"]  buradaki C001  yerine bir değişken atıyorum ama sistem görmüyor yani modülün kanalını değiştirmiyor. Şöyle yapayım dedim

IF X=1 THEN Hserout["AT+C001"]
IF X=2 THEN Hserout["AT+C002"]
IF X=3 THEN Hserout["AT+C003"]

Bu seferde 1-127 kanal seçimi var yani 127 satır.  Bir fikri olan varmı . Tşk iyi çalışmalar

alisumer

#1
gönderdiğin "c001" komutu asci değer karşılığı olarak  4 byte veri göndermen gerekiyor 4 bytelik değişkene ilkine C nin dec yada hex karşılığı sonrasında 3 adet 0 ın karşılıkları sonrada 1 in hex yada dec karşılığını yaz sıra ile bu değişkenleri gönder olur. tabi bunun içinde at ve + da asci "  toplam oldu 7 byte değer çifttırnak içinde olan herşey asci ona göre düşün
Hep meraktan

zeus48

Tşk arkadaşım. Bir örnek yazabilirmisin ?

alisumer

 :o tırnak içerisinde kaç karakter varsa o kadar değişken tanımlamalısınız herbir karakter byte boyutunda örneğin A için hex karşılığı 0x41  T ninkisi 0x54
hserout ....0x41,0x54 ..... gibi yada
HSEROUT [ "AT+" ,0x41,0x54... ]
sonradan geğiştirmeyeceğin sabit kısımları " içerisine yazarsın giğerlerini ya benim yazzdığım gibi sayı olarak yada ayrı ayrı değişkenlere önceden atayıp değişkenleri yazarak yaparsın
Hep meraktan

aRci

bende bir tavsiye vereyim
Kanal Var Byte

Hserout["AT+C",DEC3 Kanal]

Şeklinde kullanabilirsiniz kanal içerisindeki değer desimal karşilii karekter olarak 3 byte olacak şekilde gönderirsiniz. burada Kanal değerini değiştirirken 127 yi aşmamaya dikkat etmen yeterli




Alıntı yapılan: alisumer - 30 Mayıs 2022, 13:45:35:o tırnak içerisinde kaç karakter varsa o kadar değişken tanımlamalısınız herbir karakter byte boyutunda örneğin A için hex karşılığı 0x41  T ninkisi 0x54
hserout ....0x41,0x54 ..... gibi yada
HSEROUT [ "AT+" ,0x41,0x54... ]
sonradan geğiştirmeyeceğin sabit kısımları " içerisine yazarsın giğerlerini ya benim yazzdığım gibi sayı olarak yada ayrı ayrı değişkenlere önceden atayıp değişkenleri yazarak yaparsın


ete

BU kartı daha önce kullanmadım. Bir tecrübem yok ancak komut şekline bakarak ;
IF X=1 THEN Hserout["AT+C001"]
aşağıdaki şekilde olması gerekir diye düşünüyorum.
Arkadaşların önerileri çalışmaz ise şunu deneyin;
IF X=1 THEN Hserout["AT+C0"+Hex(2)KANAL]
Arkadaşların da söylediği gibi komutun sabit olan kısmı tırnak içinde verilmeli değişen kısım ise tırnak dışında formatı ayarlanarak komuta eklenmelidir. Ekleme derken be (+) işareti ile ekledim ama + yerine virgülde kullanılabilir yad vu ikisinden birisi doğru olacaktır diye düşünüyorum.

Ete

zeus48

Ete hocam mrb.  modul " "  iki çift tırnak arasında olmayan hiçbirşeyi kabul etmiyor. iki çift tırnak arasına değişken atayamadım. Olabiliyormu ?

ete

Öncelikle iki tırnak ne anlama geliyor ona odaklanmak gerekir. İşlemci iki tırnak arasında olan her şeyi ASCII kod olarak yollar. Bu özellik nedeni ile tırnaklar arasına değişken yerleştiremezsin. Bu durumda yapılması gereken şey değişkeni tırnakların dışına taşımak.
Şimdi bilgiler nasıl yollanıyor biraz da ona odaklanalım.
K=15 ve HESEROUT [K] komutu verildiğinde 15 rakamsal değer olarak yollanmaz. 49,53 olarak iki byte halinde yollanır. 1 rakamı ASCII olarak=49 dur. 5 de ASCII olarak 53 dür.
HSEROUT [dec K] denildiğinde ise yollanan tek bir byte olur oda 15 dir.
Bu durumda senin işini görecek doğru komut ,
IF X=1 THEN Hserout["AT+C0"+KANAL]
şeklinde olmalıdır. Görüldüğü gibi KANAL değişkeni başında herhangi bir rakamsal işaret kullanmadık. Böylece Kanal numarası direk ASCII olarak gönderilmesi gerekir. Bu şekilde dene olmuyorsa yapacak bir şey göremiyorum.

Ete

zeus48

Sağol ETE hocan sayende gene çözdük sorunumu.
Hacam şu şekilde oldu.


X VAR BYTE:X=0  ;KANAL ŞEÇİM DEĞİŞKENİ  Öncedende bu şekilde tanımlanmıştı

Hserout["AT+C00",DEC x]  x  birler hanesinde değerini kaç ayarlarsam kabul ediyor ve çalışıyor.
onlar ve yüzler hanesini hayal güçümle hallederim. sağol üstad


zeus48

Hocam tekrar mrb.
Hserout["AT+C",DEC3 X]
 x in değerini 1-127 arası ne yazarsan oluyor sorun kökten halloldu. Sağol

Powered by EzPortal