Fungsi map untuk bilangan pecahan/float pada Arduino

Fungsi map() pada arduino IDE akan mengkonversikan suatu bilangan dalam suatu rentang ke rentang bilangan lain. Namun pada Arduino IDE map yang tersedia hanya untuk bilangan integer.

Bagaimana jika kita menginginkan fungsi map untuk bilangan pecahan/float:

  1. Faktor kali, yaitu dengan mengalikan rentang tujuan sehingga menjadi integer misalnya dikalikan dengan 10, 100 dan kemudian dibagi lagi dengan bilangan pengali tersebut contohnya:
    float x1 = map(adc, 0, 1023, 87 * 100, 108 * 100) / 100.0;
    
  2. Dengan modifikasi fungsi map untuk mengakomodir bilangan pecahan, seperti terlihat pada contoh sketch dibawah.

Skema pengujian fungsi map pecahan:

contoh sketch/program/koding penggunaan fungsi map pecahan:

void setup() {
  Serial.begin(9600);
  Serial.println("Fungsi map untuk bilangan pecahan/float");
  Serial.println("https://www.project.semesin.com/");
}

void loop() {
  uint16_t adc = analogRead(A0);

//Range/bentang asal adc = 0..1023
//Range/bentang tujuan   = 87.00 - 108.00

  float x1 = map(adc, 0, 1023, 87 * 100, 108 * 100) / 100.0;
  float x2 = mapPecahan(adc, 0, 1023, 87, 108);
  
  Serial.print(adc);
  Serial.print(" => ");
  Serial.print(x1, 2);
  Serial.print(" == ");
  Serial.println(x2, 2);

  delay(1000);
}

float mapPecahan(long x, long fromLow, long fromHigh, float toLow, float toHigh)
{
  return (x - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
}

Leave a Reply

Your email address will not be published. Required fields are marked *