Cari Kode

Pelajaran 14/31-5: Contoh pemetaan() kode Arduino 2

Pelajaran 14/31-5: Contoh pemetaan() kode Arduino 2

Tutorial ini menunjukkan cara menggunakan fungsi map() pada Arduino untuk mengontrol kecerahan LED menggunakan nilai persentase (0–100%) alih-alih rentang mentah 0–255 yang diperlukan oleh analogWrite(). Ini adalah teknik mendasar yang menyederhanakan kode Anda dan membuatnya jauh lebih intuitif, karena Anda dapat berpikir dalam persentase daripada nilai byte yang sembarangan.

Mobil Sunfounder yang dirakit

Keterampilan ini penting untuk proyek apa pun di mana Anda perlu menskalakan pembacaan sensor atau sinyal kontrol. Misalnya, Anda dapat menggunakannya untuk:

  • Mengontrol kecerahan LED atau kecepatan motor berdasarkan pembacaan potensiometer.
  • Mengonversi keluaran sensor suhu (misalnya, 0–1023) ke rentang Celsius atau Fahrenheit.
  • Memetakan input analog joystick untuk mengontrol posisi motor servo.
  • Membuat antarmuka pengguna sederhana di mana nilai persentase digunakan untuk mengatur tingkat daya perangkat.

Di akhir pelajaran ini, Anda akan dapat menulis kode yang lebih bersih, lebih mudah dipelihara, dan lebih mudah dibaca serta disesuaikan.

Perangkat Keras/Komponen

Proyek ini menggunakan set komponen minimal, menjadikannya sempurna untuk pemula. Anda akan membutuhkan:

  • Papan Arduino (misalnya, Uno).
  • Sebuah LED.
  • Resistor 220-ohm.
  • Kabel jumper.
  • Breadboard (opsional tetapi disarankan).

Panduan Pengkabelan

Pengkabelan untuk proyek ini sangat sederhana, seperti yang ditunjukkan dalam video (di video pada 20:47). LED terhubung ke pin 3 Arduino melalui resistor pembatas arus 220-ohm.

Hubungkan anoda (kaki lebih panjang) LED ke pin 3 melalui resistor. Hubungkan katoda (kaki lebih pendek) LED ke pin ground (GND) pada Arduino.

Penjelasan Kode

Contoh ini berfokus pada fungsi yang ditentukan pengguna yang menyederhanakan kontrol kecerahan LED. Kode dibangun di sekitar fungsi khusus yang disebut pwmValue(), yang merupakan kunci untuk membuat kode intuitif.

Mari kita uraikan bagian-bagian kode yang dapat dikonfigurasi:

int LEDpin = 3; //mendefinisikan pin untuk LED

Baris ini mendefinisikan pin Arduino yang terhubung dengan LED. Anda dapat mengubah angka 3 ke pin lain yang mendukung PWM di papan Arduino Anda.

Inti dari proyek ini adalah fungsi khusus pwmValue(). Fungsi ini mengambil nilai persentase sebagai input dan mengonversinya ke rentang 0–255 yang digunakan oleh analogWrite(). Di sinilah fungsi map() melakukan keajaibannya.

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

Untuk menggunakan fungsi ini, Anda cukup memanggilnya dengan persentase kecerahan yang diinginkan. Fungsi akan mengembalikan nilai yang benar untuk analogWrite(). Misalnya, pwmValue(60) akan mengembalikan 153, yang sesuai dengan 60% dari 255. Fungsi ini juga menyertakan pemeriksaan keamanan untuk memastikan input persentase berada antara 0 dan 100, mengembalikan 0 jika berada di luar rentang ini.

Dalam fungsi setup(), Anda dapat melihat bagaimana ini digunakan:

int b=5;//60% kecerahan
Serial.println( pwmValue(b)   );//cetak di serial monitor
analogWrite(LEDpin, pwmValue(b));// nyalakan LED dengan kecerahan 60%

Di sini, variabel b diatur ke persentase kecerahan yang Anda inginkan. Fungsi pwmValue(b) kemudian digunakan baik untuk mencetak nilai yang dipetakan ke Serial Monitor maupun untuk mengatur kecerahan LED. Untuk mengubah kecerahan LED, Anda hanya perlu memodifikasi nilai b. Fungsi map() menangani semua perhitungan yang diperlukan untuk Anda.

Proyek Langsung/Demonstrasi

Dalam video, presenter mendemonstrasikan proyek dengan mengubah nilai variabel b dan mengunggah kode ke Arduino. Ketika b diatur ke 60, kode memetakannya ke 153 dan LED menyala pada kecerahan 60%. Mengubah b ke 90 memetakan ke 229, membuat LED terlihat lebih terang. Mengaturnya ke 100 memetakan ke 255, yang merupakan kecerahan maksimum. Demonstrasi dengan jelas menunjukkan bagaimana fungsi map() memungkinkan Anda mengontrol LED menggunakan nilai persentase yang intuitif, sementara Serial Monitor mengonfirmasi nilai tepat 0–255 yang dikirim ke pin (di video pada 21:29).

Proyek terkait dari video ini

Bab

  • [00:00] Pengenalan fungsi Millis dan map
  • [01:19] Apa itu Millis dan mengapa menggunakannya
  • [05:46] Menggunakan Millis dengan event untuk mengambil tindakan
  • [08:35] Contoh Millis 2 dengan tombol tekan
  • [12:14] Contoh Millis 3 memeriksa dua kali penekanan tombol
  • [17:20] Pengenalan fungsi map()
  • [19:47] Contoh kode untuk memetakan persentase ke kecerahan LED
  • [20:47] Demonstrasi langsung fungsi map()
  • [22:41] Membuat fungsi khusus untuk menangani pemetaan

Gambar

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
Bahasa: 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
 

Sumber daya & referensi

Berkas📁

Panduan Pengguna