Fungsi constrain() dan map() pada Arduino

Hallo, selamat datang kembali. Pada artikel ini, kita akan membahas tentang fungsi pada pemrograman arduino yang secara khusus digunakan melakukan pembatasan nilai dan pemetaan nilai pada arduino seperti fungsi constrain(), map(), abs(), max() dan min(). fungsi ini berguna untuk memproses nilai input menjadi nilai yang bisa dipakai sebagai output, contohnya mengubah input analog dari ADC menjadi output PWM. mari kita bahas satu per satu :

abs(x)

Fungsi abs() digunakan untuk menghitung nilai absolut dari suatu bilangan, nilai absolut adalah nilai suatu bilangan tanpa tanda plus dan minus, nilai absolut juga bisa dibayangkan sebagai jarak suatu bilangan dari nol. berikut sintax nya:

				
					abs(x)
				
			
Paramenter:
  • x   : bilangan yang dihitung

Nilai balik fungsi ini adalah bilangan positif, meskipun nilai x adalah bilangan negatif, fungsi ini akan memberikan nilai balik bilangan positif.

constrain()

Fungsi constrain digunakan untuk memberikan batas atas dan batas bawah dari suatu bilangan atau data. berikut syntaxnya : 

				
					constrain(x,a,b)
				
			

Parameter :

  • x     =     Bilangan/data yang akan dibatasi (bisa menggunakan tipe data apa saja)
  • a     =     Batas bawah
  • b     =     Batas atas

Dengan fungsi constrain, kita bisa membatasi rentang nilai input yang diproses arduino, contoh saat menggunakan input dari potensiometer, yang rentang inputnya dari 0 sampai 1024 bisa kita batasi menjadi 100 sampai 500 saja.

map()

berfungsi untuk
memetakan suatu bilangan dalam suatu rentang ke rentang bilangan yang lain. Berbeda dengan constrain(), fungsi map() tidak membatasi nilai sehingga nilai yang berada diluar rentang juga diproses. berikut syntaxnya :

				
					map (value, fromLow, fromHigh, toLow, toHigh);
				
			

Parameter

  • value : variabel yang menyimpan nilai input/ nilai yang dipetakan
  • fromLow  : batas bawah nilai awal
  • fromHigh : batas atas nilai awal
  • toLow  : batas bawah nilai pemetaan
  • toHigh : batas atas nilai pemetaan

misal kita menggunakan potensio sebagai input maka nilai yang kita dapat sebagai input adalah 10 bit (0 sampai 1024), saat kita ingin pemproses nilai tersebut agar menjadi output PWM yang dimana resolusinya adalah 8 bit (0 sampai 225) kita perlu mengubah nilai 10 bit menjadi 8 bit, dengan menggunakan fungsi map, kita bisa memetakan nilai input tersebut menjadi rentang nilai 0 sampai 225, jadi saat kita memutar potensio dari posisi awal ke posisi maksimalnya nilai input akan berubah menjadi rentang 0 sampai 225, kita juga bisa mengatur pemetaan nilai nya ke rentang yang lebih besar dari nilai input. Ingat bahwa nilai balik dari fungsi map memiliki tipe data long. 

max()

Fungsi max() berguna untuk membatasi nilai minimum dari suatu input, contoh kita mengatur parameter fungsi ini dengan nilai 20, maka setiap input yang akan diproses nilai minimum nya akan menjadi 20, fungsi max() hanya berpengaruh pada nilai minimum saja, sedangkan nilai maksimum nya tidak akan mengalami perubahan. berikut sintaxnya :

				
					max(x, y);
				
			

Parameter

  • x : variabel yang menyimpan nilai input
  • y : nilai batas minimum yang kita atur

min()

Fungsi min() adalah kebalikan dari fungsi max(), yaitu membatasi nilai maksimum dari suatu input, misal kita mengatur parameter fungsi ini dengan nilai 200, maka setiap nilai input yang di proses tidak bisa lebih dari 200. fungsi min() hanya berpengaruh pada nilai maksimum saja, nilai minimum input tidak akan mengalami perubahan. syntaxnya seperti ini :

				
					min(x, y);
				
			

Parameter

  • x : variabel yang menyimpan nilai input
  • y : nilai batas maksimum yang kita atur

Experiment

Sekarang kita coba membuat program yang bisa mendemonstrasikan kegunaan dari fungsi-fungsi diatas. bahan yang diperlukan hanya arduino UNO potensiometer saja, coba ketik sketch dibawah :

				
					//constrain dan mapping - purwarupa3d.com

byte potPin = A0;
int constrainValue;
int mappingValue;
int maxValue;
int minValue;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {

int analogSignal = analogRead(potPin);
constrainValue = constrain(analogSignal, 50 , 100);
mappingValue = map (analogSignal,0,1024,0,225);
maxValue = max (analogSignal,20);
minValue = min(analogSignal,200);
Serial.print("Nilai balik constrain= ");
Serial.println(constrainValue);
Serial.print("Nilai balik map= ");
Serial.println(mappingValue);
Serial.print("Nilai balik max= ");
Serial.println(maxValue);
Serial.print("Nilai balik min= ");
Serial.println(minValue);
delay (1000);
}

				
			

Saya menggunakan simulator wokwi untuk membuat experimen ini, jika ingin mecoba juga silakan klik disini. coba upload sketch dan buka serial monitor, kemudian coba putar potensiometer dari posisi minimum ke posisi maksimum, pada simulator saya hasilnya seperti ini

Silahkan coba ubah-ubah parameternya dan lihat apa pengaruhnya terhadap nilai balik nya. semoga bermanfaat

Tinggalkan komentar