Arduino'da bir RGB LED'in bir düğmeden düzgün şekilde açılması. Potansiyometre kullanarak LED parlaklık kontrolü. Arduino için programın açıklaması

Bu deneyde bir tuşla LED'e parlaklığın bir kısmını ekleyip diğer tuşla azaltıyoruz.

DENEY İÇİN PARÇA LİSTESİ

- 1 Arduino Uno kartı;

- 1 lehimsiz devre tahtası;

- 2 saat düğmesi;

- 220 Ohm nominal değere sahip 1 direnç;

- 1 LED;

- 7 adet erkek-erkek kablo.

DEVRE ŞEMASI

EKMEK TAHTA ÜZERİNDEKİ ŞEMA

NOT

  • Devreyi önceki deneyde yeniden çalıştırıyorsanız, bu sefer LED'i PWM'yi destekleyen bir bağlantı noktasına bağlamamız gerektiğini unutmayın.

Kroki

Arduino IDE için taslağı indir
#define PLUS_BUTTON_PIN 2 #define MINUS_BUTTON_PIN 3 #define LED_PIN 9 int parlaklık = 100; boolean plusUp = doğru; boole eksiYukarı = doğru; void setup() ( pinMode(LED_PIN, OUTPUT); pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP); pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP); ) void loop() ( analogWrite(LED_PIN, parlaklık); // plusUp yazdığımız fonksiyonu kullanarak tıklamalara yanıt verin = tanıtıcıClick(PLUS_BUTTON_PIN, plusUp, +35); minusUp = tanıtıcıClick(MINUS_BUTTON_PIN, minusUp, -35); ) // 3 parametreli kendi işlevi: düğmenin pin numarası // (buttonPin), doğrulamadan önceki durum (wasUp) ) ve düğmeye tıkladığınızda parlaklık derecesi // (delta). İşlev, // (İngilizce dönüş) düğmesinin yeni, geçerli durumuna geri döner boolean tanıtıcıClick(int düğmePin, boolean wasUp, int delta) ( boolean isUp = digitalRead(buttonPin); if (wasUp && !isUp) ( gecikme(10 ); isUp = digitalRead(buttonPin); // bir tıklama varsa, parlaklığı 0'dan 255'e değiştirin if (!isUp) parlaklık = constrain(parlaklık + delta, 0, 255); ) isUp değerini döndür; // değeri döndür değeri arayan koduna geri döner)

KOD AÇIKLAMALARI

  • Yalnızca yerleşik işlevleri kullanmakla kalmaz, aynı zamanda kendimizinkini de oluşturabiliriz. Aynı eylemleri kodun farklı yerlerinde tekrarlamamız gerektiğinde veya örneğin aynı eylemleri farklı veriler üzerinde gerçekleştirmemiz gerektiğinde, bu durumda olduğu gibi, bu haklı çıkar: dijital bağlantı noktaları 2 ve 3'ten gelen sinyali işleyin.
  • Kendi işlevlerinizi, diğer işlevlerin kodunun dışında, kodun herhangi bir yerinde tanımlayabilirsiniz. Örneğimizde, sonra bir fonksiyon tanımladık. döngü .
  • Kendi fonksiyonumuzu tanımlamak için ihtiyacımız var:
    • Hangi veri türünü döndüreceğini bildirin. Bizim durumumuzda öyle boolean. İşlev yalnızca bazı eylemleri gerçekleştiriyorsa ve herhangi bir değer döndürmüyorsa anahtar sözcüğünü kullanın. geçersiz
    • İşleve bir ad - tanımlayıcı atayın. Değişkenleri ve sabitleri adlandırırken uygulanan kuralların aynısı burada da geçerlidir. İşlevler aynı tarzda adlandırılır BeğenDeğişkenler .
    • Parantez içinde, işleve iletilen parametreleri her birinin türünü belirterek listeleyin. Bu, yeni oluşturulan fonksiyon içinde ve yalnızca onun içinde görülebilen değişkenlerin bildirimidir. Örneğin, bu deneyde erişmeye çalışırsak iyiydi veya Yukarı itibaren döngü() Derleyiciden bir hata mesajı alacağız. Benzer şekilde, belirtilen değişkenler döngü, diğer işlevler tarafından görülmez ancak değerleri parametre olarak aktarılabilir.
    • Bir çift süslü parantez arasına, fonksiyonun çalıştırdığı kodu yazın
    • Eğer fonksiyonun bir değer döndürmesi gerekiyorsa anahtar kelimeyi kullanın. geri dönmek hangi değerin döndürüleceğini belirtin. Bu değer bildirdiğimiz türde olmalıdır
  • Sözde küresel değişkenler, yani. Herhangi bir fonksiyondan erişilebilen değişkenler genellikle programın başında bildirilir. Bizim durumumuzda bu parlaklık .
  • Oluşturduğumuz fonksiyonun içinde tanıtıcıTıklayın Deneydekinin aynısı oluyor.
  • 35'lik bir parlaklık artırma adımıyla, düğmelerden birine art arda en fazla sekiz tıklama yapıldıktan sonra ifadenin değeri parlaklık + delta aralığın dışına çıkacak . Fonksiyonun kullanılması kısıtlamak değişken için izin verilen değerleri sınırlandırıyoruz parlaklık belirtilen aralık sınırları.
  • İfadede plusUp = tanıtıcıClick(PLUS_BUTTON_ TOPLU İĞNE , artıYukarı, +35) değişkene erişiyoruz artıUp iki kere. Çünkü = sağ işlenenin değerini sol işlenene koyar, önce neyin geri döneceğini hesaplar tanıtıcıTıklayın. Yani ona verdiğimizde artıUp parametre olarak hala son çağrı sırasında hesaplanan eski değere sahiptir tanıtıcıTıklayın .
  • İçeri tanıtıcıTıklayın yeni LED parlaklık değerini hesaplıyoruz ve bunu global bir değişkene yazıyoruz parlaklık, her yinelemede döngü az önce geçtim analogYaz .

KENDİNİZİ TEST EDECEĞİNİZ SORULAR

  1. Anahtar kelime ne anlama geliyor? geçersiz ?
  2. Atama operatörünün farklı taraflarından bir değişkenden bahsedildiğinde program nasıl davranır? = ?

BAĞIMSIZ ÇÖZÜM İÇİN GÖREVLER

  1. Parlaklık değiştirme adımı tek bir yerde ayarlanacak şekilde kodu değiştirin.
  2. Başka bir işlev oluşturun ve kodu, bir işlevin tuş vuruşlarını izlemekten, diğerinin ise LED'in parlaklığını hesaplamaktan ve onu geri döndürmekten sorumlu olacak şekilde yeniden çalışın. analogYaz .

Şimdi sıklıkla kısaltma olarak adlandırılan çok renkli LED'e bakalım: RGB LED'i. RGB, şu anlama gelen bir kısaltmadır: Kırmızı - kırmızı, Yeşil - yeşil, Mavi - mavi. Yani bu cihazın içine üç ayrı LED yerleştirilmiş. Türüne bağlı olarak, bir RGB LED'in ortak bir katodu veya ortak bir anodu olabilir.

1. Renkleri karıştırmak

Bir RGB LED neden üç geleneksel LED'den daha iyidir? Her şey, görüşümüzün birbirine yakın yerleştirilmiş farklı kaynaklardan gelen ışığı karıştırma yeteneğiyle ilgilidir. Örneğin, mavi ve kırmızı LED'leri yan yana yerleştirirsek, birkaç metrelik bir mesafede parlaklıkları birleşecek ve göz, mor bir nokta görecektir. Ve yeşili de eklersek nokta bize beyaz görünecektir. Bilgisayar monitörleri, televizyonlar ve dış mekan ekranları tam olarak bu şekilde çalışır. TV matrisi farklı renkteki ayrı noktalardan oluşur. Bir büyüteç alıp açık olan monitöre bakarsanız bu noktaları kolaylıkla görebilirsiniz. Ancak dış mekan ekranında noktalar çok yoğun yerleştirilmediğinden çıplak gözle ayırt edilebiliyorlar. Ancak onlarca metrelik bir mesafeden bu noktalar ayırt edilemez. Çok renkli noktalar birbirine ne kadar yakın olursa, gözün bu renkleri karıştırmak için o kadar az mesafeye ihtiyacı olduğu ortaya çıktı. Sonuç olarak: Üç ayrı LED'in aksine, RGB LED'in renk karışımı zaten 30-70 cm mesafede farkediliyor, bu arada, mat lensli RGB LED daha da iyi performans gösteriyor.

2. RGB LED'i Arduino'ya bağlama

Çok renkli LED üç normal LED'den oluştuğu için bunları ayrı ayrı bağlayacağız. Her LED kendi pinine bağlanır ve kendine ait ayrı bir direnci vardır. Bu derste ortak katotlu bir RGB LED kullanıyoruz, dolayısıyla toprağa giden yalnızca bir kablo olacak. Şematik diyagram
Düzen görünümü

3. RGB LED'i kontrol etme programı

Hadi oluşturalım basit bir program, üç rengin her birini sırayla aydınlatacaktır. sabit bayt rPin = 3; sabit bayt gPin = 5; sabit bayt bPin = 6; void setup() ( pinMode(rPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(bPin, OUTPUT); ) void loop() ( // maviyi kapat, kırmızıyı aç digitalWrite(bPin, LOW); digitalWrite( rPin, HIGH); gecikme(500); // kırmızıyı kapat, yeşili aç digitalWrite(rPin, LOW); digitalWrite(gPin, HIGH); gecikme(500); // yeşili kapat, maviyi aç digitalWrite(gPin) , LOW); digitalWrite( bPin, HIGH); gecikme(500); ) Programı Arduino'ya yükleyin ve sonucu gözlemleyin. Senin tarayıcın değil video etiketini destekleyin. Programı biraz optimize edelim: rPin, gPin ve bPin değişkenleri yerine bir dizi kullanacağız. Bu bize sonraki görevlerimizde yardımcı olacaktır. const bayt rgbPins = (3,5,6); void setup() ( for(bayt i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); digitalWrite(rgbPins, LOW); digitalWrite(rgbPins, HIGH); delay(500); }

4. Gökkuşağının yedi rengi

Şimdi iki rengi aynı anda yakmayı deneyelim. Aşağıdaki renk dizisini programlayalım:
  • kırmızı
  • kırmızı + yeşil = sarı
  • yeşil
  • yeşil + mavi = açık mavi
  • mavi
  • mavi + kırmızı = mor
Basitlik adına turuncu rengi çıkardık. Böylece gökkuşağının altı rengi ortaya çıktı 🙂 const byte rgbPins = (3,5,6); sabit bayt gökkuşağı = ( (1,0,0), // kırmızı (1,1,0), // sarı (0,1,0), // yeşil (0,1,1), // mavi ( 0,0,1), // mavi (1,0,1), // mor); void setup() ( for(bayt i=0; i<3; i++) pinMode(rgbPins[i], OUTPUT); } void loop() { // перебираем все шесть цветов for(int i=0; i<6; i++){ // перебираем три компоненты каждого из шести цветов for(int k=0; k<3; k++){ digitalWrite(rgbPins[k], rainbow[i][k]); } delay(1000); } } В результате работы программы получается: Your browser does not support the video tag.

5. Pürüzsüz renk değişimi

RGB LED'i 3, 5 ve 6 numaralı pinlere bağlamamız boşuna değildi. Bildiğiniz gibi bu pinler farklı görev döngülerinde PWM sinyali oluşturmanıza olanak sağlıyor. Yani sadece LED'i açıp kapatmakla kalmıyoruz, üzerindeki voltaj seviyesini de kontrol edebiliyoruz. Bu fonksiyon kullanılarak yapılır analogYaz. LED'imizin gökkuşağının renkleri arasında aniden değil, yumuşak bir şekilde geçiş yapmasını sağlayalım. const bayt rgbPins = (3,5,6); int dim = 1; void setup() ( for(bayt i=0; i<3; i++){ pinMode(rgbPins[i], OUTPUT); } // начальное состояние - горит красный цвет analogWrite(rgbPins, 255); analogWrite(rgbPins, 0); analogWrite(rgbPins, 0); } void loop() { // гасим красный, параллельно разжигаем зеленый for(int i=255; i>=0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); gecikme(10); ) // yeşili kapat, paralel olarak maviyi aç for(int i=255) ; i> =0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); gecikme(10); ) // maviyi kapat, paralel olarak kırmızıyı aç for(int i=255 ; i>=0; i--)( analogWrite(rgbPins, i/dim); analogWrite(rgbPins, (255-i)/dim); gecikme(10); )) dim değişkeni şunu belirler: ışığın parlaklığı. Dim = 1'de maksimum parlaklığa sahibiz. Programı Arduino'ya yükleyin. Tarayıcınız video etiketini desteklemiyor.

Görevler

  1. Sıcaklık göstergesi. Devreye bir termistör ekleyelim ve onu analog girişe bağlayalım. LED, termistörün sıcaklığına bağlı olarak renk değiştirmelidir. Sıcaklık ne kadar düşük olursa renk o kadar mavi olur ve sıcaklık ne kadar yüksek olursa o kadar kırmızı olur.
  2. Regülatörlü RGB lamba. Devreye üç adet değişken direnç ekleyelim ve bunları analog girişlere bağlayalım. Program sürekli olarak direnç değerlerini okumalı ve karşılık gelen RGB LED bileşeninin rengini değiştirmelidir.

Bu örnekte, farklı dirençlere sahip dirençler kullanarak bir LED'in parlaklığını nasıl değiştireceğinizi öğreneceksiniz.

Bu örnek için ihtiyacınız olacak

1 LED 5mm çap

1 270 ohm direnç (kırmızı, mor, kahverengi)

1 470 ohm direnç (sarı, mor, kahverengi)

1 adet 2,2 kOhm direnç (kırmızı, kırmızı, kırmızı)

1 10 kOhm direnç (kahverengi, siyah, turuncu)

LED'ler - genel bilgiler

LED'ler, çeşitli gösterge türleri için cihazlarda iyi hizmet eder. Az elektrik tüketirler ve dayanıklıdırlar.

Bu örnekte en yaygın olarak kullanılan 5 mm çapındaki LED'leri kullanıyoruz. Ayrıca 3 milimetre çapında LED'ler ve 10 mm çapında büyük LED'ler de yaygındır.

LED'in doğrudan aküye veya voltaj kaynağına bağlanması önerilmez. Öncelikle LED'in negatif ve pozitif bacaklarının tam olarak nerede olduğunu bulmanız gerekir. İkincisi, akım sınırlayıcı dirençlerin kullanılması gerekiyor, aksi takdirde LED çok çabuk yanacaktır.

LED'le birlikte bir direnç kullanmazsanız içinden çok fazla akım geçeceğinden LED çok çabuk arızalanır. Sonuç olarak LED ısınacak ve kontak üreten ışık yok olacaktır.

Bir LED'in pozitif ve negatif bacaklarını birbirinden ayırmanın iki yolu vardır.

Birincisi pozitif bacağın daha uzun olmasıdır.

İkincisi, diyotun yuvasına girerken negatif bacak konektörünün üzerinde düz bir kenar bulunmasıdır.

Uzun bacakta düz kenarı olan bir LED ile karşılaşırsanız, uzun bacak hala pozitiftir.

Dirençler - genel bilgi

Direnç - direnç (İngilizce)

Adından da anlaşılacağı gibi dirençler elektrik akışına direnir. Direncin değeri (ohm) ne kadar yüksek olursa, direnç o kadar büyük olur ve kurulduğu devreden o kadar az akım akar. LED'den geçen akımı ve dolayısıyla parlaklığını düzenlemek için dirençlerin bu özelliğini kullanacağız.

Ama önce dirençlerden biraz bahsedelim.

Direncin ölçüldüğü birimler Ohm'dur ve birçok kaynakta Yunanca Ω - Omega harfiyle gösterilir. Ohm küçük bir direnç değeri olduğundan (bir devrede neredeyse algılanamaz), genellikle kOhm - kiloohm gibi birimlerle çalışacağız. (1000 Ohm) ve MOhm megaohm (1.000.000 ohm).

Bu örnekte dört farklı değerde direnç kullanacağız: 270 Ω, 470 Ω, 2,2 kΩ ve 10 kΩ. Bu dirençlerin boyutları aynıdır. Renk de. Onları ayıran tek şey renkli şeritlerdir. Bu şeritlerden dirençlerin değeri görsel olarak belirlenir.

Üç renkli şeridi ve sonuncusu altın şeridi olan dirençler için aşağıdaki yazışmalar işe yarar:

Kahverengi 1

kırmızı 2

Turuncu 3

Yeşil 5

Mor 7

İlk iki şerit ilk 2 sayısal değeri gösterir; dolayısıyla kırmızı, mor, 2, 7 anlamına gelir. Sonraki şerit, ilk iki rakamdan sonra yerleştirilmesi gereken sıfırların sayısıdır. Yani, yukarıdaki fotoğrafta olduğu gibi üçüncü şerit kahverengi ise, bir sıfır olacak ve direnç değeri 270 Ω olacaktır.

Kahverengi, siyah, turuncu çizgili direnç: 10 ve üç sıfır, yani 10000 Ω. Yani 10 kΩ.

LED'lerden farklı olarak dirençlerin pozitif ve negatif bacakları yoktur. Onları güce/toprağa bağlamak için hangi ayağı kullandığınız önemli değildir.

Bağlantı şeması

Aşağıdaki şemaya göre bağlayın:

Arduino'nun çevre birimlerine güç sağlamak için 5V'luk bir pimi vardır. Bunu bir LED'e ve bir dirence güç vermek için kullanacağız. Karttan başka hiçbir şeye ihtiyacınız olmayacak, sadece USB aracılığıyla bilgisayarınıza bağlayın.

270 Ω dirençle LED oldukça parlak yanmalıdır. 270 Ω direncini 470 Ω dirençle değiştirirseniz LED o kadar parlak yanmayacaktır. 2,2 kΩ dirençle LED'in biraz daha sönmesi gerekir. Sonuçta, 10 kΩ'luk bir dirençle LED zar zor görülebilecektir. Son adımda farkı görmek için muhtemelen kırmızı adaptörü anahtar olarak kullanarak çıkarmanız gerekecektir. Daha sonra parlaklıktaki farkı görebilirsiniz.

Bu arada bu deneyi ışıklar kapalıyken de yapabilirsiniz.

Çeşitli direnç kurulum seçenekleri

Direncin bir ayağına 5V bağlandığı anda direncin ikinci ayağı LED'in pozitif ayağına, LED'in ikinci ayağı ise toprağa bağlanır. Direnci aşağıda gösterildiği gibi LED'in arkasına gelecek şekilde hareket ettirirsek LED hala yanmaya devam edecektir.

LED yanıp sönüyor

LED'i Arduino çıkışına bağlayabiliriz. Kırmızı kabloyu aşağıda gösterildiği gibi 5V güç pininden D13'e taşıyın.

Şimdi incelediğimiz “Blink” örneğini indirin. Lütfen her iki LED'in de (yerleşik ve taktığınız harici) yanıp sönmeye başladığını unutmayın.

Arduino'da farklı bir pin kullanmayı deneyelim. D7 diyelim. Konektörü D13 pininden D7 pinine taşıyın ve kodunuzun aşağıdaki satırını değiştirin:

Değiştirilen taslağı Arduino'ya yükleyin. LED yanıp sönmeye devam edecek ancak bu sefer pin D7'den gelen gücü kullanıyor.

Önceki derslerde en basit devrelerle - montaj ve - tanıştık. Bugün potansiyometre (değişken direnç) ve LED içeren bir model oluşturuyoruz. Böyle bir model bir robotu kontrol etmek için kullanılabilir.

Potansiyometre bir değişkendir direnci ayarlanabilir direnç.Potansiyometreler robotikte çeşitli parametrelerin (ses seviyesi, güç, voltaj vb.) düzenleyicileri olarak kullanılır. Bizim modelimizdepotansiyometre düğmesini çevirerekLED'in parlaklığı bağlı olacaktır. Bu aynı zamanda temel planlardan biridir.

Modelin montajı için video talimatları:

İhtiyacımız olan modeli monte etmek için:

  • Arduino kartı (veya analogları);
  • Ekmek Tahtası;
  • 6 kablo ve/veya erkek-erkek jumper;
  • Işık yayan diyot;
  • potansiyometre (değişken direnç);
  • 220 Ohm direnç;
  • Arduino web sitesinden indirilebilen Arduino IDE.

Arduino'ya potansiyometre ve LED bağlamak için neye ihtiyacınız var?

Potansiyometreli ve LED’li Arduino modelinin bağlantı şeması:

Arduino modelinin potansiyometreli ve LED'li bağlantı şeması

Aşağıdaki program bu modelin çalışması için uygundur (programı Arduino IDE'ye kopyalamanız yeterlidir):

// LED'li pinlerin isimlerini veriyoruz
// ve potansiyometre
#led 9'u tanımla
#pot A0'ı tanımla
geçersiz kurulum ()
{
// LED'li pin - çıkış
pinMode(led, ÇIKIŞ);
// potansiyometreli pin - giriş
pinMode(pot, INPUT);
}
geçersiz döngü ()
{
// x değişkenini bildir
intx;
// potansiyometreden voltajı okuyun:
// 0'dan 1023'e kadar bir sayı alınacak
// 4'e böldüğünüzde aralıkta bir sayı elde edersiniz
// 0-255 (kesirli kısım atılacak)
x = analogOkuma(pot) / 4;
// sonucu LED'e aktarıyoruz
analogWrite(led, x);
}

LED'li bir potansiyometrenin monte edilmiş Arduino modeli şöyle görünür:

Potansiyometre ve LED'in bir araya getirildiği Arduino modeli

Bu üçüncü ders olan “Yeni Başlayanlar için Arduino”yu tamamlıyor. Devam edecek!

Ders gönderileri:

  1. İlk ders: .
  2. İkinci ders: .
  3. Üçüncü ders: .
  4. Dördüncü ders: .
  5. Beşinci ders: .
  6. Altıncı ders: .
  7. Yedinci ders: .
  8. Sekizinci ders: .
  9. Dokuzuncu ders:

Ve yeni bir görevi tamamlamaya çalışalım. Sanırım herkes, LED'lerin sorunsuz bir şekilde yanıp söndüğü Yeni Yıl vitrinlerini gördü. Diyelim ki böyle bir şey yapmak istiyoruz.
digitalWrite() fonksiyonuna zaten baktık ve yazdığı değerin yüksek veya düşük olmak üzere iki seçenekli olabileceğini biliyoruz. Bu durumda analogWrite() fonksiyonu bize yardımcı olacaktır. İşlevlerin "formülasyonları" yalnızca ilk öneklerde farklılık gösterir, bu nedenle hatırlanması kolaydır.

analogWrite() işlevi, digitalWrite() gibi, parantez içinde iki argüman içerir ve aynı sözel prensibe göre çalışır: "nerede, ne". Temel fark, alışılagelmiş DÜŞÜK veya YÜKSEK değerlerin yerine geniş bir aralıktaki değerleri kaydedebilme yeteneğidir. Bu, LED'in parlaklığını ayarlamamıza izin verecektir. Akılda tutulması gereken ana not, bu özelliğin yalnızca belirli kişiler üzerinde çalıştığıdır. Bu pinler "~" sembolüyle işaretlenmiştir. Bu sembol bunun bir PWM kontağı olduğunu gösterir. PWM (darbe genişliği modülasyonu), Rusça'da PWM'ye (darbe genişliği modülasyonu) benzer. Çalışma prensibi darbe süresinin değiştirilmesine dayanmaktadır. Grafiksel olarak bu şu şekilde gösterilebilir:

Basit bir örneğe bakarak bunun nasıl çalıştığını anlamaya çalışalım. Bunu yapmak için, LED'i 150 Ohm'luk bir direnç aracılığıyla PWM kontağına bağlamanız ve basit bir programı Arduino'ya "bağlamanız" gerekir. Bağlantı şeması ve çizim kodu aşağıda sunulmuştur:


geçersiz kurulum ()
{
pinMode(led,ÇIKIŞ);
}

geçersiz döngü ()
{
for(int i=0; i<=255; i++)
{
analogWrite(led,i);
gecikme(10);
}
for(int i=255; i>=0; i--)
{
analogWrite(led,i);
gecikme(10);
}
}


Kodun genel olarak açık olduğunu düşünüyorum ancak for() döngüsüne biraz dikkat etmemiz gerekiyor. İzin diye bir şey var. 8 bit çözünürlükle çalıştığımız için (bu konuya biraz sonra değineceğiz), minimum değer 0, maksimum ise 255 olacaktır. Her yinelemenin sonunda zaman gecikmesini 10 ms olarak ayarlıyoruz.

Önceki dersteki şemaya geri dönelim ve analogWrite() işlevini kullanarak benzer bir çelenk yapmaya çalışalım.


int butonuPin = 2;
int pinleri = (3,5,6,9,10,11);

boolean lastButton = DÜŞÜK;
boolean currentButton = DÜŞÜK;
boole etkinleştirme = yanlış;

geçersiz kurulum ()
{
pinMode(buttonPin, INPUT);
for(int mod = 0; mod<= 5; mode++) pinMode(pins, OUTPUT);
}

boole geri dönüşü (son boolean)
{
boole akımı = digitalRead(buttonPin);
if(son != geçerli)
{
gecikme(5);
akım = digitalRead(buttonPin);
}
dönüş akımı;
}

geçersiz döngü ()
{
currentButton = debounce(lastButton);
if(lastButton == DÜŞÜK && currentButton == YÜKSEK)
{
etkinleştir = !etkinleştir;
}

If(etkinleştir == doğru)
{
for (int i=0; i<=5; i++)
{
for (int parlaklık = 0; parlaklık<= 255; brightness++)
{
gecikme(1);
}
gecikme(40);
}
for (int i=0; i<=5; i++)
{
for (int parlaklık = 255; parlaklık >= 0; parlaklık--)
{
analogWrite(pinler[i], parlaklık);
gecikme(1);
}
gecikme(40);
}
}

If(etkinleştir == yanlış)
{
for(int i = 0; i<= 5; i++) digitalWrite(pins[i], LOW);
}

SonDüğme = geçerliDüğme;
}


Görsel olarak taslak biraz daha karmaşık hale geldi. Aslında burada her şey basit ve hadi çözelim. Bağlı tüm LED'leri tanımlamamız gerekiyor, ancak her zamanki int led yerine, her bir elemanı Arduino'da bir PWM pini olan bir dizi kullanıyoruz. Void setup() fonksiyonunun gövdesinde de kurnazca hareket ettik. Tüm kontakların "listelenmesini" for() döngüsüne emanet ettik ve her yinelemede karşılık gelen kontak OUTPUT'ta yapılandırıldı. Şimdi void loop() fonksiyonuna geçelim. debounce() işlevi ve başlangıç ​​if() koşulu değişmeden kalır. Hala iki değişkenin seviyesini kontrol ediyoruz: önceki değer (başlangıçta DÜŞÜK) ve düğmenin mevcut durumu. Bu koşullar karşılandığında etkinleştirme değişkeninin değeri tersine çevrilir. Bunu aklımızda tutarak, iki basit if() koşulu daha ekledik. Enable = true ise, "akışının" düzgünlüğü for() döngüsü tarafından kontrol edilen çelenk açılır. Etkin = yanlışsa tüm LED'ler kapatılır. Koşulların sonunda lastButton değişkeni butonun mevcut durumunu alır.
Programımızı test ederken her şeyin beklendiği gibi çalışmadığını fark ettik. Geçtiğimiz derste, zaman gecikmesi büyükse düğmenin süresi dolduktan sonra etkinleşeceği yönünde bir değişiklik yaptığımızı hatırlıyor musunuz? Önceki örnekte, çelenk açıldığında void loop() fonksiyonunun gövdesindeki toplam gecikme 85 ms idi. Bu bize belirli bir süre içinde “o noktaya ulaşma” fırsatı verdi. Bu çizimde, aynı koşullar altında gecikme birkaç kez farklılık göstermektedir. Belki de çelengi kapatmak istiyorsanız, "kesintiye uğratmak" kelimesi kendini akla getiriyor. Bu sorunun çözümü bu olacak!

Umarım bu makale sizin için yararlı olmuştur. Bir sonraki derste Arduino'daki kesintilere bakacağız ve istenen sonuca ulaşacağız.




Tepe