Seri porttan gelen veriyi saklamak için SD Card ?
  • Arkadaşlar merhaba. Şuan üzerinde çalıştığım proje gereği bluetooth üzerinden arduino ya sürekli byte tipinde değişkenler yollamam gerekiyor. hemen hemen 20 ms de bir değişken, bu değişkeni arduino içinde map edip servo motoru sürmem gerekiyor. aslında yapmam gereken herşeyi yaptım sistem cok güzel çalışıyor fakat bi yerden sonra sanırım arduino nun kapasitesi dolmuş olsa gerek, veri yollayamıyorum arduino'ya. bunu denemek icin 10 saniye de bir reset butonuna bastım uzun süre devam etti veri aktarımı herhangi bir donma olmadan. tabii 10 saniyede bir arduino'yu resetlemek benim projem için hiç te olumlu bir çözüm olmadı. benim de aklıma SD card eklentisi geldi. bu konuda hakkında hiç bir fikrim yok. sadece böyle bir şey olur mu merak ettim. saygılar. iyi günler
  • Merhaba,

    Probleminiz Arduino bufferının şişmesi. Uno kullandığınızı varsayıyorum. 128 byte serial bufferı var. 64 bytesi receive, 64'ü transmit. Her seferinde ne kadar büyüklükte bir veri gönderiyorsunuz bilmiyorum ama Arduino'nun okuyup işleme hızı sizin verilerin gelme hızından daha düşük kalıyor. Bir de sürekli istek gönderiyorsanız o zaman da transmit bufferını işgal ediyorsunuz demektir.

    Donanımınızı, devrenizi ve kodlarınızı paylaşırsanız daha net yardımcı olabilirim. Paylaşmak istemezseniz şunları öneririm;

    1- Mümkünse 20ms'i yükseltin,
    2- Datayı aldıktan sonra işlenebilmesi için delay verin,
    3- Kodu olabildiğince optimize edin,
    4- Debug için serial.print kullanıyorsanız onları kapatın,
    5- Baudratenizi değiştirerek deneyin,
    6- Gelen byteları stringe çevirip stringi işlediğinizi tahmin ediyorum. Bunu başka bir metodla çözmeye çalışın.
    7- Aldığınız datayı işledikten sonra flush edin.

    SD kart kullanımını, aldığınız datayı oraya yazdırarak kayıpsız olarak okumayı sağlamak için düşündüğünüzü varsayıyorum. SD karta yazdırmak ve oradan geri okumak kodunuzu daha da yavaşlatır. Veri kaybınız daha fazla olur.



  • if(bluetooth.available()>0)
    {
    byte sensor =(byte)bluetooth.read();
    int servo_kontrol = map(sensor,0,69,0,179);
    servoMotor.write(servo_kontrol);
    ..

    Kodlar bu şekilde. Aslına bakarsanız datayı cok hızlı alıp cok hızlı işlem yapmasını istiyorum, benim aklıma gelen çözüm yöntemleri ise , ya daha büyük kapasitesi olan bir arduino kullanacağım. yada buffer ı belirli periyotlarla temizleyeceğim. tabii böyle bir şey mümkünse
  • Son sorunuzun cevabı ve projenizde çıkacak diğer sorunların çözümleri yukarıdaki yorumda yazıyor. Telefonla motor kontrol etmenin gizlenecek hiç bir yanı olmadığını da belirtmek isterim.
  • Gizlediğimden değil kodların gereksiz kısımlarını burada yazsam sadece göz kalabalığı olacaktı. ;) gizlemeye çalıştığım felan yok.
  • ben de gps ten geken verileri sd karta yazan bir proje yapmıştım arduino uno ile Arduino anlamsız takılmalar yaşadı. Ya sd karta yazmadı yada matematiksel işlemlerde bazı yanlışlıklar oldu.
    sd karta yazma ve karmaşık matematiksel işlemlerden sonra delay(100); komutu yazıp programı yavaşlattığımda sorunlar ortadan kalkmıştı
  • Anladım. aslında ahmet beyin söylediği gibi debug için kullandıgım serial.println satırını programdan cıkardım ve sorunsuz çalışmaya başladı. Bunun nedeni sizce nedir arkadaşlar ? cünkü yaptıgım araç için bir kaç sensör de koymayı planlıyorum bunların verilerini android telefona iletmeyi düşünüyorum. eğer transmitte ve receive aynı anda zorluk cıkarıyorsa benim icin bu sorun henüz çözülmemiş demektir.
    saygılar
  • Arkadaşlar sorunu çözdüm. Sorun benim bilgi eksikliğimden kaynaklanıyormuş. Bluetooth Modülün Tx ve Rx pinlerini D0 ve D1 yapmıştım. Tabii Uno kartın kendi serial pinleriyle çakıştığı için sağlıklı sonuç vermiyordu. Pinleri D2 ve D3 yaptıktan sonra sorun ortadan kalktı. Saygılar.
  • Evet serial haberleşme kullanırkaen D0 ve D1 serial haberleşmede kullanılıyor ve devre dışı kalıyor, serial kullanmadığınız sürece D0 ve D1 i rahatlıkla kullanabilirsiniz
  • Çalışması için çakışması lazım zaten. D2,D3'le seri haberleşemezsiniz. BT'nin TX'ini Arduino'nun RX'ine bağlamanız ve diğerleri için de tersini yapmanız lazım.
  • Valla SerialSoftwareSerial kütüphanesiyle D2 ve D3 ü RX , TX olarak tanımladım ve BT pinlerini ona göre yerleştirdim. şuan umduğumdan daha iyi çalışıyor veri gönderip almalarında ve seri monitöre yazdırmada en ufak bir sıkıntı yaşamıyorum.
  • SD Karta yazmak için gerekli olan komutları verebilir misiniz ?

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.