Kod Ara

Ders 14/31-5: Arduino kodlama map() örneği 2

Ders 14/31-5: Arduino kodlama map() örneği 2

Bu eğitim, Arduino map() fonksiyonunu kullanarak bir LED'in parlaklığını, analogWrite() tarafından gereken ham 0–255 aralığı yerine bir yüzde değeriyle (0–100%) nasıl kontrol edeceğinizi gösterir. Bu, kodunuzu basitleştiren ve keyfi bayt değerleri yerine yüzdelerle düşünebildiğiniz için çok daha sezgisel hale getiren temel bir tekniktir.

Sunfounder araba monte edilmiş

Bu beceri, sensör okumalarını ölçeklemeniz veya kontrol sinyallerini dönüştürmeniz gereken her proje için gereklidir. Örneğin, şunları yapmak için kullanabilirsiniz:

  • Bir potansiyometrenin okumasına dayalı olarak bir LED'in parlaklığını veya bir motorun hızını kontrol etmek.
  • Bir sıcaklık sensörünün çıkışını (örneğin, 0–1023) Celsius veya Fahrenheit aralığına dönüştürmek.
  • Bir joystick'in analog girişini bir servo motorun konumunu kontrol etmek için eşlemek.
  • Bir cihazın güç seviyesini ayarlamak için yüzde değerinin kullanıldığı basit bir kullanıcı arayüzü oluşturmak.

Bu dersin sonunda, okunması ve ayarlanması daha kolay olan daha temiz, daha sürdürülebilir kod yazabileceksiniz.

Donanım/Bileşenler

Bu proje, yeni başlayanlar için mükemmel olan minimum bir bileşen seti kullanır. İhtiyacınız olacaklar:

  • Bir Arduino kartı (örneğin, Uno).
  • Bir LED.
  • 220 ohm'luk bir direnç.
  • Jumper kablolar.
  • Bir breadboard (isteğe bağlı ancak önerilir).

Bağlantı Kılavuzu

Bu projenin bağlantısı, videoda gösterildiği gibi (videoda 20:47'de) çok basittir. LED, Arduino'nun 3 numaralı pinine 220 ohm'luk akım sınırlama direnci üzerinden bağlanır.

LED'in anotunu (uzun bacak) direnç üzerinden 3 numaralı pine bağlayın. LED'in katodunu (kısa bacak) Arduino'daki toprak (GND) pinine bağlayın.

Kod Açıklaması

Bu örnek, LED'in parlaklığını kontrol etmeyi basitleştiren kullanıcı tanımlı bir fonksiyona odaklanır. Kod, kodu sezgisel yapan anahtar olan pwmValue() adlı özel bir fonksiyon etrafında inşa edilmiştir.

Kodun yapılandırılabilir kısımlarını inceleyelim:

int LEDpin = 3; //LED için pini tanımla

Bu satır, LED'in bağlı olduğu Arduino pinini tanımlar. 3 sayısını Arduino kartınızdaki PWM destekli herhangi bir başka pinle değiştirebilirsiniz.

Projenin çekirdeği, özel fonksiyon pwmValue()'dir. Bu fonksiyon, girdi olarak bir yüzde değeri alır ve bunu analogWrite() tarafından kullanılan 0–255 aralığına dönüştürür. map() fonksiyonunun sihrini yaptığı yer burasıdır.

int pwmValue(int percent)
{
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
}

Bu fonksiyonu kullanmak için, istediğiniz parlaklık yüzdesiyle çağırmanız yeterlidir. Fonksiyon, analogWrite() için doğru değeri döndürecektir. Örneğin, pwmValue(60) 153 değerini döndürür, bu da 255'in %60'ına karşılık gelir. Fonksiyon ayrıca, girdi yüzdesinin 0 ile 100 arasında olduğundan emin olmak için bir güvenlik kontrolü içerir ve bu aralığın dışındaysa 0 döndürür.

setup() fonksiyonunda, bunun nasıl kullanıldığını görebilirsiniz:

int b=5;//%60 parlaklık
Serial.println( pwmValue(b)   );//seri monitöre yazdır
analogWrite(LEDpin, pwmValue(b));// LED'i %60 parlaklıkla yak

Burada, b değişkeni istediğiniz parlaklık yüzdesine ayarlanır. pwmValue(b) fonksiyonu daha sonra hem eşlenen değeri Seri Monitöre yazdırmak hem de LED'in parlaklığını ayarlamak için kullanılır. LED'in parlaklığını değiştirmek için yalnızca b değerini değiştirmeniz gerekir. map() fonksiyonu sizin için gerekli tüm hesaplamaları yapar.

Canlı Proje/Gösterim

Videoda sunucu, b değişkeninin değerini değiştirerek ve kodu Arduino'ya yükleyerek projeyi gösterir. b 60 olarak ayarlandığında, kod bunu 153'e eşler ve LED %60 parlaklıkta yanar. b'yi 90 olarak değiştirmek 229'a eşler ve LED'i belirgin şekilde daha parlak yapar. 100 olarak ayarlamak 255'e eşler, bu da maksimum parlaklıktır. Gösterim, map() fonksiyonunun sezgisel bir yüzde değeri kullanarak LED'i kontrol etmenize nasıl izin verdiğini açıkça gösterirken, Seri Monitör pine gönderilen tam 0–255 değerini doğrular (videoda 21:29'da).

Bu videodan ilgili projeler

Bölümler

  • [00:00] Millis ve map fonksiyonlarına giriş
  • [01:19] Millis nedir ve neden kullanılır
  • [05:46] Eylem yapmak için Millis'i bir olayla kullanma
  • [08:35] Millis örnek 2 buton ile
  • [12:14] Millis örnek 3 iki buton basışını kontrol etme
  • [17:20] map() fonksiyonuna giriş
  • [19:47] Yüzdeyi LED parlaklığına eşleme için kod örneği
  • [20:47] map() fonksiyonunun canlı gösterimi
  • [22:41] Eşlemeyi işlemek için özel bir fonksiyon oluşturma

Görseller

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
Dil: C++
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialzie serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=5;//60% brightness

    Serial.println( pwmValue(b)   );//print it on serial monitor
    analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }

/*
 * pwmValue(int percent)
 * @param precent is value between 0 to 100
 * @return it returns the mapped value from 0 to 255
 * written by Ahmad Shamshiri on Dec 9, 2022
 * 
 */
 int pwmValue(int percent)
 {
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
 } //pwmValue end
 

Kaynaklar ve referanslar

Dosyalar📁

Kullanım Kılavuzu