---
description: >-
  Basic example: importing a velocity effect exported from Feelix and playing it
  in a loop. The example code in de library provides a more elaborate example
  with callback and alternating between modes.
---

# Import Velocity Effect

#### Initialize exported velocity effect. Content can be exported in Feelix see [Export](../../../create-and-edit-files/export).

The code generated during export can be pasted in the [FeelixEffect library](../../../../downloads/c-library#library-for-exported-feelix-effects).

```cpp
/* initialize velocity effect */ 
EffectConfig_s velocity_effect_config { 
    .data_size = 39,
    .angle = 1900.0,
    .quality = 50,
    .effect_type = Effect_type::NOTSET,
    .control_type = Control_type::VELOCITY
};

float data_velocity_effect[] = {0.4, 0.421930712, 0.629039512, 0.894060032, 0.710566161, 0.779037123, 0.799908945, 0.760426118, 0.641906967, 0.440053119, 0.173911728, -0.112390448, -0.369818486, -0.568972266, -0.702936269, -0.776986255, -0.799999625, -0.769220739, -0.667949720, -0.488878603, -0.241135732, 0.036209555, 0.285494146, 0.466127080, 0.568262685, 0.599999234, 0.577934856, 0.505729440, 0.377929191, 0.200979469, 0.002474856, -0.175598100, -0.304512257, -0.377294017, -0.399998069, -0.370054414, -0.289393446, -0.166375320, -0.0};
FeelixEffect velocity_effect = FeelixEffect(velocity_effect_config, data_velocity_effect);
```

#### Start velocity effect

```cpp
/* the velocity effect is time based 
 * it will start to play using the .play(bool play, long time = millis())
 * to start play = true
 * to stop play = false
 * time (optional)
 */

velocity_effect.play(true, (long) feelix.current_time);
```

#### Update velocity effect in the loop

<pre class="language-cpp"><code class="lang-cpp">/* read angle, velocity and direction
 * this function needs to update at a high frequency */
<strong>feelix.run();
</strong>
/* play velocity effect, call every loop to update values based on new angle */
feelix.playVelocityEffect(velocity_effect);
  
/* function to write the values of the effects to the motor */
feelix.move_feelix();

</code></pre>

### Putting it all together

```cpp
#include "Feelix.h"

/* initialize Feelix */
Feelix feelix = Feelix();

/* initialize velocity effect */ 
EffectConfig_s velocity_effect_config { 
    .data_size = 39,
    .angle = 1900.0,
    .quality = 50,
    .effect_type = Effect_type::NOTSET,
    .control_type = Control_type::VELOCITY
};

float data_velocity_effect[] = {0.4, 0.421930712, 0.629039512, 0.894060032, 0.710566161, 0.779037123, 0.799908945, 0.760426118, 0.641906967, 0.440053119, 0.173911728, -0.112390448, -0.369818486, -0.568972266, -0.702936269, -0.776986255, -0.799999625, -0.769220739, -0.667949720, -0.488878603, -0.241135732, 0.036209555, 0.285494146, 0.466127080, 0.568262685, 0.599999234, 0.577934856, 0.505729440, 0.377929191, 0.200979469, 0.002474856, -0.175598100, -0.304512257, -0.377294017, -0.399998069, -0.370054414, -0.289393446, -0.166375320, -0.0};
FeelixEffect velocity_effect = FeelixEffect(velocity_effect_config, data_velocity_effect);


/* variables to read and print sensor data */
const uint8_t loop_interval = 50;
uint8_t loop_count = 0;


void setup() {

  Serial.begin(115200);

  feelix.init();
  
  velocity_effect.infinite = true;
  velocity_effect.play(true, (long) feelix.current_time);

      
  delay(100);
}


void loop() {


  /* read angle, velocity and direction
   * this function needs to update at a high frequency without interruptions */
  feelix.run();

  /* functions within the loop that need to be called less frequently: 
   * adapt frequency with loop_interval
   * E.g. for printing values and reading sensors;
   */
  if (loop_count++ > loop_interval) {
    loop_count = 0;

    feelix.blinkStatusLED();  
    feelix.readTemperature();

    /* print angle and velocity (values are updated in feelix.run()) */
    Serial.println((String) feelix.angleDeg + "\t" + feelix.velocity + "\t" + 
                            feelix.temp + "\t" + feelix.driverVoltage);
  }

  /* play velocity effect, call every loop to update values based on new angle */
  feelix.playVelocityEffect(velocity_effect);
  
  /* function to write the values of the effects to the motor */
  feelix.move_feelix();

}

```
