modf()

[Math]
double modf(double x, double *pointer);

Description

Returns the signed fractional part of the floating-point number x.

This function breaks the argument x into integral and fractional parts, each of which has the same sign as the argument. It stores the integral part as a floating-point number in the location pointed to by pointer and returns the fractional part.

Parameters

x: The value to calculate the fractional part.

pointer: The address of a variable to store the integral part.

Returns

The fractional part of x.

Example Code

The code reads the value of two potentiometers connected to pins INX and INY and place the fractional part of x on pin OUT and the integral part on pin OUT2.

void setup() {
    pinLabel(0, "INY");  // set the label of pin 0 to "INY"
    pinLabel(1, "INX");  // set the label of pin 1 to "INX"
    pinLabel(2, "OUT");  // set the label of pin 2 to "OUT"
    pinMode(2, OUTPUT);  // set pin 2 as output
    pinLabel(3, "OUT2"); // set the label of pin 3 to "OUT2"
    pinMode(3, OUTPUT);  // set pin 3 as output

    pinLabel(4, "VCC");  // set the label of pin 4 to "VCC"
    powerPin(4);         // set pin 4 as power pin
    pinLabel(5, "GND");  // set the label of pin 5 to "GND"
    groundPin(5);        // set pin 5 as ground pin
}

void loop() {
    // read the value of the potentiometers
    int val_x = analogRead(0);
    int val_y = analogRead(1);
    // map the value of the potentiometers from 0 to 1023
    // to the range of 0 to 10
    double x = map(val_x, 0, 1023, 0, 10);
    double y = map(val_y, 0, 1023, 0, 10);
    // calculate the fractional part of x
    double z;
    double integral;
    z = modf(x, &integral);
    // map the value of z from 0 to 1 to 0 to 1023
    int pwm = (int) map(z, 0, 1, 0, 1023);
    // write the value of pwm to pin 2
    analogWrite(2, pwm);
    // map the value of integral from 0 to 10 to 0 to 1023
    pwm = (int) map(integral, 0, 10, 0, 1023);
    // write the value of pwm to pin 3
    analogWrite(3, pwm);
}