Seri ekrandan girilen komut ile led kontrolü

  • Konbuyu başlatan aylin142
  • Başlangıç tarihi
Konu Sah
aylin142

aylin142

Üye
Katılım
6 Mar 2014
Mesajlar
30
Puanları
1
Amacından ziyade seri bilgi nasıl gönderilip
alınıyor inceleyin. Amacı açıklamada yazıyor.
Anlamadım maalesef.Sayı girerek kontrol edebiliyorum. String olmuyor.gireceğim kelimeyi harf harf dizi olarak mı tanımlamalıyım? Öyleyse char da kullanabilirim, string kullanmanın bir anlamı yok.
Benim anlamadığım tinkercad te çalışıpta arduino programında çalışmaması.Aynı kodu yazdım ve bağlantılar aynı.
 

mehmet.bey

Profesyonel Üye
Katılım
19 Ara 2011
Mesajlar
1,527
Puanları
281
Konum
Galaksi Dışı
Burada kullanılan haberleşme türü,
asenkron seri iletişimdir. Bir şekilde senkron
hale getirmelisiniz. Simülasyonlarda normal
olarak senkron çıkar, zira her iki cihaz da aynı
anda başlar.

Senkron olabilmesi için bir karakter grubu
başlık olmalı. Alıcı bu karakter grubunu
yakaladıktan sonra değerleri işlemeli.

başlık+veri
başlık+veri+veri_uzunluğu+crc
gibi olabilir.

Bu iletişimde her şeyin 8-bit olması gerektiğini
unutmayın.
 

FakirMaker

Katılımcı Üye
Katılım
5 May 2009
Mesajlar
569
Puanları
56
Aşağıdaki kod işini görecektir. Eğer daha fazla komut ve farklı fonksiyonlar kullanacaksan dizi veya struct yapısı içinde toprlamanı tavsiye ederim yoksa hafızayı ciddi tüketecektir. Kardeş foruma açacağın sorularda benim ismimi etiketlersen cevap verme hızım daha iyi olacaktır.

C++:
String komut;
void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("----KOMUT GİRİN-----");
}
void loop() {
  if(Serial.available()){
    komut = Serial.readStringUntil('\n');
    if(komut ==  "led yansin"){
      digitalWrite(13,HIGH);
      Serial.println("Led yandı");
    }
    else if(komut ==  "led sonsun"){
      digitalWrite(13,LOW);
      Serial.println("Led söndü");
    }
    else
      Serial.println("komut anlaşılmadı");  
  }
}
 
Konu Sah
aylin142

aylin142

Üye
Katılım
6 Mar 2014
Mesajlar
30
Puanları
1
Aşağıdaki kod işini görecektir. Eğer daha fazla komut ve farklı fonksiyonlar kullanacaksan dizi veya struct yapısı içinde toprlamanı tavsiye ederim yoksa hafızayı ciddi tüketecektir. Kardeş foruma açacağın sorularda benim ismimi etiketlersen cevap verme hızım daha iyi olacaktır.

C++:
String komut;
void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("----KOMUT GİRİN-----");
}
void loop() {
  if(Serial.available()){
    komut = Serial.readStringUntil('\n');
    if(komut ==  "led yansin"){
      digitalWrite(13,HIGH);
      Serial.println("Led yandı");
    }
    else if(komut ==  "led sonsun"){
      digitalWrite(13,LOW);
      Serial.println("Led söndü");
    }
    else
      Serial.println("komut anlaşılmadı"); 
  }
}
Çok teşekkür ederim.Bu kodlar çalıştı.Diğer kodlardan farkı " Serial.readStringUntil('\n');" bu komuttu.Diğerlerinde çalışmama nedeni sizce bu mudur?
 

FakirMaker

Katılımcı Üye
Katılım
5 May 2009
Mesajlar
569
Puanları
56
Evet budur. Nerede duracağını söylemezsen alet timout olana kadar okumaya devam eder. Bu komut satır başı karakterine kadar okuyor. Seri porttan komut almak istiyorsan atmega çiplerinin seri port kesmesi vardır, normal çalışan programa etki etmeden komut alabilirsin. Arduino örneklerin içinde serialEvent var onu kullanmanı tavsiye ederim.
 

Benzer Konular

Forum istatistikleri

Konular
117,800
Mesajlar
830,331
Kullanıcılar
428,690
Son üye
İbrahim Aldemir

Yeni konular

Üst