Feelix
  • Feelix Documentation
  • Getting started
    • Designing Effects
      • Torque Effects
      • Position Effects
      • Velocity Effects
      • Dependent/Independent Effects
    • Effect Library
    • Creating Collections
  • Create and edit
    • Edit tools
    • Effect Settings
    • Layers
    • Grid
    • Export Effects
    • TensorFlow
  • Uploading files
    • Setting up STM32
    • Connect and Upload
    • Hardware Settings
    • Troubleshooting Feelix
  • Hardware support
    • Hardware
    • PCB pinout
    • Setup
    • Dependencies
    • FeelixEffect Docs
      • Setup
      • Motor control
      • Import Effects
        • Import Haptic Effect
        • Import Velocity Effect
        • Functions and Parameters
      • I2C communication
  • Downloads
    • Feelix Design Tool
    • Feelix Arduino Library
    • 3D Models
    • Old Library Releases
Powered by GitBook
On this page

Was this helpful?

  1. Hardware support
  2. FeelixEffect Docs
  3. Import Effects

Import Velocity Effect

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.

PreviousImport Haptic EffectNextFunctions and Parameters

Last updated 6 days ago

Was this helpful?

Initialize exported velocity effect. Content can be exported in Feelix see .

The code generated during export can be pasted in the .

/* 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

/* 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

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

/* 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();

Putting it all together

#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();

}
Export
FeelixEffect library