Site icon elektromanyetix

Arduino ASCII String Okuma Uygulaması

ASCII String Okuma

Arduino ASCII String Okuma

ASCII String Okuma. Bu çizim, alfasayısal olmayan bir karakterle ayrılmış değerleri bulmak için Serial.parseInt () işlevini kullanır. Çoğu zaman insanlar farklı bilgi parçalarını belirtmek için virgül kullanırlar (bu biçim genellikle virgülle ayrılmış değerler veya CSV olarak adlandırılır), ancak boşluk ya da dönem gibi diğer karakterler de işe yarayacaktır. Değerler tam sayılara ayrıştırılır ve bir RGB LED’inin rengini belirlemek için kullanılır. Işık rengini değiştirmek için tahtaya “5,220,70” gibi dizeleri göndermek için Arduino Yazılımı (IDE) seri monitörünü kullanacaksınız.

Donanım

  • Arduino veya Genuino
  • ortak anot RGB LED
  • 3 220 ohm direnç
  • Bağlantı Telleri
  • breadboard

Devre

Yukarıdaki devreyi yapmak için dört kabloya ihtiyacınız olacak. Bir kablo, 5V’yi kartın POWER konektöründen RGB LED’inin en uzun pime bağlar. LED’i en uzun iğnenin soldan ikinci olacak şekilde döndürmeniz gerekir.

RGB LED’i breadboard’unuza, en üstten ikinci olan en uzun pimle yerleştirin. Pimleri doğrulamak için belirli bir LED’in veri sayfasını kontrol edin, ancak R, V +, G ve B olmalıdır. Bu nedenle, 5V’den gelen kablo, yukarıdaki bağlantı şemasında olduğu gibi, bu ikinci pimi üst taraftan bağlamalıdır.

Kalan kablolarınız ile kırmızı katotunuzu pim 3’e, yeşil katotu pin 5’e, mavi katotu da rezistanslarla seri halde pin 6’ya bağlayın.

Ortak anotlu RGB LED’leri ortak bir güç pinini paylaşır. LED’i aydınlatmak için bir HIGH (YÜKSEK) pimi döndürmek yerine, diyot boyunca bir voltaj farkı yaratmak için pin LOW (DÜŞÜK) düğmesini döndürmeniz gerekir. Bu yüzden analogWrite () ile 255 göndermek LED’i kapatır, 0 değeri ise tam parlaklıkta yanar. Aşağıdaki kodda, çizim tarafında biraz matematik kullanacaksınız, böylece beklenen parlaklığa karşılık gelen değerleri gönderebilirsiniz. Esas olarak, analogWrite (pin, parlaklık) kullanmak yerine, analogWrite (pin, 255-brightness) çağıracaksınız.

ASCII String Okuma Kod

LED’inizin bağlanacağı pimler için ilk önce bazı global değişkenler kurarsınız. Bu, programınızın ana bölümünde hangisinin kırmızı, yeşil ve mavi olduğunu ayırt etmeyi kolaylaştıracaktır:

 const int redPin = 3;
 const int greenPin = 5;
 const int bluePin = 6;

Setup (); kısmında kart ile bilgisayar arasında saniyede 9600 bit veri ile seri iletişime geçin:

 Serial.begin (9600);

Ayrıca kurulumda, pimleri çıkışlar olarak yapılandırmak istersiniz:

 pinMode (redPin, OUTPUT);
 pinMode (greenPin, OUTPUT);
 pinMode (bluePin, OUTPUT);

loop (); kısmında seri tamponda herhangi bir veri olup olmadığını kontrol edin. Bunu bir while () ifadesiyle okumak, okunmayı bekleyen bilgi olduğu sürece çalışacaktır:

while (Serial.available ()> 0) {

Ardından, seri bilgileri saklamak için bazı yerel değişkenleri bildirin. Bu LED’lerin parlaklığı olacak. Verileri virgülle ayırmak için Serial.parseInt () öğesini kullanarak, bilgileri değişkenlerinize okuyun:

 int red = Serial.parseInt ();
 int green = Serial.parseInt ();
 int blue = Serial.parseInt ();

Verileri değişkenlerinize okuduktan sonra, devam etmek için satırsonu karakterini kontrol edin:

  if (Serial.read () == '\ n') {

constrain() kullanarak, değerleri PWM kontrolü için kabul edilebilir bir aralıkta tutabilirsiniz. Bu şekilde, değer PWM’nin gönderebileceği alanın dışındaysa, geçerli bir sayıyla sınırlı olacaktır. Bu değeri 255’ten çıkararak, ortak bir anot LED’i ile kullanılacak değeri formatlayacaksınız. Yukarıda açıklandığı gibi, anot ve tahtaya bağlı pin arasında bir voltaj farkı olduğunda, bu LED’ler yanar.

red = 255 - constrain(red, 0, 255);
green = 255 - constrain(green, 0, 255);
blue = 255 - constrain(blue, 0, 255);

Artık PWM için değerleri biçimlendirdiğinize göre, LED’in rengini değiştirmek için analogWrite () öğesini kullanın. Çünkü değerini yukarıdaki adımda 255’ten çıkardınız:

analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);

Her bir LED’in değerini bir dizgede seri monitöre geri HEX değerleri olarak gönderin:

Serial.print(red, HEX);
Serial.print(green, HEX);
Serial.println(blue, HEX);

Son olarak, parantezleri if deyiminden, deyimden ve ana döngüden kapatın:

     }
   }
 }

Kartı programladıktan sonra Arduino Yazılım (IDE) seri monitörünüzü açın. Mesaj gönderirken yeni satır karakteri göndermeyi seçtiğinizden emin olun. Işıklar için 0-255 arasındaki değerleri aşağıdaki biçimde girin: Kırmızı, Yeşil, Mavi. Değerleri panoya gönderdikten sonra, ekteki LED belirlediğiniz renge dönecek ve seri monitörde HEX değerlerini geri alacaksınız.

Kodun tamamı:

/*
Seri ASCII kodlu dizeyi okuma.

Bu çizim Seri parseInt () işlevini gösterir.
Bir ASCII virgülle ayrılmış değerler dizesi arar.
Onları ints olarak ayrıştırır ve bir RGB LED'ini soldurmak için kullanır.

Devre: Ortak Katot RGB LED'i şöyle kabloladı:
- kırmızı anot: dijital pim 3
- yeşil anot: dijital pim 5
- mavi anot: dijital pim 6
- katot: GND

oluşturuldu 13 Nis 2012
Tom Igoe tarafından
değiştirilme tarihi 14 Mar 2016
Arturo Guadalupi tarafından

Bu örnek kod kamu malıdır.
*/

LED'ler için // pimler:
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;

void setup() {
  // seriyi başlat:
  Serial.begin(9600);
  // pimleri çıktılar:
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

}

void loop() {
  // Mevcut herhangi bir seri iletişim varsa, okuyun:
  while (Serial.available() > 0) {

    // gelen seri akışta bir sonraki geçerli tamsayıya bakın:
    int red = Serial.parseInt();
    // Tekrar yap:
    int green = Serial.parseInt();
    // Tekrar yap:
    int blue = Serial.parseInt();

    // yeni satırı arayın. Bu, cümlenizin sonu:
    if (Serial.read() == '\n') {
      // değerleri 0 - 255 ile sınırlandır ve tersine çevir
      // Ortak katot LED'i kullanıyorsanız, sadece "kısıtlama (renk, 0, 255)" kullanın;
      red = 255 - constrain(red, 0, 255);
      green = 255 - constrain(green, 0, 255);
      blue = 255 - constrain(blue, 0, 255);

      // LED'in kırmızı, yeşil ve mavi ayaklarını karartır:
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);

      // üç sayıyı bir dizede onaltılık olarak yazdırın:
      Serial.print(red, HEX);
      Serial.print(green, HEX);
      Serial.println(blue, HEX);
    }
  }
}

Kaynak:arduino.cc

Exit mobile version