To use the node in your project you should have the cesars/tfmini-lidar library installed. Use the “File → Add Library” menu item in XOD IDE if you don’t have it yet. See Using libraries for more info.
C++ implementation
#pragma XOD require "https://github.com/Cesar-S/DFRobot_TFmini"
{{#global}}
#include <DFRobot_TFmini.h>
{{/global}}
struct State {
uint8_t mem[sizeof(DFRobot_TFmini)];
};
using Type = DFRobot_TFmini*;
SoftwareSerial mySerial(8, 7); // RX, TX
uint16_t distance,strength;
{{ GENERATED_CODE }}
void evaluate(Context ctx) {
if (isSettingUp()){
auto state = getState(ctx);
Type TFmini = new (state->mem) DFRobot_TFmini();
}
if (!isInputDirty<input_Get>(ctx))
return;
auto state = getState(ctx);
auto TFmini = reinterpret_cast<DFRobot_TFmini*>(state->mem);
TFmini->begin(mySerial);
int _delay = getValue<input_Delay>(ctx);
int _serout = getValue<input_Serial_OUT>(ctx);
if(!TFmini->measure() & _serout){
Serial.print("Sensor not detected...");
Serial.println("...no read value");
}
if(TFmini->measure()){
if( _serout == true){//Measure Distance and get signal strength
distance = TFmini->getDistance(); //Get distance data
strength = TFmini->getStrength(); //Get signal strength data
Serial.print("Distance = ");
Serial.print(distance);
Serial.println("mm");
Serial.print("Strength = ");
Serial.println(strength);
}
emitValue<output_Distance>(ctx, distance);
emitValue<output_Strength>(ctx, strength);
delay(500);
}
delay(_delay);
emitValue<output_Done>(ctx, 1);
}