Seri ekrandan girilen komut ile led kontrolü

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ı.
 
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.
 
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ı");  
  }
}
 
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?
 
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.
 

Forum istatistikleri

Konular
129,864
Mesajlar
930,851
Kullanıcılar
452,726
Son üye
ugur Göktürk

Yeni konular

Çevrimiçi üyeler

Geri
Üst