Soru & Cevap

EEPROM veri kaydetme ve okuma hakkında? ...

05.07.2018 - 02:49

Arduinonun EEPROMuna kodda gömülü veri değil dışardan değiştirilebilir (özellikle gsm yoluyla) bir veri kaydetmek ve okumak istiyorum.Bunu gsm kullandığım için AT komutları ile yapmam gerektiğinin farkındayım fakat nerde hata yaptığımı bir türlü anlayamıyorum.Hata büyük ihtimalle AT komutlarında o konuya pek hakim değilim hakim olan birisi varsa ve yardımcı olursa sevinirim ilginiz için şimdiden teşekkür ederim.

 

Yazdığım kodun ilgili kısmı :

 

 

kayitAdresi = 10;
 kaydedilecekVeri = GsmSerial.println("AT + CMGR =");
  EEPROM.write(kayitAdresi, kaydedilecekVeri);
 delay(10);
 okunacakAdres = 10;
 okunanVeri = EEPROM.read(okunacakAdres );
 delay(10);
  
 
  
  
  GsmSerial.println( "AT" ); // Modül ile iletişime geç
  delay(200);
  GsmSerial.println("AT+CMGS=\" Serial.println(okunanVeri)\""); 
  delay(20);
  GsmSerial.println(smsText); 
  delay(20);
  GsmSerial.write(0x1A); 
  delay(200);

280 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-158072-1530701953.jpg
TGUNEYSU
02.08.2018 - 12:00

Sadece AT komutları hakkında:

Ekteki kodunuzda gördüğüm kadar bazı yanlışlar var:

  • GsmSerial.println("AT + CMGR =");
    Burada AT komutun arkasındaki + etrafında boşluk bırakmışsınız. Bu doğru değil. AT komutlarını boşluksuz yazın: ("AT+CMGR=")
  • Kullandığınız +CMGS komutunun uygulaması yanlış. Bu komutun sözdizimi:
    AT+CMGS="+90cepnumarası"<CR>yollayacağınız mesaj<Ctrl+z>
  • <CR> = 0x0D
  • <Ctrl+z> = 0x1A
  • Yukarıdakilere göre kodda kullandığınız 
    GsmSerial.println("AT+CMGS=\" Serial.println(okunanVeri)\"");   doğru değil. Bir de Serial.println komutunu başka bir Serial.println komutunun içine koymuşsunuz. Bu da doğru değil.
  • Devamlı println kullanıyorsunuz ve bundan dolayı her satır arkasına bir CRLF ekleniyor. Bu kurmak istediğiniz komut düzenini bozabilir. println yerine print kullanın ki bütün dizgileriniz istediğiniz gibi aralıksız peşpeşe olsun. 
  • Gereken kontrol karakterlerini de gösterilen hex kodlarla dizginize ekleyin.
  • Yazdığınız kod yalnız SIM karta komutları yolluyor, fakat geri gelen cevaplara bakmıyor. Bu iki yönlü iletişim bakımından doğru değil.
  • EEPROM yazıp okuma hakkında:
    yazmak istediğiniz veri tipine göre uygun olan yazma komutunu kullanmanız gerekir. 
    WRITE / READ tek bayt yazar ve okur. PUT / GET değişik veri tipleri yazıp okuyabilir.

https://www.teachmemicro.com/arduino-gsm800l-tutorial/ linkindeki örnek projenizi kütüphane kullanarak daha kolay yapmanızı sağlayabilir.

İyi çalışmalar.