ReadASCIIString

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 veya nokta gibi diğer karakterler de çalışır. Değerler tamsayılara ayrıştırılır ve bir RGB LED'in rengini belirlemek için kullanılır. Arduino Software (IDE) seri monitörünü ışık rengini değiştirmek için panoya "5,220,70" gibi dizeler göndermek için kullanacaksınız.

Gerekli Donanım

  • Arduino veya Genuino Kurulu
  • ortak anot RGB LED
  • 3220 ohm direnç
  • bağlantı telleri
  • breadboard

Devre

Şematik

büyütmek için resme tıklayın

Yukarıdaki devreyi yapmak için dört kabloya ihtiyacınız olacak. Bir kablo, 5V'u kartın POWER konektöründen RGB LED'in en uzun pimine bağlar. LED'i en uzun pim soldan ikinci olacak şekilde çevirmelisiniz.

RGB LED'i üstten en uzun pim olacak şekilde breadboard'unuza yerleştirin. Pimleri doğrulamak için özel LED'iniz için veri sayfasında kontrol edin, ancak bunlar R, V +, G ve B olmalıdır. 5V'den gelen kablo, yukarıdaki bağlantı şemasında olduğu gibi, bu ikinci pimi üstten bağlamalıdır.

Kalan kablolarınızla, kırmızı katotunuzu pim 3'e, yeşil katodu pim 5'e ve mavi katodu pim 6'ya dirençlerle seri bağlayın.

Ortak anotlu RGB LED'ler ortak bir güç pinini paylaşır. LED'i aydınlatmak için bir pimi YÜKSEK döndürmek yerine, diyotta bir voltaj farkı oluşturmak için pimi DÜŞÜK döndürmeniz gerekir. Yani analogWrite () ile 255 göndermek LED'i kapatırken, 0 değeri tam parlaklıkta açar. Aşağıdaki kodda, çizim tarafında biraz matematik kullanacaksınız, böylece beklenen parlaklığa karşılık gelen değerler gönderebilirsiniz. Esasen, analogWrite (pin, parlaklık) yerine analogWrite (pin, 255 parlaklık) diyeceksiniz.

Kod

Önce LED'inizin bağlanacağı pimler için bazı global değişkenler ayarlayacaksı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;

Kurulumunuzda (), kart ile bilgisayarınız arasında hat ile saniyede 9600 bit veri iletişimine başlayın:

Serial.begin(9600);

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

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

Döngüde (), seri arabelleğinde veri olup olmadığını kontrol edin. Bunu bir while () ifadesi yaparak, okunmayı bekleyen bilgiler olduğu sürece çalışır:

while (Serial.available() > 0) {

Ardından, seri bilgilerinin depolanması için bazı yerel değişkenler bildirin. Bu, LED'lerin parlaklığı olacaktır. 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, yeni satır karakterinin devam edip etmediğini 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 aralığın dışındaysa, geçerli bir sayı ile sınırlı olacaktır. Bu değeri 255'ten çıkararak, ortak bir anot LED'i ile kullanılacak değeri biçimlendireceksiniz. Yukarıda açıklandığı gibi, anot ile panoya bağlı pim arasında bir voltaj farkı olduğunda bu LED'ler yanacaktır:

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

Şimdi PWM değerlerini formatladığınıza göre, LED'in rengini değiştirmek için analogWrite () kullanın. Yukarıdaki adımda değerinizi 255'ten çıkardığınız için:

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

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

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

Son olarak, köşeli parantezlerinizi if ifadesinden, while ifadesinden ve ana döngüden kapatın:

} } }

Kartı programladıktan sonra, Arduino Software (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ında aşağıdaki biçimde değerler girin: Kırmızı, Yeşil, Mavi. Değerleri panoya gönderdikten sonra, bağlı LED belirttiğiniz renge dönüşecek ve seri monitördeki HEX değerlerini geri alacaksınız.

/*
  Reading a serial ASCII-encoded string.

  This sketch demonstrates the Serial parseInt() function.
  It looks for an ASCII string of comma-separated values.
  It parses them into ints, and uses those to fade an RGB LED.

  Circuit: Common-Cathode RGB LED wired like so:
  - red anode: digital pin 3
  - green anode: digital pin 5
  - blue anode: digital pin 6
  - cathode: GND

  created 13 Apr 2012
  by Tom Igoe
  modified 14 Mar 2016
  by Arturo Guadalupi

  This example code is in the public domain.
*/


// pins for the LEDs:
const int redPin = 3;
const int greenPin = 5;
const int bluePin = 6;

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // make the pins outputs:
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

}

void loop() {
  // if there's any serial available, read it:
  while (Serial.available() > 0) {

    // look for the next valid integer in the incoming serial stream:
    int red = Serial.parseInt();
    // do it again:
    int green = Serial.parseInt();
    // do it again:
    int blue = Serial.parseInt();

    // look for the newline. That's the end of your sentence:
    if (Serial.read() == '\n') {
      // constrain the values to 0 - 255 and invert
      // if you're using a common-cathode LED, just use "constrain(color, 0, 255);"
      red = 255 - constrain(red, 0, 255);
      green = 255 - constrain(green, 0, 255);
      blue = 255 - constrain(blue, 0, 255);

      // fade the red, green, and blue legs of the LED:
      analogWrite(redPin, red);
      analogWrite(greenPin, green);
      analogWrite(bluePin, blue);

      // print the three numbers in one string as hexadecimal:
      Serial.print(red, HEX);
      Serial.print(green, HEX);
      Serial.println(blue, HEX);
    }
  }
}
[Kodu Al]

See Also

  • if()
  • while()
  • Serial

  • ASCIITable- Arduino'nun gelişmiş seri çıkış fonksiyonlarını gösterir.
  • Dimmer- Bir LED'in parlaklığını değiştirmek için fareyi hareket ettirin.
  • Graph- Verileri bilgisayara gönderin ve İşlemde grafiğini çizin.
  • Midi- Seri olarak MIDI not mesajları gönderin.
  • MultiSerialMega- Arduino ve Genuino Mega'da bulunan iki seri bağlantı noktasını kullanın.
  • PhysicalPixel- İşleme veya Maks / MSP'den kartınıza veri göndererek bir LED'i açın ve kapatın.
  • SerialCallResponse- Bir çağrı ve yanıt (el sıkışma) yöntemi kullanarak birden çok değişken gönderin.
  • SerialCallResponseASCII- Bir çağrı ve yanıt (el sıkışma) yöntemi kullanarak birden çok değişken gönderin ve göndermeden önce değerleri ASCII kodlayın.
  • SerialEvent- SerialEvent () kullanımını gösterir.
  • VirtualColorMixer- Arduino'dan bilgisayarınıza birden çok değişken gönderin ve bunları İşleme veya Maks / MSP'de okuyun.