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 ?
Ödevimi teslim etmem gerekiyor bu konuda yardımcı olacak var mı ?
"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...
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 ?
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);
}
Sorun zaten ardino üzerindeki kodlarda değil.
Sorun C tarafından o kodları C ye çekmekte.
Bu konuda bilgisi olan yazarsa sevinirim
C ekranı nedir bilmiyorum doğrusu.Ben LCD'ye yazdırıyorum. C ekranına yazdırınca ne olacak?
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
Hâla bir umutla GÜNCEL :)
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.
peki read file yerine önerebileceğiniz bir yapı var mı ?
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.
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
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.
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.
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.
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.
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.