Arduino Tek Kablo Üzerinden Haberleşme

Başlatan veliusta, 30 Ocak 2015, 03:01:59

veliusta

Fiberoptik ile yaptım Veri gönderiyor.

Sadece 'V' harfini kullanınca sorun yok ama 4 Harf göndermeli yapamadım.

Kabil ATICI

#16
gören de C de ilk defa program yazdığınızı sanır.
Yaptığın kurduğun mantıkta sıkıntı var. diyorsun V geldi ise E geldi ise  vs... vs...
Programın işleme hızı veri gelme hızından daha yüksektir. Ya while ile yapacaksın , ama o zaman yanlış veri gelirse kilitlenir. Yada bayrak kullanacaksın.

örneğin
int bayrak = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  //ön ayarlar

}

void loop() {
  byte gelen_deger;
  // put your main code here, to run repeatedly:
  while (Serial.available() > 0) {
    gelen_deger = Serial.read();
    if (gelen_deger == 'V') {
      bayrak = 1;
    }
    if (gelen_deger == 'E' && bayrak == 1) {
      bayrak = 2;
    }
    if (gelen_deger == 'L' && bayrak == 2) {
      bayrak = 3;
    }
    if (gelen_deger == 'I' && bayrak == 3) {
      bayrak = 0;
      //burada ne yapacaksan
    }
  }

}
ambar7

muhendisbey

Programınız hatalı. Tek göndermek ve okumak yerine toplu şekilde "veli" gönderin "veli" olarak okuyun.
Arduino'daki find until komutunu kullan. Böylece daha mantıklı okuma yaparsın. Cümlende "veli" kelimesi geçtiği anda sistem tetiklenir.
Yani cümle "asdasdasdveliasdasd" olsun. Buradan "veli" yi doğrudan bulur.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

veliusta

Olmadı.

#include <SoftwareSerial.h>
SoftwareSerial Haberlesme(11, 10); // RX, TX
int bayrak = 0;
char gelen_deger;

void setup(){
  Haberlesme.begin(9600);
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
}

void loop(){
  while (Haberlesme.available() > 0) {
    gelen_deger = Haberlesme.read();
    if (gelen_deger == 'V') {
      bayrak = 1;
    }
    if (gelen_deger == 'E' && bayrak == 1){
      bayrak = 2;
    }
    if (gelen_deger == 'L' && bayrak == 2){
      bayrak = 3;
    }
    if (gelen_deger == 'I' && bayrak == 3){
      bayrak = 0;
      digitalWrite(13, HIGH);
     }
    }
  }


Kabloluda yaptım olmuyor.Kablo bağlı programlamasını yapıyorum. LED yanmıyor. İletişim kablosunu takıp çıkarıp takıp çıkarıktan sonra rayına otuyor.
Ben daha önce CCS de yapmıştım. Bide orada deneyim.

muhendisbey

if (Serial.available()) {

while(Serial.findUntil("veli", "\r\n")){
while(Serial.available() == 0) ;
digitalWrite(13, HIGH);
}

yukarıdaki kodu dene.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

veliusta



CSS de aynı sorun. Buton'a 1 veya 2 kez basmak gerekiyor iletişim sağlanması için.

@muhendisbey hocam şimdi senin dediğini bi deneyim.
Olmaz ise IR Haberleşme kütüphanesi ile yapacağım  o da olmaz ise Mors halfebesi ile haberleşeceğim artık :)

baran123

Seri haberleşme kullanmışsın ama a0,a1 yapmışsın hata yok mu orada ?

Kabil ATICI

Verici bölümünde karakter göndermeler arasına 5-10ms bir gecikme ekleyip deneme imkanın var mı?
ambar7

veliusta



Oldu hocam Teşekkürler. Fiberoptik ile denedim. Sorunsuz çalışıyor. Yaptığım mantık doğrumudur?
Sağolun.

Kabil ATICI

ambar7

muhendisbey

Yaptığın mantık hatalı. Kodlardan veli'yi okumak için bu kadar işlem yapmana gerek yok.

Serial.println("VELI") veya Serial.print("VELI\r\n") ile gönderme yapabilirsin.

Alırken de daha önceki mesajımda dediğim gibi find.until komutuyla doğrudan "VELI" diye okursun.
kodunda fazladan bayrak değişkeni var
AND işlemi var
Bekleme işlemi var. Daha ne olsun.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.