Picproje Elektronik Sitesi

ENDÜSTRiYEL OTOMASYON => Robotik Sistem Tasarımı => Konuyu başlatan: robikod - 17 Haziran 2016, 16:48:45

Başlık: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 17 Haziran 2016, 16:48:45
Mesafe bilgisini seri port üzerinden almaya çalışıyorum.
Arduino tarafındaki kodlar:
void mesafe()
{
digitalWrite(trigger_pin,HIGH);
delayMicroseconds(100);
digitalWrite(trigger_pin,LOW);
zaman=pulseIn(echo_pin,HIGH);
uzaklik=(zaman/2)/29.1;
Serial.print(uzaklik);

 
}


C tarafındaki kodlar:

int mesafe=0;

ReadFile(hComm,&mesafe,1,NULL,NULL);
printf("Su an engelden %d cm uzakliktasiniz \n ",mesafe);
if(mesafe<=4)
{
printf("dikkat!\n");
}



Mesafe bilgisini bu şekilde C ekranına göndermeye çalışırken, rastgele sayılar üretiliyor bu sorunu nasıl çözebilirim ?
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 17 Haziran 2016, 22:55:44
Ödevimi teslim etmem gerekiyor bu konuda yardımcı olacak var mı ?
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: mehmet - 17 Haziran 2016, 23:22:39
"uzaklik" değişkeni float anladığım kadarıyla; bu değişken
içeriğini hane hane parçalayıp ASCII olarak yollarsınız. Alıcı
kısımda da uygun şekilde birleştirirsiniz...
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 17 Haziran 2016, 23:38:37
Alıntı yapılan: mehmet - 17 Haziran 2016, 23:22:39
"uzaklik" değişkeni float anladığım kadarıyla; bu değişken
içeriğini hane hane parçalayıp ASCII olarak yollarsınız. Alıcı
kısımda da uygun şekilde birleştirirsiniz...
uzaklik degişkeni int olarak tanımlandı.
Hane hane nasıl parçalayacağım ?
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: mg1980 - 18 Haziran 2016, 09:54:18
Probleminizi tam anlamadım ama ben size çalışan bir kod vereyim belki işinize yarar:Bu kod ekleme işini bir türlü beceremedim.Kusura bakmayın.

#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);// 7=RS,6=E,5=D4,4=D5,3=D6,2=D7

int trigPin=8;
int echoPin=9;


void setup() {
  lcd.begin(16,2);
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
 

}

void loop() {
  int sure,mesafe;
  digitalWrite(trigPin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin,LOW);
  sure=pulseIn(echoPin,HIGH);
  mesafe=(sure/2)/29.1;
  if (mesafe>=200||mesafe<=0)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Menzil Disi");
  }
  else
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("MESAFE=");
    lcd.print(mesafe);
    lcd.print(" cm");
   
  }
  delay(1000);
}
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 18 Haziran 2016, 10:08:25
Sorun zaten ardino üzerindeki kodlarda değil.
Sorun C tarafından o kodları C ye çekmekte.
Bu konuda bilgisi olan yazarsa sevinirim
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: mg1980 - 18 Haziran 2016, 10:12:32
C ekranı nedir bilmiyorum doğrusu.Ben LCD'ye yazdırıyorum. C ekranına yazdırınca ne olacak?
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 18 Haziran 2016, 11:18:43
Sonuçları DevC de yazdığın kodlarla DevC nim siyah ekranında görüyorsun.  Seri haberleşmeyi kullanarak. 
Benim yapmak istediğim sonuçları arduinodan seri port üzerinden devc ye aktarmak
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 18 Haziran 2016, 20:30:24
Hâla bir umutla GÜNCEL  :)
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: Klein - 18 Haziran 2016, 21:28:10
Mesafe değişkenine sabit değerler ver. Eğer saçma değerler görmüyorsan, printf(...) kısmında sorun yoktur. Zaten orada sorun olduğunu da zannetmem.
O zaman sorun ya readfile() fonksiyonunda, ya da readfile ile okuduğun veri sürekli değişiyor.
Bu durumda öncelikle  arduino tarafından gelen verileri  bir terminal programı ile izlemeni öneririm. eğer terminalde gördüğün veri stabil ise, o zaman readfile fonksionuna yönelebilirsin.
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 18 Haziran 2016, 21:35:02
peki read file yerine önerebileceğiniz bir yapı var mı ?
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: Klein - 18 Haziran 2016, 21:45:35
Readfile yerine başka bir önerim yok.  Aslında readfile() fonksiyonunu kullanmayalı uzun zaman oldu.  Parametrelerini tam hatırlayamadım.
Tampon uzunluğu için 1 vermişsiniz. Hatırladığım kadarıyla o parametre byte cinsinden uzunluk. siz veriyi word olarak gönderdiğinizi söylemiştiniz.
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 18 Haziran 2016, 21:52:53
Alıntı yapılan: Klein - 18 Haziran 2016, 21:45:35
Readfile yerine başka bir önerim yok.  Aslında readfile() fonksiyonunu kullanmayalı uzun zaman oldu.  Parametrelerini tam hatırlayamadım.
Tampon uzunluğu için 1 vermişsiniz. Hatırladığım kadarıyla o parametre byte cinsinden uzunluk. siz veriyi word olarak gönderdiğinizi söylemiştiniz.

veri int değişkenine bağlı uzaklik ile gönderiliyor. byte değeri göndermediğim için böyle bir sonuç vermiş olabilir mi ?

status = ReadFile(hComm, &test, 1, &transmitCheck, NULL); böyle bir kullanımı var internetten araştırdığım kadarıyla
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: Klein - 19 Haziran 2016, 12:28:15
Muhtemelen öyle.
ReadFile(hComm, &test, 1, &transmitCheck, NULL);
Buradaki 1  tampon uzunluğu.
Eğer seri porttan gelen değer 2 byte ise   1 olan parametreyi 2 yapman gerek. 
Göndericin veriyi Little Endian mı Big Endian mı göndriyor?  PC tarafı nasıl alıyor? Gönderdiğin veri kaç byte?
Bunları bilmeden soruna kesin cevap vermek zor.
Uzunluk parametresini 1,2 ve 4 olarak değiştirip br dene.
Ama deneme yanılmadan daha da iyisi seri portu dinleyen bir analiz programı ile gelen veriyi görmek. Gelen verinin ne olduğu bilinirse, alma kısmı daha rahat çözülür.
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 19 Haziran 2016, 13:47:36
Alıntı yapılan: Klein - 19 Haziran 2016, 12:28:15
Muhtemelen öyle.
ReadFile(hComm, &test, 1, &transmitCheck, NULL);
Buradaki 1  tampon uzunluğu.
Eğer seri porttan gelen değer 2 byte ise   1 olan parametreyi 2 yapman gerek. 
Göndericin veriyi Little Endian mı Big Endian mı göndriyor?  PC tarafı nasıl alıyor? Gönderdiğin veri kaç byte?
Bunları bilmeden soruna kesin cevap vermek zor.
Uzunluk parametresini 1,2 ve 4 olarak değiştirip br dene.
Ama deneme yanılmadan daha da iyisi seri portu dinleyen bir analiz programı ile gelen veriyi görmek. Gelen verinin ne olduğu bilinirse, alma kısmı daha rahat çözülür.

Analiz programı ile portu dinlediğimde gelen sayı sadece "54 55 5" gibi rastgel seri portu c den dinlediğimde gelen rakamlar 42 43 50 bu arada hep
1 olan parametreyi 2 yaptığımda gönderdiğim komutlar gitmedi.
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: Klein - 19 Haziran 2016, 14:00:27
0'dan bir şey çıkarmak zor.  Öncelikle Arduino tarafından daha anlamlı bir veri gelmesini sağlamalısın. Arduino tarafında mesafe değerine sabit değer ver ve analiz programında o değeri gör. Ondan sonra C tarafıına devam edersin.
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: robikod - 19 Haziran 2016, 14:15:55
Alıntı yapılan: Klein - 19 Haziran 2016, 14:00:27
0'dan bir şey çıkarmak zor.  Öncelikle Arduino tarafından daha anlamlı bir veri gelmesini sağlamalısın. Arduino tarafında mesafe değerine sabit değer ver ve analiz programında o değeri gör. Ondan sonra C tarafıına devam edersin.
Sensörü değiştirdim belki sensörde bir hata vardır diye.
Bu kez verdiği değerler rastgele oldu 40-50 arasında herhangi bir değer veriyor.
Arduinonun seri port ekranından da aldığım değerler, aynı şekilde.
Başlık: Ynt: Mesafe Sensörü verisini aktarma
Gönderen: Klein - 19 Haziran 2016, 15:20:21
Eğer hem arduino'da hem de kendi programında aynı değerleri görüyorsan, haberleşmen tamam. Sensörden aldığın değer dalgalanıyor demekki.
40-50  arası dalgalanmanın mesafe olarak karşılığı nedir bilmiyorum. Ama bu dalgalanmanın çok yüksek olduğunu düşünüyorsan,  donanımını kontrol etmelisin. Beslemen çok dalgalanıyor olabilir, sensör dış etkilerden fazlasıyla etkileniyor olabilir, analog ölçüm alıyorsan referansın dalgalanıyor olabilir.